背景介紹:
在一些技術群裡面,看到仍然有一些運維在用mysqldump這樣的命令來備份MySQL,於是感覺有必要介紹一下innobackupex。
現在,絕大多數使用MySQL的場景中,都用到了Master-Slave這樣的架構。相對於mysqldump而言,使用innobackupex備份有以下好處:
1. 以數據文件為備份對象,文件級別備份,速度快,尤其適合需要對所有數據進行備份的場景;
2. 熱備份,不會對現有的數據庫訪問造成任何影響;
3. 記錄binlog以及replication相關信息,在創建和恢復Slave時非常有用;
以下是風哥的幾點補充:
1.用innobackupex可以做到不停業務在線備份,前提是對innodb引擎,對myisam也會鎖表;
2.在備份過程會導致IO很高,建議在一台slave上做備份(我一般用一台slave只做備份用),不建議在主上備份; 3.innobackupex可以用增量與全量備份方式配合;
具體用例:
環境介紹
架構:Master-Slave
MySQL端口:3308
配置文件:/etc/my_3308.cnf
備份目錄:/mysql-backup/3308
MySQL數據目錄:/opt/mysql_3308/data
服務腳本:/etc/init.d/mysql_3308
在Master上備份
# innobackupex --defaults-file=/etc/my_3308.cnf /mysql-backup/3308 --user=backup-user --password=backup-user --no-lock
在Slave上備份
# innobackupex --defaults-file=/etc/my_3308.cnf /mysql-backup/3308 --user=backup-user --password=backup-user --no-lock --slave-info --safe-slave-backup
在Master上恢復
# /etc/init.d/mysql_3308 stop
# mv /opt/mysql_3308/data /opt/mysql_3308/data_broken
# mkdir /opt/mysql_3308/data
# innobackupex --apply-log /mysql-backup/2015-01-12_08-00-10
# innobackupex --copy-back /mysql-backup/2015-01-12_08-00-10 --defaults-file=/etc/my_3308.cnf
# chown -R mysql:mysql /opt/mysql_3308/data
# /etc/init.d/mysql_3308 start
在Slave上恢復
# /etc/init.d/mysql_3308 stop
# mv /opt/mysql_3308/data /opt/mysql_3308/data_broken
# mkdir /opt/mysql_3308/data
# innobackupex --apply-log /mysql-backup/2015-01-12_08-00-10
# innobackupex --copy-back /mysql-backup/2015-01-12_08-00-10 --defaults-file=/etc/my_3308.cnf
# chown -R mysql:mysql /opt/mysql_3308/data
# /etc/init.d/mysql_3308 start
# cd /opt/mysql_3308/data
# cat xtrabackup_binlog_pos_innodb
./bin-log-mysqld.000222 222333
# mysql_3308 -uroot -p
mysql> change master to
master_host='master_host',
master_port=3308,
master_user='master_user',
master_password='master_password',
master_log_file='bin-log-mysqld.000222',
master_log_pos=222333;
mysql> start slave;