使用XtraBackup进行MySQL不锁表主从复制

vincen 2016-08-09

Xtrabackup 是percona公司的开源项目,用以实现类似innodb官方的热备份工具InnoDB Hot Backup的功能,能够非常快速地备份与恢复MySQL数据库。 Xtrabackup中包含两个工具:

xtrabackup是用于热备份innodb, xtradb表中数据的工具,不能备份其他类型的表,也不能备份数据表结构;

innobackupex是将xtrabackup进行封装的perl脚本,提供了备份myisam表的能力。

一、安装

1.配置Yum源

rpm -Uhv http://www.percona.com/downloads/percona-release/percona-release-0.0-1.x86_64.rpm

2.安装

yum install xtrabackup -y

二、配置主从

在Master(主服务器)上新建主从备份所使用的账号

GRANT REPLICATION SLAVE ON *.* TO 'slave'@'%' identified by '123456';

修改Master配置文件,并重启Mysql服务

[mysqld]
thread_concurrency = 32
long_query_time= 2
slow-query-log = on
slow-query-log-file = /home/mysql/logs/mysql-slow.log
skip-name-resolve
server_id=205
binlog-ignore-db=mysql
log-bin=ddsc-mysql-slave1-bin
binlog_cache_size = 1M
expire_logs_days=7
skip-name-resolve
relay_log=/data/mysqldb/ddsc-mysql-relay-bin
slave-skip-errors=all
log_slave_updates=1
log-bin=ddsc-mysql-bin
binlog_format=mixed

修改Slave配置文件,并重启Mysql服务。配置内容可参考主配置文件,注意:server_id不能一致。

使用xtrabackup对主库进行备份。

innobackupex  --defaults-file=/etc/my.cnf --socke=/data/mysqldb/mysql.mysql  --user=root  --password='' /backup/

把备份好的文件Copy到Slave端。

scp -r 2016-08-08_13-53-57/ [email protected]:/tmp/

一般情况下,这个备份是不能用于恢复的,因为备份的数据中可能会包含尚未提交的事务或已经提交但尚未同步至数据文件中的事务。因此,此时数据文件处于不一致的状态,我们现在就是要通过回滚未提交的事务及同步已经提交的事务至数据文件也使得数据文件处于一致性状态。

innobackupex -apply-log /tmp/2016-08-08_13-53-57/

恢复数据

先停止mysqld服务,然后清空数据文件目录,恢复完成后再设置权限

service mysqld stop
mv /data/mysqldb /data/mysqldb_old
mkdir -p /data/mysqldb
innobackupex --copy-back /tmp/2016-08-08_13-53-57/
chown -R mysql.mysql /data/mysql/data
service mysqld start

8.查看binlog日志文件的位置值,做主从同步:

cat /tmp/2016-08-08_13-53-57/xtrabackup_binlog_info

ddsc-mysql-bin.00001912476 #这两个数字是用来做主从的必备

9.在slave机器上做主从相关操作:

CHANGE MASTER TO
MASTER_HOST='192.168.1.xxx',
MASTER_USER='rep',
MASTER_PASSWORD='xxxxxx',
MASTER_PORT=3306,
MASTER_LOG_FILE='ddsc-mysql-bin.000019',
MASTER_LOG_POS=12476;

10.启动从服务器

start slave;

XtraBackup 的详细介绍:请点这里
XtraBackup 的下载地址:请点这里

相关推荐