首页 >数据库 >mysql教程 >Xtrabackup备份mysql实战(做从库全过程)

Xtrabackup备份mysql实战(做从库全过程)

WBOY
WBOY原创
2016-06-07 14:52:441215浏览

一、背景 线上的一个库一直都是RD他们自己维护的,由于业务的增长,现在数据已经500G+了,急需做一个从库,登陆机器一瞅,坑爹啊,还是mysql5.6(我们维护的都是5.5),mysql5.6还没有搞过呢,还有就是他这安装的都不是按我们运维的标准安装的,我的第一反应

一、背景

线上的一个库一直都是RD他们自己维护的,由于业务的增长,现在数据已经500G+了,急需做一个从库,登陆机器一瞅,坑爹啊,还是mysql5.6(我们维护的都是5.5),mysql5.6还没有搞过呢,还有就是他这安装的都不是按我们运维的标准安装的,我的第一反应就是这活没法干,这个库又不容许停库太长时间,于是就度娘、QQ群各种请教,最终确定用Xtrabackup试一把,一直在听大家说Xtrabackup这好那好的,却从来没有玩过,我觉得数据备份(用于做从库)还是冷备最好,速度快,还最能保证数据的一致性,但是今天这种情形貌似行不通了,Xtrabackup搞起!!!

二、Xtrabackup相关资料学习

Xtrabackup的有点:

1、备份完成快速、可靠
2、备份期间不间断的事务处理
3、节省磁盘空间和网络带宽
4、自动备份验证
5、提高正常运行时间由于更快的恢复时间

我个人觉的比较好的就是备份不需要锁表(innodb),备份MyISAM的表还是会锁的,还支持增量备份,总之这工具值得赞。

参考文档:

http://www.percona.com/doc/percona-xtrabackup/2.1/

http://www.baidu-ops.com/2013/05/26/xtrabackup/

三、实施

1、环境:

172.28.29.152 主库
172.28.26.138 从库(待做)

2、主库上安装Xtrabackup

yum install perl-Time-HiRes*
yum install perl-DBD-MySQL -y
wget http://www.percona.com/redir/downloads/XtraBackup/LATEST/RPM/rhel6/x86_64/percona-xtrabackup-2.1.9-744.rhel6.x86_64.rpm
rpm -ivh percona-xtrabackup-2.1.9-744.rhel6.x86_64.rpm

3、备份主库

 innobackupex --defaults-file=/usr/local/mysql/my.cnf --user root --socket=/data/log/mysql.sock --password 123456  /data/xtrabackup/ &   ##备份
ps:备份完成了,会在/data/xtrabackup/目录下生成一个时间点目录,你也可以加一个--no-timestamp参数不生产这个目录,直接备份到 /data/xtrabackup/下
 innobackupex --defaults-file=/usr/local/mysql/my.cnf --user root --socket=/data/log/mysql.sock --password 123456 --apply-log  /data/xtrabackup/2014-06-04_10-20-55/ & ##preparing,undo撤销未提交的事务,重放redo log

ps:1、ll /data/xtrabackup/2014-06-04_10-20-55/查看,你发现xtrabackup会把你数据库datadir下的所有数据文件都复制过来还新增了5个xtrabackup_开头的文件,我们关心的是xtrabackup_binlog_info这个文件,因为这个文件里面记录了你做从库需要change到主库的binlog的位置和pos点

2、如果只想备份一个库,加“--include=navy”指定库名即可, “--databases=navy”不好使,被坑过。

4、从库安装mysql5.6

主库的mysql是RD编译安装的,路径/usr/local/mysql/,那么从库你还苦逼的再编译一次吗?不用了,直接把主库的安装目录scp过来就可以用,my.cnf也scp过来,日志和datadir目录的宿主一定要是mysql哦,之后就可以初始化启动库了。

scp -r /usr/local/mysql/ 172.28.26.138:/usr/local/
chown mysql:mysql /data/log/ -R ##日志和pid存放目录
chown mysql:mysql /data/mysql/ -R  ##datadir
/usr/local/mysql/my.cnf 中添加 server-id                      = 2
/usr/local/mysql/scripts/mysql_install_db --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysql/ 初始化数据库
/usr/local/mysql/bin/mysqld_safe --defaults-file=/usr/local/mysql/my.cnf --user=mysql & 启动数据库
/usr/local/mysql/bin/mysqladmin  --sock=/data/log/mysql.sock -p123456 shutdown 停库,把datadir目录清空,执行下面步骤

PS:主库竟然没有设置server-id,这不是坑爹嘛,别急,这个参数是动态的,可以在线调整,set global server_id=1;就ok了

5、从库服务器把主库备份文件拉到data_dir下

rsync -av 172.28.29.152::xtrabackup/2014-06-04_10-20-55/ /data/mysql/ &

6、启动库,搭建主从,

/usr/local/mysql/bin/mysqld_safe --defaults-file=/usr/local/mysql/my.cnf --user=mysql & 
cat /data/mysql/xtrabackup_binlog_info
mysql-bin.008370        147669327
change master to master_host="172.28.29.152", master_port=3306, master_user='slave', master_password='123456', master_log_file='mysql-bin.008370', master_log_pos=147669327;

到此工作已经完成:

wKiom1OPGDGT_tGpAAQAZP0F92g559.jpg

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn