summary refs log tree commit diff
path: root/gnu
diff options
context:
space:
mode:
authorMarius Bakke <marius@gnu.org>2022-10-29 18:18:43 +0200
committerMarius Bakke <marius@gnu.org>2022-11-20 17:54:05 +0100
commit6ac97bb5035ae10ed8ae39b7dbfbf60030dad4d8 (patch)
treeac159a4bfa749f0b5e85460a74b3f5f531bb38b6 /gnu
parentc7b266fdf2754c139803c156677bf2828c78d072 (diff)
downloadguix-6ac97bb5035ae10ed8ae39b7dbfbf60030dad4d8.tar.gz
services: mysql-upgrade: Support custom datadir.
* gnu/services/databases.scm (mysql-upgrade-wrapper): Take service
configuration as argument, and pass the config file to mysql_upgrade.
(mysql-upgrade-shepherd-service): Pass CONFIG instead of just socket and
executable to MYSQL-UPGRADE-WRAPPER.
Diffstat (limited to 'gnu')
-rw-r--r--gnu/services/databases.scm61
1 files changed, 31 insertions, 30 deletions
diff --git a/gnu/services/databases.scm b/gnu/services/databases.scm
index cc9379792d..96504a27ea 100644
--- a/gnu/services/databases.scm
+++ b/gnu/services/databases.scm
@@ -6,7 +6,7 @@
 ;;; Copyright © 2018 Clément Lassieur <clement@lassieur.org>
 ;;; Copyright © 2018 Julien Lepiller <julien@lepiller.eu>
 ;;; Copyright © 2019 Robert Vollmert <rob@vllmrt.net>
-;;; Copyright © 2020 Marius Bakke <marius@gnu.org>
+;;; Copyright © 2020, 2022 Marius Bakke <marius@gnu.org>
 ;;; Copyright © 2021 David Larsson <david.larsson@selfhosted.xyz>
 ;;; Copyright © 2021 Aljosha Papsch <ep@stern-data.com>
 ;;;
@@ -678,33 +678,36 @@ FLUSH PRIVILEGES;
                    (list #$(mysql-install config))
                    #:log-file "/var/log/mysqld-install.log")))))
 
-(define (mysql-upgrade-wrapper mysql socket-file)
+(define (mysql-upgrade-wrapper config)
   ;; The MySQL socket and PID file may appear before the server is ready to
   ;; accept connections.  Ensure the socket is responsive before attempting
   ;; to run the upgrade script.
-  (program-file
-   "mysql-upgrade-wrapper"
-   #~(begin
-       (let ((mysql-upgrade #$(file-append mysql "/bin/mysql_upgrade"))
-             (timeout 20))
-         (begin
-           (let loop ((i 0))
-             (catch 'system-error
-               (lambda ()
-                 (let ((sock (socket PF_UNIX SOCK_STREAM 0)))
-                   (connect sock AF_UNIX #$socket-file)
-                   (close-port sock)
-                   ;; The socket is ready!
-                   (execl mysql-upgrade mysql-upgrade
-                          (string-append "--socket=" #$socket-file))))
-               (lambda args
-                 (if (< i timeout)
-                     (begin
-                       (sleep 1)
-                       (loop (+ 1 i)))
-                     ;; No luck, give up.
-                     (throw 'timeout-error
-                            "MySQL server did not appear in time!"))))))))))
+  (let ((mysql (mysql-configuration-mysql config))
+        (socket-file (mysql-configuration-socket config))
+        (config-file (mysql-configuration-file config)))
+    (program-file
+     "mysql-upgrade-wrapper"
+     #~(begin
+         (let ((mysql-upgrade #$(file-append mysql "/bin/mysql_upgrade"))
+               (timeout 20))
+           (begin
+             (let loop ((i 0))
+               (catch 'system-error
+                 (lambda ()
+                   (let ((sock (socket PF_UNIX SOCK_STREAM 0)))
+                     (connect sock AF_UNIX #$socket-file)
+                     (close-port sock)
+                     ;; The socket is ready!
+                     (execl mysql-upgrade mysql-upgrade
+                            (string-append "--defaults-file=" #$config-file))))
+                 (lambda args
+                   (if (< i timeout)
+                       (begin
+                         (sleep 1)
+                         (loop (+ 1 i)))
+                       ;; No luck, give up.
+                       (throw 'timeout-error
+                              "MySQL server did not appear in time!")))))))))))
 
 (define (mysql-upgrade-shepherd-service config)
   (list (shepherd-service
@@ -712,11 +715,9 @@ FLUSH PRIVILEGES;
          (requirement '(mysql))
          (one-shot? #t)
          (documentation "Upgrade MySQL database schemas.")
-         (start (let ((mysql (mysql-configuration-mysql config))
-                      (socket (mysql-configuration-socket config)))
-                  #~(make-forkexec-constructor
-                     (list #$(mysql-upgrade-wrapper mysql socket))
-                     #:user "mysql" #:group "mysql"))))))
+         (start #~(make-forkexec-constructor
+                   (list #$(mysql-upgrade-wrapper config))
+                   #:user "mysql" #:group "mysql")))))
 
 
 (define (mysql-shepherd-services config)