Mydumper подходит для резервного копирования как больших БД, так и очень маленьких. Главной особенностью этой утилиты является то, что она выполняет резервное копирование параллельно в нескольких потоках, что в несколько раз быстрее и эффективнее, чем стандартные инструменты, такие как mysqldump.
1) Установка Mydumper
Существует множество способов установить mydumper, но так сложилось, что большинство из них в Интернете устарели или даже никогда не работали. В настоящее время для Centos 7 установка mydumper выглядит следующим образом:
yum install ftp://ftp.pbone.net/mirror/ftp5.gwdg.de/pub/opensuse/repositories/home:/LenzGr/CentOS_7/x86_64/mydumper-0.9.1-1.4.x86_64.rpm
После завершения установки мы можем запросить вывод команды —help для mydumper:
mydumper --help Usage: mydumper [OPTION?] multi-threaded MySQL dumping Help Options: -?, --help Show help options Application Options: -B, --database Database to dump -T, --tables-list Comma delimited table list to dump (does not exclude regex option) -o, --outputdir Directory to output files to -s, --statement-size Attempted size of INSERT statement in bytes, default 1000000 -r, --rows Try to split tables into chunks of this many rows. This option turns off --chunk-filesize -F, --chunk-filesize Split tables into chunks of this output file size. This value is in MB -c, --compress Compress output files -e, --build-empty-files Build dump files even if no data available from table -x, --regex Regular expression for 'db.table' matching -i, --ignore-engines Comma delimited list of storage engines to ignore -m, --no-schemas Do not dump table schemas with the data -d, --no-data Do not dump table data -G, --triggers Dump triggers -E, --events Dump events -R, --routines Dump stored procedures and functions -k, --no-locks Do not execute the temporary shared read lock. WARNING: This will cause inconsistent backups --less-locking Minimize locking time on InnoDB tables. -l, --long-query-guard Set long query timer in seconds, default 60 -K, --kill-long-queries Kill long running queries (instead of aborting) -D, --daemon Enable daemon mode -I, --snapshot-interval Interval between each dump snapshot (in minutes), requires --daemon, default 60 -L, --logfile Log file name to use, by default stdout is used --tz-utc SET TIME_ZONE='+00:00' at top of dump to allow dumping of TIMESTAMP data when a server has data in different time zones or data is being moved between servers with different time zones, defaults to on use --skip-tz-utc to disable. --skip-tz-utc --use-savepoints Use savepoints to reduce metadata locking issues, needs SUPER privilege --success-on-1146 Not increment error count and Warning instead of Critical in case of table doesn't exist --lock-all-tables Use LOCK TABLE for all, instead of FTWRL -U, --updated-since Use Update_time to dump only tables updated in the last U days --trx-consistency-only Transactional consistency only -h, --host The host to connect to -u, --user Username with privileges to run the dump -p, --password User password -P, --port TCP/IP port to connect to -S, --socket UNIX domain socket file to use for connection -t, --threads Number of threads to use, default 4 -C, --compress-protocol Use compression on the MySQL connection -V, --version Show the program version and exit -v, --verbose Verbosity of output, 0 = silent, 1 = errors, 2 = warnings, 3 = info, default 2
2) Скрипт для выполнения бекапов БД
Теперь нам нужно подготовить скрипт, в котором мы опишем все необходимые команды для выполнения резервного копирования наших баз данных по расписанию.
### создаём директорию sbin в /root/ ### mkdir /root/sbin ### создаём директорию для хранения бекапов ### mkdir /backup ### создаём файл скрипта с командами ### nano /root/sbin/mysql-backup
Размещаем в нашем файле следующее содержимое: /root/sbin/mysql-backup
ionice -c3 mydumper --user=your-mysql-user --password=your-mysql-user-password -o /backup/`date +%Y-%m-%d_%H-%M` --compress --triggers --events --routines --build-empty-files --less-locking --use-savepoints --success-on-1146 --compress-protocol --threads=2 --verbose=3 /usr/bin/ionice -c3 find /backup/ -type f -mtime +14 -exec rm -f {} \; >/dev/null 2>&1 /usr/bin/ionice -c3 find /backup/ -type d -empty -exec rmdir {} \;
В этом скрипте вам необходимо поправить следующие данные:
--user=(логин пользователя БД, который имеет доступ к бд, в отдельных случаях может использоваться рут, если требуется бекапить абсолютно все базы MySQL) --password=(пароль пользователя которого мы указали выше)
а так же:
--threads=(Количество потоков, на которых будет работать бекап, обычно выставляется значение равное половине от количества ядер вашего сервера. Так же стоит учесть, что если сервер сильно нагружен - стоит скорректировать значение в меньшую сторону)
и количество хранимых копий бекапа:
-mtime +14 (в нашем примере 14 дней, т.е. на сервере будет храниться 14 бекапов бд за предыдущие дни. Скорректируйте данное значение в зависимости от ваших целей и размера БД)
Сохраняем наши изменения в файле и выходим. Теперь нам необходимо установить права на выполнение:
chmod 775 /root/sbin/mysql-backup
3) Настройка выполнения задачи по времени
Теперь нам нужно создать задачу cron, которая будет запускать скрипт резервного копирования в указанное время, поэтому выполните команду для создания файла:
nano /etc/cron.d/mysql-backup
и вставьте следующее в /etc/cron.d/mysql-backup
0 2 * * * root bash -lc "/root/sbin/mysql-backup" > /dev/null
Сохраняем и выходим. Теперь каждую ночь, в 02:00, будет запущен наш скрипт резервного копирования. Он создаст резервную копию всех баз данных на сервере в каталоге / backup /, а также удалит дополнительные резервные копии (мы указали период хранения в процессе создания).
0 Comments