Система управления базами данных mysql и ее форк mariadb являются очень популярными. Все благодаря открытому коду и бесплатности. Огромное количество проектов в интернете, и не только, используют mysql/mariadb в качестве сервера баз данных.
Регулярное резервное копирование информации является надежным средством защиты от ее порчи или утраты. Существует не малое количество программных средств для организации резервного копирования mysql. Рассмотрим один из самых простых способов.
Замечательная утилита mysqldump позволяет делать бэкапы баз данных mysql/mariadb на лету, без остановки работы сервера. С её помощью, мы будем делать копию всех баз данных. Архивы старше 10 дней будем удалять.
Примерный код скрипта:
#!/bin/bash DB_BACKUP="/backups/backup-mysql/`date +%Y-%m-%d`" DB_USER="root" DB_PASSWD="mysql-root-password" HN=`hostname | awk -F. '{print $1}'` # Создаем каталог для сохранения резервной копии mkdir -p $DB_BACKUP # Удаляет архивы старше 10 дней find /backups/backup-mysql/ -maxdepth 1 -type d -mtime +10 -exec rm -rf {} \; # Делаем копию каждой базы данных сервера mysql/mariadb for db in $(mysql --user=$DB_USER --password=$DB_PASSWD -e 'show databases' -s --skip-column-names|grep -viE '(staging|performance_schema|information_schema)'); do mysqldump --user=$DB_USER --password=$DB_PASSWD --events --opt --single-transaction $db | bzip2 > "$DB_BACKUP/mysqldump-$HN-$db-$(date +%Y-%m-%d).sql.bz2"; done
Сохраняем скрипт, например в /usr/local/bin/backup-mysql.sh, и устанавливаем на него права доступа 700 с помощью chmod. Теперь никто кроме пользователя root не сможет прочитать его содержимое и узнать пароль от сервера mysql.
Из копии мы исключаем не нужные для последующего восстановления базы данных performance_schema и information_schema.
Для регулярного автоматического запуска каждую ночь, нужно добавить задание в cron:
55 1 * * * /usr/local/bin/backup-mysql.sh
Скрипт может выглядеть на много проще, если использовать параметр –all-databases, вместо прямого перебора всех баз данных. Однако выбранный подход позволяет упростить работу с копиями больших баз данных.
И на последок, чуть не забыл. Не следует хранить бэкапы на том же сервере, для которого они предназначаются.
В данном скрипте подразумевается, что каталог /backups является подключенным надежным удаленным ресурсом.
Тут ошибка:
mysqldump —user=$DB_USER —password=$DB_PASSWD —events —opt —single-transaction $db | bzip2 > «$DB_BACKUP/mysqldump-$HN-$db-$(date +%Y-%m-%d).sql.bz2»;
Перенаправление потока «>» экранировалось в «>».
https://www.backup-solutions.ru/rezervnoe-kopirovanie-mysql/ — хорошее решение есть у Bacula