第一阶段
一、数据的初始化
1、老主库
关闭sql_log_bin
set sql_log_bin = off;
创建导出用户
grant all privileges on *.* to 'dump'@'10.50.31.37' identified by 'rooT_258';
grant all privileges on *.* to 'dump'@'10.1.21.47' identified by 'rooT_258';
grant all privileges on *.* to 'dump'@'172.20.30.16' identified by 'rooT_258';
grant all privileges on *.* to 'dump'@'10.50.30.32' identified by 'rooT_258';
2、新库
创建备份的路径
cd /
mkdir backup
cd backup
mkdir backup20180817
在新库所在服务器上执行备份老库的操作
mydumper -h 172.17.0.3 --regex="aa.*" -u root -p 'abc123' -r 300000 -G -E -R -v 3 -t 5 -o /data/backup20181018 > /data/mydumper20181018.log 2>&1 &
参数说明:
-u --user 备份所使用的用户
-x, --regex 是同正则表达式匹配 'db.table'
-r, --rows 将表按行分块时,指定的块行数,指定这个选项会关闭 --chunk-filesize
-e, --enable-binlog 启用还原数据的二进制日志
-V, --version 显示版本号
-t, --threads 开启的备份线程数,默认是4
-o, --overwrite-tables 如果要恢复的表存在,则先drop掉该表,使用该参数,需要备份时候要备份表结构
检查备份是否有错误
grep -i error /data/mydumper20181018.log
新库上清空数据库(先删表,后drop数据库)
drop database aa;
关闭binlog,修改/etc/my.cnf文件,找到
log-bin=mysql-bin
binlog_format=mixed
再这两行前面加上#,将其注释掉,再执行/etc/init.d/mysqld restart即可。
用从老库备份的数据初始化新库(如果版本不一致,需要手动从老库导出用户信息,再导入新库)
myloader -S /usr/local/mysql/mysql.sock -u root -p 'abc123' -v 3 -t 10 -e y -d /data/backup20181018 >> /data/myloader20181018.log 2>&1 &
检查导入是否有错误
grep -i error /data/myloader20181018.log
二、数据同步
1、老库
关闭sql_log_bin
set sql_log_bin=off;
创建数据同步用户
grant replication slave ,replication client on *.* to 'replication'@'10.1.12.205' identified by 'Replication!2#';
grant replication slave ,replication client on *.* to 'replication'@'10.1.21.118' identified by 'Replication!2#';
grant replication slave ,replication client on *.* to 'replication'@'10.50.16.102' identified by 'Replication!2#';
2、新库
查看备份数据的mater的位置
cat /data/backup20181018/metadata
修改文件/usr/local/mysql/etc/my.cnf,将service-id设置成和老库不一样
vi /usr/local/mysql/etc/my.cnf
修改uuid,文件位置/data/mysql/data/auto.cnf(也就是数据文件的路径下),移除auto.cnf,重启mysql服务重新生成
mv /mysql/data/auto.cnf ..
service mysqld restart
设置主从
CHANGE MASTER TO MASTER_HOST='172.17.0.3', MASTER_USER='repl', MASTER_PASSWORD='mysql', MASTER_PORT=3306,MASTER_LOG_FILE='my-bin.000004', MASTER_LOG_POS=154 for channel 'aa';
开启主从并观察同步情况
start slave;
show slave status \G
停止复制stop slave,启动binlog,修改/etc/my.cnf,重启mysql服务
log-bin=mysql-bin
binlog_format=mixed
将这两个参数前面的#去掉
service mysqld restart
重新开启复制
start slave