72 lines
2.4 KiB
Plaintext
72 lines
2.4 KiB
Plaintext
Вот надёжный шаблон скрипта для резервного копирования MySQL / MariaDB, полностью аналогичный предыдущему PostgreSQL-скрипту: с логированием, сжатием, безопасной передачей пароля, ротацией старых бэкапов и поддержкой одной или всех баз.
|
||
|
||
Файл: mysql-backup.sh
|
||
|
||
Как передать пароль безопасно?
|
||
|
||
Рекомендуется: файл ~/.my.cnf
|
||
|
||
Создайте /root/.my.cnf:
|
||
|
||
chmod 600 /root/.my.cnf
|
||
|
||
Содержимое:
|
||
|
||
[client]
|
||
host = localhost
|
||
port = 3306
|
||
user = root
|
||
password = ваш_пароль
|
||
|
||
Тогда не нужно указывать MYSQL_PASSWORD в скрипте — mysqldump сам прочитает настройки.
|
||
|
||
Это самый безопасный способ: пароль не виден в ps, не хранится в скрипте.
|
||
|
||
Альтернатива: раскомментируйте MYSQL_PASSWORD
|
||
|
||
Скрипт создаст временный .cnf с правами 600 и удалит его после работы (trap гарантирует это).
|
||
|
||
Как использовать:
|
||
|
||
Сохраните как /root/mysql-backup.sh
|
||
Сделайте исполняемым:
|
||
|
||
chmod +x /root/mysql-backup.sh
|
||
|
||
Отредактируйте:
|
||
MYSQL_DB → например, grafana, zabbix, wordpress
|
||
Или оставьте "all", чтобы бэкапить всё
|
||
|
||
Добавьте в cron:
|
||
0 1 * * * /root/mysql-backup.sh
|
||
|
||
Логи:
|
||
/root/backups/mysql/backup.log
|
||
|
||
Важные опции mysqldump:
|
||
|
||
Важные опции mysqldump:
|
||
Опция
|
||
--single-transaction
|
||
Для InnoDB: делает согласованный дамп без блокировки таблиц
|
||
|
||
--routines
|
||
Сохраняет хранимые процедуры и функции
|
||
|
||
--triggers
|
||
Сохраняет триггеры
|
||
|
||
--events
|
||
Сохраняет события планировщика
|
||
|
||
--databases
|
||
Гарантирует, что в дампе будет CREATE DATABASE
|
||
|
||
Восстановление:
|
||
|
||
gunzip -c /root/backups/mysql/grafana-20260123-0220.sql.gz | mysql -u root -p
|
||
|
||
Или, если у вас ~/.my.cnf:
|
||
gunzip -c backup.sql.gz | mysql
|
||
|
||
Если вы используете MariaDB — всё работает точно так же (она совместима с MySQL). |