Резервное копирование MySQL с человеческим лицом
Запись создана 23 марта, 2014
На дворе 2014-ый год, а мы всё как-то старинке снимаем mysql дампы старым mysldump, который фигачит всю ночь, блокирует таблицы и всячески бесит тех кому эти таблицы нужны.
percona-xtrabackup — настало твое время! Мало того что чудо сие не лочит таблицы, работает быстрее Mysqldump, может делать инкрементные бакапы, так ведь с его помощью можно реплику master-slave сделать прям вот на ходу, без даунтаймов, гемороя и СМС.
Но обо всём по порядку, начнем пожалуй с резервного копирования. За исходные возьмем CentOS 6.5 x86-ая архитектура, и MariaDB 5.5.
Устанавливаем xtrabackup из официального репозитория:
mkdir -p /backup/{mysql,data} yum localinstall https://www.percona.com/redir/downloads/percona-release/redhat/latest/percona-release-0.1-4.noarch.rpm -y yum install percona-xtrabackup -y
Устраняем необходимость вводить логин и пароль рута от БД:
cat >> /root/.my.cnf << EOF [client] user = root pass = 2WJgur34r EOF
В файле /etc/my.cnf.d/server.cnf в секцию [mysqld] добавляем:
datadir=/var/lib/mysql
Скрипт который идет ниже ставим в крон:
#!/bin/bash innobackupex --rsync /backup/mysql/ for i in `find /backup/mysql/ -maxdepth 1 -type d | grep -vFx /backup/mysql/`;do innobackupex --apply-log $i;done for i in `find /backup/mysql/ -maxdepth 1 -type d | grep -vFx /backup/mysql/`;do tar czf $i.tgz $i;rm -rf $i;done
Результаты выглядят так:
[root@it ~]# ls -1 /backup/mysql/ 2014-03-22_20-08-08.tgz 2014-03-22_20-40-35.tgz 2014-03-22_23-07-04.tgz 2014-03-23_17-20-06.tgz
Справедливости ради, замечу что таблицы MyISAM оно похоже таки лочит. Но судя по опыту поднятия mysql-slave с 50 гиговой базой, нагрузки дает гораздо меньше, локи проходят почти не заметно.
Схожие темы
» Запись из раздела MySQL | 1 комметарий
Спасибо за полезный материал. Часто на практике сталкиваемся с достаточно большими о объёму базами данных.