Системные администраторы делятся на два типа:
- Кто еще не делает бэкапы
- Кто делает бэкапы
Есть еще третий тип, кто не только делает бэкапы, но и проверяет успешность их восстановления.
В этом материале рассмотрим встроенное средство mysqldump экспорта базы данных MySQL и MariaDB.
Создание архивных копий баз данных MySQL и MariaDB
Простой пример экспорта одной базы:
mysqldump -p zabbix > /data/backup/mysql/zabbix.sql
Пример экспорта нескольких бах данных (ключ -B):
mysqldump -p -B zabbix mybase wordpress > /data/backup/mysql/zabbix_mybase_wordpress.sql
Экспорт всех баз данных (ключ -A):
mysqldump -p -A > /data/backup/mysql/all.sql
Сжатие на лету:
mysqldump -p -A | gzip > /data/backup/mysql/all.sql.gz
В этих примерах мы считаем, что вы являетесь пользователем root и на базу установлен пароль (ключ -p).
После ключа -p можно указать пароль без пробела (-pMypassworD), при этом получим сообщение о безопасности:
mysqldump: [Warning] Using a password on the command line interface can be insecure.
Есть два способа не использовать пароль для подключения:
Первый способ
Заключается в создании пользовательского конфигурационного файла .my.cnf
vi ~/.my.cnf [client] host=localhost user=root password=MypassworD socket=/tmp/mysql.sock
chmod 400 ~/.my.cnf
Минус такого способа — пароль все равно указан явно.
Но можно не указывать аргумент -p
Второй способ
Создание бинарного файла login-path
mysql_config_editor set --login-path=root --host=localhost --user=root --password
Для его использования включаем в команду или скрипты конструкцию —login-path=root
Пример:
mysqldump --login-path=root -A > /data/backup/mysql/all.sql
Минусов у такого решения нет, пароль хранится в нечитаемом виде.
Создадим скрипт для архивирования нужных нам баз данных
Скрипт архивирует с помощью gzip экспортируемые файлы.
Так же в скрипте есть функционал количества сохраняемых архивных копий.
Я использую операционную систему FreeBSD, в дистрибутивах Linix данный скрипт работоспособен, только исправьте пути
vi /home/admins/script/mysql_backup.sh
#!/bin/sh # Заводим переменные BACKUPDIR="/home/backup" DATE="`date +%Y-%m-%d_%H:%M`" DAY="15" ZIP="/usr/bin/gzip -cf5" DUMP="/usr/local/bin/mysqldump --login-path=root -B" # В цикле for обрабатываем список баз данных for base in ftpusers radius zabbix do # Если нет выходных директорий, создаем их if [ ! -d $BACKUPDIR/$base ] then /bin/mkdir -p $BACKUPDIR/$base /bin/chmod 700 $BACKUPDIR/$base/ fi # Делаем бэкап каждой базы из списка $DUMP $base | $ZIP > $BACKUPDIR/$base/$base-$DATE.sql.gz # Меняем парава на архивы -rw-r----- /bin/chmod -R o-rwx $BACKUPDIR # Удаляем архивы старше $DAY дней /usr/bin/find $BACKUPDIR/$base -type f -mtime +$DAY -delete done
ftpusers radius zabbix — список архивируемых баз данных MySQL
Делаем скрипт исполняемым:
chmod +x /home/admins/script/mysql_backup.sh
Остается только внести наш скрипт в планировщик для ежедневной архивации:
# crontab -e 10 0 * * * /home/admins/script/mysql_backup.sh
На этом все.