diff -Nru mysql-5.7-5.7.31/debian/changelog mysql-5.7-5.7.31/debian/changelog --- mysql-5.7-5.7.31/debian/changelog 2020-07-20 10:50:54.000000000 +0000 +++ mysql-5.7-5.7.31/debian/changelog 2020-08-12 19:17:09.000000000 +0000 @@ -1,3 +1,11 @@ +mysql-5.7 (5.7.31-0ubuntu0.18.04.2) bionic; urgency=medium + + * debian/mysql-server-5.7.postinst: don't run mysql_upgrade if in + (super) read-only mode. + (LP: #1889472) + + -- Simon Deziel Wed, 12 Aug 2020 19:17:09 +0000 + mysql-5.7 (5.7.31-0ubuntu0.18.04.1) bionic-security; urgency=medium * SECURITY UPDATE: Update to 5.7.31 to fix security issues diff -Nru mysql-5.7-5.7.31/debian/mysql-server-5.7.postinst mysql-5.7-5.7.31/debian/mysql-server-5.7.postinst --- mysql-5.7-5.7.31/debian/mysql-server-5.7.postinst 2018-01-15 11:04:57.000000000 +0000 +++ mysql-5.7-5.7.31/debian/mysql-server-5.7.postinst 2020-08-12 19:17:09.000000000 +0000 @@ -131,6 +131,21 @@ mysql --no-defaults -u root --socket="$tmpdir/mysqld.sock" /dev/null 2>&1 } +# Check if in (super) read-only mode +# Usage: test_mysql_is_readonly +# Params: +# tmpdir - Location of mysqld.sock file +test_mysql_is_readonly() { + local tmpdir=$1 + local readonly=0 + readonly=$(mysql --no-defaults -u root --socket="$tmpdir/mysqld.sock" --skip-column-names --batch --execute "SELECT @@global.read_only OR @@global.super_read_only;" &2 else - # mysql_upgrade returns exit status 2 if the database is already upgraded - # (LP: #1566406) so ignore its exit status if it is 2. - result=0 - mysql_upgrade --no-defaults --socket="$tmpdir/mysqld.sock" || result=$? - if [ $result -ne 0 -a $result -ne 2 ]; then - echo "mysql_upgrade failed with exit status $result" >&2 - stop_server "$tmpdir" - rm -rf "$tmpdir" - exit 1 + # only run mysql_upgrade if NOT in read-only (LP: #1889472) + if ! test_mysql_is_readonly "$tmpdir"; then + # mysql_upgrade returns exit status 2 if the database is already upgraded + # (LP: #1566406) so ignore its exit status if it is 2. + result=0 + mysql_upgrade --no-defaults --socket="$tmpdir/mysqld.sock" || result=$? + if [ $result -ne 0 -a $result -ne 2 ]; then + echo "mysql_upgrade failed with exit status $result" >&2 + stop_server "$tmpdir" + rm -rf "$tmpdir" + exit 1 + fi + else + echo "mysql_upgrade skipped due to (super) read-only mode" fi # Stop the server stop_server "$tmpdir"