mysql主从,或者全备份
mysql的主从复制依赖bin-log日志,会因为各种问题中断,如flush table,网络问题等,还有一些未知的bug因素,之前使用mysql import方式恢复速度太慢,一个3G的库要恢复一个下午,实在是无法忍受。现在用一个别的方法来操作只需要花费15分钟左右。
1.备份主库
- innobackupex --defaults-file=/etc/my.cnf --user=root --password='xxxxxxxxxxx' --defaults-group=mysqld3 --socket=/tmp/mysql_3308.sock /data/slave_data >/data/back.log 2>&1
解释:
- --default-group是查看/etc/my.cnf里面的内容,确认这个库在配置文件里面的名字是什么,因为是备份,稍微注意下,错了也没事,只是备份出来的不是你想要的库而已。
- /data/slave_data 是存放备份文件的,随便改都可以,注意的是要有足够的空间哦。
- /data/back.log这个是日志文件,很重要里面会有gtid的值,备库根据这个gtid值才能知道从哪个位置跟主库同步。
等这个备份跑完,在/data/slave_data下会生成一个日期的文件夹,这个文件夹就是备出来的数据库,用tar -czf 2016-11-17_15-44-22.tar.gz 2016-11-17_15-44-22/ 打包后传输到备库的机器上去。
2.恢复备库
- 备份解压打包文件,tar -xzf 2016-11-17_15-44-22.tar.gz
- 备库停止,找到/etc/my.cnf 看下要停止的库的[mysql'number']是多少, mysqld_multi stop number(是数字)。
- 删除备库,找到备库的数据库文件全部删除,在/etc/my.cnf里面找到datadir这个就可以看到,不要把目录删了,只要清空里面的东西就好。
- 恢复数据,innobackupex --defaults-file=/etc/my.cnf --user=root --password='xxxxxxxxxxx' --defaults-group=mysqld2 --copy-back /data/slave_data/2016-11-17_15-44-22
- 应用日志,innobackupex --defaults-file=/etc/my.cnf --user=root --password='xxxxxxxxxxx' --defaults-group=mysqld2 --apply-log /data/slave_data/2016-11-17_15-44-22
- 修改权限,chown -R mysql.mysql /usr/local/mysql/data/dbdata_3307 ,就是datadir的目录
- 启动数据库 myself_multi start server-id
- 配置主从:
- 进入数据库 mysql -uroot -pxxxxxxxxxxx -S /tmp/mysql_3307.sock
- reset master;刷新自己的bin-log
-
SET GLOBAL gtid_purged=''71d2f30a-feed-11e4-8688-10604b9eee2a:1-20554684''; 这串数字,就在刚才备份的日志里面,应该是在比较底部的位置。
-
change master to master_host='172.16.1.19',master_user='root',master_password='xxxxxxxxxx',master_port=3306,master_auto_position = 1;配置主从
- start slave; 最后一步完成
- show slave status\G; 可以看到主从信息,要是Slave_IO_Running: Yes ;Slave_SQL_Running: Yes表示成功。