[mariadb-galera] Check upgrade script added to warn about need for mysql_upgrade

Honza Horak hhorak at fedoraproject.org
Tue Sep 30 19:30:05 UTC 2014


commit 10ba9513f459d7d8a76e2130f341c09ac7d9b115
Author: Honza Horak <hhorak at redhat.com>
Date:   Tue Sep 30 18:52:22 2014 +0200

    Check upgrade script added to warn about need for mysql_upgrade

 mariadb-galera.spec     |   13 +++++++++----
 mariadb-scripts.patch   |    3 ++-
 mysql-check-upgrade.sh  |   39 +++++++++++++++++++++++++++++++++++++++
 mysql-prepare-db-dir.sh |    2 ++
 mysql.service.in        |    1 +
 5 files changed, 53 insertions(+), 5 deletions(-)
---
diff --git a/mariadb-galera.spec b/mariadb-galera.spec
index 40912f6..7dd2f8d 100644
--- a/mariadb-galera.spec
+++ b/mariadb-galera.spec
@@ -126,9 +126,10 @@ Source12:         mysql-prepare-db-dir.sh
 Source13:         mysql-wait-ready.sh
 Source14:         mysql-check-socket.sh
 Source15:         mysql-scripts-common.sh
-Source16:         mysql-compat.service.in
-Source17:         mysql-compat.conf.in
-Source18:         mysql.init.in
+Source16:         mysql-check-upgrade.sh
+Source17:         mysql-compat.service.in
+Source18:         mysql-compat.conf.in
+Source19:         mysql.init.in
 Source50:         rh-skipped-tests-base.list
 Source51:         rh-skipped-tests-intel.list
 Source52:         rh-skipped-tests-arm.list
@@ -538,7 +539,8 @@ cat %{SOURCE54} >> mysql-test/rh-skipped-tests.list
 %endif
 
 cp %{SOURCE2} %{SOURCE3} %{SOURCE10} %{SOURCE11} %{SOURCE12} %{SOURCE13} \
-   %{SOURCE14} %{SOURCE15} %{SOURCE16} %{SOURCE17} %{SOURCE18} %{SOURCE70} scripts
+   %{SOURCE14} %{SOURCE15} %{SOURCE16} %{SOURCE17} %{SOURCE18} %{SOURCE19} \
+   %{SOURCE70} scripts
 
 %build
 
@@ -717,6 +719,7 @@ install -D -p -m 755 scripts/mysql.init %{buildroot}%{_initddir}/%{daemon_name}
 install -p -m 755 scripts/mysql-prepare-db-dir %{buildroot}%{_libexecdir}/mysql-prepare-db-dir
 install -p -m 755 scripts/mysql-wait-ready %{buildroot}%{_libexecdir}/mysql-wait-ready
 install -p -m 755 scripts/mysql-check-socket %{buildroot}%{_libexecdir}/mysql-check-socket
+install -p -m 755 scripts/mysql-check-upgrade %{buildroot}%{_libexecdir}/mysql-check-upgrade
 install -p -m 644 scripts/mysql-scripts-common %{buildroot}%{_libexecdir}/mysql-scripts-common
 
 # Remove libmysqld.a
@@ -1153,6 +1156,7 @@ fi
 %{_libexecdir}/mysql-prepare-db-dir
 %{_libexecdir}/mysql-wait-ready
 %{_libexecdir}/mysql-check-socket
+%{_libexecdir}/mysql-check-upgrade
 %{_libexecdir}/mysql-scripts-common
 
 %{?with_init_systemd:%{_tmpfilesdir}/%{name}.conf}
@@ -1226,6 +1230,7 @@ fi
   client.cnf into -libs, mysql_plugin and msql2mysql into base,
   tokuftdump and aria_* into -server, errmsg-utf8.txt into -errmsg
 - Remove duplicate cnf files packaged using %%doc
+- Check upgrade script added to warn about need for mysql_upgrade
 
 * Mon Sep 08 2014 Honza Horak <hhorak at redhat.com> - 1:10.0.13-1
 - Rebase to version 10.0.13
diff --git a/mariadb-scripts.patch b/mariadb-scripts.patch
index 6e8053a..c1f286b 100644
--- a/mariadb-scripts.patch
+++ b/mariadb-scripts.patch
@@ -1,7 +1,7 @@
 diff -up mariadb-10.0.12/scripts/CMakeLists.txt.systemd mariadb-10.0.12/scripts/CMakeLists.txt
 --- mariadb-10.0.12/scripts/CMakeLists.txt.systemd	2014-07-21 10:49:58.491470586 +0200
 +++ mariadb-10.0.12/scripts/CMakeLists.txt	2014-07-21 14:21:22.673329708 +0200
