mysql 5.6 GTID主从增加从库

实际情况为:

一台mysql 5.6.38,运行了很久,binlog只保留7天。之前的从库出了故障导致无法同步,现在重新增加一台从库。

有了GTID,在同步的时候就不需要去binlog里找pos点了,但是在网上搜了一大圈,开始同步之后都都出现了Slave_SQL_Running: No,error-log提示主键问题,折腾了一晚上,最后还是用最简单的方法解决了,根本都不需要用网上的那些什么set global gtid_purged = ‘565132ec-c5c0-11e7-a1b1-0660aba819f4:1-38495535’;之类。

因为本身在GTID下,导出的数据库就已经帮你处理好了。

不多说,大致说下操作方法和步骤:

1、主库创建同步用的账号:

create user ‘username’@’%’ identified by ‘password’;

username改为你的用户名,password改为你的密码,%表示可以从任何主机登陆,这里可以改为你指定的IP。

2、给同步账号授权:

grant replication slave on *.* to ‘username’@’%’ identified by ‘password’;

授权账号对所有数据库具有复制权限,username password %同第1条。

3、导出主库:

/your_mysql_directory/bin/mysqldump -p -uroot –single-transaction –master-data=1 -F –triggers –routines –events –all-databases > bak.sql

会提示让你输入root的密码,输入完成之后会在你当前目录下生成导出的bak.sql文件。

把bak.sql文件上传到从库主机上,具体方法自己想吧,反正方法多多。sftp scp都可以。

4、登陆从库,把主库导出的bak.sql文件导入从库:

>source /your_directory/bak.sql

5、在从库上给从库指定主库地址和同步账号密码等:

change master to master_host=’your_host_IP’, master_port=3306, master_user=’username’, master_password=’password’, master_auto_position=1;

这里的your_host_IP就是你的主库IP地址,username为第1步建立的同步账号用户名,密码为第1步建立的同步账号的密码。

6、在从库主机上启动从库:

>start slave;

如果这台从库是一台新的,之前未有过同步,那么直接start slave就可以,如果之前曾经操作过,有过同步,那就需要reset master一下,否则你start slave的时候会有错误,导致无法同步。

网上的资料显示还需要设置set global gtid_purged = ‘565132ec-c5c0-11e7-a1b1-0660aba819f4:1-38495535’之类,之前我也是参考了网上的类似方法,但是每次同步之后都会提示错误,无法正常同步。这里错误的原因应该是主库导出时记录的position是在导出之前的,就是说主库导出的数据已经执行过你记录的position了,当你去set的时候,从库又会再去执行一遍,但从库的数据已经执行过了,再次执行肯定会出错。

7、查看从库运行状态

>show slave status \G;

查看:

Slave_IO_Running: Yes
Slave_SQL_Running: Yes

这两项为YES就表示从库已经正常跑起来了。

到这里整个过程就已经结束了,关于你的mysql是否启用了GTID,那就去网上搜一下查看方法吧,>show variables like ‘%gtid%’。GTID的支持是在mysql 5.6版本以后才有,之前都没有这项功能。

       

发表评论

电子邮件地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据