正在运行的主库上加从库过程
一、利用历史备份数据进行配置主从:
1、将主库前一天备份的数据传输到从库机上。
主库备份语句加上--master-data=2,记录其change master to信息。
2、在从库上导入主库备份数据。
mysql -uroot -ppasswd < bak_20180411.sql
3、查看从库上的备份数据:bak_20180411.sql,找到其中的CHANGE MASTER TO字段,记录position。
cat bak_20180411.sql | awk 'NR==22{print}'
4、主库与从库建立复制账号:
grant REPLICATION SLAVE,replication client on *.* to 'root'@'%' identified by '123456';
5、将从库定位到主库(用到了备份数据中的CHANGE MASTER TO信息):
change master to master_user='root',master_host='192.168.18.1',master_password='123456',master_log_file='mysql-bin.00005',master_log_pos=84011;
6、启动从库:
start slave;
7、查看主从是否成功:
show slave status\G;
查看Last_IO_Error是否有报错。根据错误提示修改检查。
Slave_IO_Running Slave_SQL_Running Seconds_Behind_Master 查看三个字段。
报错:Could not execute Delete_rows event on table ; Can't find record in 'ls', Error_code: 1032; handler error HY_NOT_FOUND; the event's master log mysql-bin.000043, end_log_pos 723683, Error_code: 1032
解决:检查备份文件是否是最新的备份,确认目标主机的备份和从机的数据是一致的。
二、如果业务量不大,可以进行在线复制整个数据库数据,再做主从。或者在半夜的时候写个脚本自动执行创建主从。
1、具体要用到MySQL Utilities工具里的 mysqldbcopy 这个在线复制工具。
2、mysqldbcopy --source=failover:123456@192.168.152.161:3306 --destination=failover:123456@192.168.152.158:3306 -vvv --drop-first --all --rpl=master --rpl-user=backup:123456
--source:要从哪复制的源服务器。格式:账户:密码@IP:端口
--destination:要复制到哪台服务器上,也就是目标服务器。格式:账户:密码@IP:端口
-vvv:显示详细信息。
--drop-first:复制之前先删除。
--all:复制所有库。
--rpl=master:这个是要做主从的参数,--rpl有两个选项,一个为master一个为slave。master参数指定目标服务器作为源服务器的从。slave参数仅仅在源服务器是从有用。
--rpl-user=backup:123456:指定replication账户,格式:账户:密码
复制完成后自动执行CHANGE MASTER TO语句,创建主从:
三、GTID加从:
导入昨晚的备份。里面包含了GTID组的信息:SET @@GLOBAL.GTID_PURGED='xxxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxx:1-94804';这样的信息
1、导入。
2、reset master;reset slave;
3、SET GLOBAL GTID_PURGED='xxxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxx:1-94804';
4、定位到主库:
change master to master_host='192.168.10.100',master_user='backup',master_password='123456',master_port=3306,master_auto_position=1;
5、启动从库