-@@ -368,6 +368,34 @@ ELSE()
+@@ -368,6 +368,35 @@ ELSE()
        COMPONENT ${${file}_COMPONENT}
       )
    ENDFOREACH()
@@ -13,6 +13,7 @@ diff -up mariadb-10.0.12/scripts/CMakeLists.txt.systemd mariadb-10.0.12/scripts/
 +    mysql-prepare-db-dir
 +    mysql-wait-ready
 +    mysql-check-socket
++    mysql-check-upgrade
 +    mysql-scripts-common
 +    mysql_config_multilib
 +    mysql.init
diff --git a/mysql-check-upgrade.sh b/mysql-check-upgrade.sh
new file mode 100644
index 0000000..8fefe6b
--- /dev/null
+++ b/mysql-check-upgrade.sh
@@ -0,0 +1,39 @@
+#!/bin/sh
+
+source "`dirname ${BASH_SOURCE[0]}`/mysql-scripts-common"
+
+upgrade_info_file="$datadir/mysql_upgrade_info"
+version=0
+# get version as integer from mysql_upgrade_info file
+if [ -f "$upgrade_info_file" ] && [ -r "$upgrade_info_file" ] ; then
+    version_major=$(cat "$upgrade_info_file" | head -n 1 | sed -e 's/\([0-9]*\)\.\([0-9]*\)\..*$/\1/')
+    version_minor=$(cat "$upgrade_info_file" | head -n 1 | sed -e 's/\([0-9]*\)\.\([0-9]*\)\..*$/\2/')
+    if [[ $version_major =~ ^[0-9]+$ ]] && [[ $version_minor =~ ^[0-9]+$ ]] ; then
+        version=$((version_major*100+version_minor))
+    fi
+fi
+
+# compute current version as integer
+thisversion=$((@MAJOR_VERSION@*100+ at MINOR_VERSION@))
+
+# provide warning in cases we should run mysql_upgrade
+if [ $version -ne $thisversion ] ; then
+
+    # give extra warning if some version seems to be skipped
+    if [ $version -gt 0 ] && [ $version -lt 505 ] ; then
+        echo "The datadir located at $datadir seems to be older than of a version 5.5. Please, mind that as a general rule, to upgrade from one release series to another, go to the next series rather than skipping a series." >&2
+    fi
+
+    cat <<EOF >&2
+The datadir located at $datadir needs to be upgraded using 'mysql_upgrade' tool. This can be done using the following steps:
+
+  1. Back-up your data before running 'mysql_upgrade'
+  2. Start the database daemon using 'systemctl start @DAEMON_NAME at .service'
+  3. Run 'mysql_upgrade' with a database user that has sufficent privileges
+
+Read more about 'mysql_upgrade' usage at:
+https://mariadb.com/kb/en/mariadb/documentation/sql-commands/table-commands/mysql_upgrade/
+EOF
+fi
+
+exit 0
diff --git a/mysql-prepare-db-dir.sh b/mysql-prepare-db-dir.sh
index e1dad61..67fe919 100644
--- a/mysql-prepare-db-dir.sh
+++ b/mysql-prepare-db-dir.sh
@@ -80,6 +80,8 @@ if [ ! -d "$datadir/mysql" ] ; then
         fi
         exit $ret
     fi
+    # upgrade does not need to be run on a fresh datadir
+    echo "@MYSQL_VERSION_ID@" >"$datadir/mysql_upgrade_info"
     # In case we're running as root, make sure files are owned properly
     chown -R "$myuser:$mygroup" "$datadir"
 fi
diff --git a/mysql.service.in b/mysql.service.in
index 4c2b60a..a33df16 100644
--- a/mysql.service.in
+++ b/mysql.service.in
@@ -38,6 +38,7 @@ ExecStartPre=@libexecdir@/mysql-prepare-db-dir %n
 # per bug #547485
 ExecStart=@bindir@/mysqld_safe --basedir=@prefix@
 ExecStartPost=@libexecdir@/mysql-wait-ready $MAINPID
+ExecStartPost=@libexecdir@/mysql-check-upgrade
 
 # Give a reasonable amount of time for the server to start up/shut down
 TimeoutSec=300


More information about the scm-commits mailing list