diff -Nur --no-dereference smeserver-mysql-2.7.0.old/root/etc/e-smith/events/actions/mysql-dump-tables smeserver-mysql-2.7.0/root/etc/e-smith/events/actions/mysql-dump-tables --- smeserver-mysql-2.7.0.old/root/etc/e-smith/events/actions/mysql-dump-tables 2022-03-11 10:32:13.000000000 -0500 +++ smeserver-mysql-2.7.0/root/etc/e-smith/events/actions/mysql-dump-tables 2024-09-01 00:17:19.404000000 -0400 @@ -18,24 +18,53 @@ echo $message | /usr/bin/mail -s "error on backup of $db MariaDB database" admin fi message="$message \nThere was an error trying to dump database $db, please check for table errors in this db. Forcing a backup of the corrupted DB." - mysqldump --force --ignore-table=mysql.event --single-transaction --add-drop-table -QB "$db" -r /home/e-smith/db/mysql/"$db"-failed.dump || message="$message \nFailed to force backup of corrupted db $db as $db-failed.dump" >&2 + mysqldump --force --ignore-table=mysql.event --ignore-table=mysql.user --single-transaction --add-drop-table -QB "$db" -r /home/e-smith/db/mysql/"$db"-failed.dump || message="$message \nFailed to force backup of corrupted db $db as $db-failed.dump" >&2 if [ "$fixtables" = "enabled" ]; then repair="failure" message="$message \nTrying to auto-repair the db and do a backup after..." mysqlcheck -s --auto-repair -c "$db" && \ - mysqldump --ignore-table=mysql.event --single-transaction --add-drop-table -QB "$db" -r /home/e-smith/db/mysql/"$db".dump && repair="success" + mysqldump --ignore-table=mysql.event --ignore-table=mysql.user --single-transaction --add-drop-table -QB "$db" -r /home/e-smith/db/mysql/"$db".dump && repair="success" message="$message \n => $repair" fi echo $message echo $message | /usr/bin/mail -s "error on backup of $db MariaDB database" admin } +# Do nothing if disabled if [ "$status" = "disabled" ] then echo "mysqld is disabled - no tables dumped" >&2 exit 0 fi + +# Actual mysql db backup for db in $(mysql -BNre "show databases;"|egrep -vi "^information_schema$|^performance_schema$") do - mysqldump --ignore-table=mysql.event --single-transaction --add-drop-table -QB "$db" -r /home/e-smith/db/mysql/"$db".dump || onfailure $db + mysqldump --ignore-table=mysql.event --ignore-table=mysql.user --single-transaction --add-drop-table -QB "$db" -r /home/e-smith/db/mysql/"$db".dump || onfailure $db +done + +# Backup the users and privileges +# backup of mysql/mariadb users excluding root for later restore. +# would allow compatible backup from mariadb <103 to mariadb >= 103 +# will also need to exclude mysql.user from restore in mariadb >= 103 +# inspired by https://stackoverflow.com/a/56588240 +# for mariadb 5.5 we replace authentication_string with Password +mysql -sNe " \ + SELECT \ + CONCAT( 'CREATE USER \'', User, '\'@\'', Host, '\' IDENTIFIED BY \'', Password, '\'\;' ) AS User \ + FROM mysql.user \ + WHERE \ + User NOT LIKE 'mysql.%' AND CONCAT( User, Host ) <> 'rootlocalhost' \ +" >/home/e-smith/db/mysql/mysql.privileges.dump +mysql -sNe " \ + SELECT \ + CONCAT( '\'', User, '\'@\'', Host, '\'' ) as User FROM mysql.user \ + WHERE \ + User NOT LIKE 'mysql.%' \ + AND CONCAT( User, Host ) <> 'rootlocalhost' \ +" | sort | while read u ; + do echo "-- $u">> /home/e-smith/db/mysql/mysql.privileges.dump + mysql -sNe "show grants for $u" | sed 's/$/;/' >> /home/e-smith/db/mysql/mysql.privileges.dump done +echo >> /home/e-smith/db/mysql/mysql.privileges.dump +echo "FLUSH PRIVILEGES;" >> /home/e-smith/db/mysql/mysql.privileges.dump diff -Nur --no-dereference smeserver-mysql-2.7.0.old/rootscl/etc/e-smith/events/actions/mariadb_VER_-dump-tables smeserver-mysql-2.7.0/rootscl/etc/e-smith/events/actions/mariadb_VER_-dump-tables --- smeserver-mysql-2.7.0.old/rootscl/etc/e-smith/events/actions/mariadb_VER_-dump-tables 2024-08-31 23:52:18.590000000 -0400 +++ smeserver-mysql-2.7.0/rootscl/etc/e-smith/events/actions/mariadb_VER_-dump-tables 2024-09-01 00:16:51.103000000 -0400 @@ -35,24 +35,53 @@ echo $message | /usr/bin/mail -s "error on backup of $db MariaDB !!!VER!!! database" admin fi message="$message \nThere was an error trying to dump database $db, please check for table errors in this db. Forcing a backup of the corrupted DB." - /opt/rh/rh-mariadb!!!VER!!!/root/usr/bin/mysqldump --socket=!!!SOCKET!!! --force --ignore-table=mysql.event --single-transaction --add-drop-table -QB "$db" -r /home/e-smith/db/mariadb!!!VER!!!/"$db"-failed.dump || message="$message \nFailed to force backup of corrupted db $db as $db-failed.dump" >&2 + /opt/rh/rh-mariadb!!!VER!!!/root/usr/bin/mysqldump --socket=!!!SOCKET!!! --force --ignore-table=mysql.event --ignore-table=mysql.user --single-transaction --add-drop-table -QB "$db" -r /home/e-smith/db/mariadb!!!VER!!!/"$db"-failed.dump || message="$message \nFailed to force backup of corrupted db $db as $db-failed.dump" >&2 if [ "$fixtables" = "enabled" ]; then repair="failure" message="$message \nTrying to auto-repair the db and do a backup after..." /opt/rh/rh-mariadb!!!VER!!!/root/usr/bin/mysqlcheck --socket=!!!SOCKET!!! -s --auto-repair -c "$db" && \ - /opt/rh/rh-mariadb!!!VER!!!/root/usr/bin/mysqldump --socket=!!!SOCKET!!! --ignore-table=mysql.event --single-transaction --add-drop-table -QB "$db" -r /home/e-smith/db/mariadb!!!VER!!!/"$db".dump && repair="success" + /opt/rh/rh-mariadb!!!VER!!!/root/usr/bin/mysqldump --socket=!!!SOCKET!!! --ignore-table=mysql.event --ignore-table=mysql.user --single-transaction --add-drop-table -QB "$db" -r /home/e-smith/db/mariadb!!!VER!!!/"$db".dump && repair="success" message="$message \n => $repair" fi echo $message echo $message | /usr/bin/mail -s "error on backup of $db MariaDB database" admin } +# Do nothing if disabled if [ "$status" = "disabled" ] then echo "mysqld is disabled - no tables dumped" >&2 exit 0 fi + +# Actual mysql db backup for db in $(/opt/rh/rh-mariadb!!!VER!!!/root/usr/bin/mysql --socket=!!!SOCKET!!! -BNre "show databases;"|egrep -vi "^information_schema$|^performance_schema$") do - /opt/rh/rh-mariadb!!!VER!!!/root/usr/bin/mysqldump --socket=!!!SOCKET!!! --ignore-table=mysql.event --single-transaction --add-drop-table -QB "$db" -r /home/e-smith/db/mariadb!!!VER!!!/"$db".dump || onfailure $db + /opt/rh/rh-mariadb!!!VER!!!/root/usr/bin/mysqldump --socket=!!!SOCKET!!! --ignore-table=mysql.event --ignore-table=mysql.user --single-transaction --add-drop-table -QB "$db" -r /home/e-smith/db/mariadb!!!VER!!!/"$db".dump || onfailure $db +done + +# Backup the users and privileges +# backup of mysql/mariadb users excluding root for later restore. +# would allow compatible backup from mariadb <103 to mariadb >= 103 +# will also need to exclude mysql.user from restore in mariadb >= 103 +# inspired by https://stackoverflow.com/a/56588240 +/opt/rh/rh-mariadb!!!VER!!!/root/usr/bin/mysql -sNe " \ + SELECT \ + CONCAT( 'CREATE USER \'', User, '\'@\'', Host, '\' IDENTIFIED BY \'', authentication_string, '\'\;' ) AS User \ + FROM mysql.user \ + WHERE \ + User NOT LIKE 'mysql.%' AND CONCAT( User, Host ) <> 'rootlocalhost' \ +" >/home/e-smith/db/mariadb!!!VER!!!/mysql.privileges.dump +/opt/rh/rh-mariadb!!!VER!!!/root/usr/bin/mysql -sNe " \ + SELECT \ + CONCAT( '\'', User, '\'@\'', Host, '\'' ) as User FROM mysql.user \ + WHERE \ + User NOT LIKE 'mysql.%' \ + AND CONCAT( User, Host ) <> 'rootlocalhost' \ +" | sort | while read u ; + do echo "-- $u">> /home/e-smith/db/mariadb!!!VER!!!/mysql.privileges.dump + /opt/rh/rh-mariadb!!!VER!!!/root/usr/bin/mysql -sNe "show grants for $u" | sed 's/$/;/' >> /home/e-smith/db/mariadb!!!VER!!!/mysql.privileges.dump done +echo >> /home/e-smith/db/mariadb!!!VER!!!/mysql.privileges.dump +echo "FLUSH PRIVILEGES;" >> /home/e-smith/db/mariadb!!!VER!!!/mysql.privileges.dump +