Bash скрипт для бэкапа и восстановления всех баз и пользователей в mysql
Эта заметка о том, как можно быстро сдампить все базы MySql в отдельные файлы в среде bash:
Backup:
for db in $(echo "show databases;" |mysql |grep -v "Database\|^mysql$\|information_schema\|performance_schema\|^test");
do
mysqldump --routines --opt $db |gzip > "$db".sql.gz;
echo "done with $db";
done
Restore:
for db in $(ls |cut -d "." -f 1);
do
mysql $db < "$db".sql;
echo "done with $db";
done
Если нужно при восстановлении еще и создать новые базы:
for db in $(ls |cut -d "." -f 1);
do
echo "create database \`$db\`;" |mysql;
mysql $db < "$db".sql;
echo "done with $db";
done
Все это можно просто скопировать и вставить в терминал.
Я делаю вывод “done with $db”, что бы знать, какие базы уже обработаны.
А вот таким образом можно получить всех mysql пользователей с паролями и правами на базы:
for user in $(echo "select concat(user,'@',host) from mysql.user;" |mysql |grep -v concat);
do
echo "show grants for $(echo $user|sed -e "s|@|'@'|g" -e "s|^|'|g" -e "s|$|'|g");" |mysql |grep -v "^Grants for\|root" |sed 's/$/;/g';
done
Полученный вывод можно скопировать и ставить в консоле mysql на новом сервере, или сохранить в файл.
Исключаем пользователя root, что бы при восстановлении на новом сервере, не затереть существующего.