MySQL8.0开始,默认开启binlog,如果是5.7的版本,也可以在my.cnf/my.ini中进行配置开启。
show variables like '%log_bin%';
Linux下的MySQL的配置文件默认在/etc/my.cnf,使用vim命令进行编辑
vim /etc/my.cnf
在[mysqld]下配置信息,注意是[mysqld]下,如果配置到其他地方会导致读取不到。
这里的binlog-do-db可以不配置,根据需求来。
Windows下的MySQL配置文件默认在C:\Program Files\MySQL下,打开my.ini进行编辑
同样,在[mysqld]下配置信息
Linux下MySQL重启命令
systemctl restart mysqld.service
打开cmd先输入net stop mysql,然后再输入net start mysql
net stop mysql
net start mysql
通常,主从同步业务场景,是给予从库一个账号,正常是不会给予root账号的,这里我先使用我之前创建的账号zhku进行演示(你也可以使用root账号,但不建议)。
先查看该账户是否具有主从同步的权限
select Repl_slave_priv, Repl_client_priv from mysql.user where user = 'zhku';
显示没有赋予该权限
赋予权限
grant replication slave, replication client on *.* to 'zhku'@'%';
show master status;
file:表示同步的bin-log信息从哪个文件开始;
position:表示从file的哪个位置开始;
binlog_do_db:表示同步哪一个库(如果在配置文件中没有设置,则是空)
change master to master_host='120.***.***.110',master_port=3306,master_user='zhku',master_password='123456',master_log_file='mysql-bin.000001',master_log_pos=156;
这里设置master_host为主机的IP地址,master_user为登录用户,如zhku,设置master_password为密码,这里我的密码是123456,master_log_file为主机上查看master status的file,master_log_pos为主机上查看到的position。
start slave;
show slave status;
结果太多,我这里以列显示好看一点。
可以看到最关键的两个参数,倒数两个,Slave_IO_Running和Slave_SQL_Running,显示Yes则代表成功实现主从同步,第一个Slave_IO_State也显示正在等待主机发送事件信息。
原因是配置文件有问题,需要检查配置文件是否配置正确,如单词拼写,数据库是否存在等。
原因:可以继续查看后面的列,找到Last_IO_Error列
查看里面的报错显示的是Authentication plugin ‘caching_sha2_password’ reported error: Authentication requires secure connection.。
前往主机查询
发现zhku账号与root账号的plugin值不同,需要将zhku账号的plugin值修改为mysql_native_password(使用update语句,这里不再赘述),修改后即可成功显示两个YES。
这里也有可能报错信息不是这个问题,该列显示connecting的问题主要有三个,一个是网络问题,一个是账号密码不对,一个是master_log_file和master_log_pos设置不对。网络问题的话可以检查防火墙是否开启,笔者这里使用的是阿里云服务器,服务器上打开了安全组,Centos上打开了防火墙端口,所以可以访问,如果是虚拟机则要看桥接模式等,这里不再赘述。
Linux上打开,关闭,查看防火墙的博文链接:
https://blog.csdn.net/weixin_45930241/article/details/123219592
同第二个问题,查询后面的信息列,看看报错原因是什么
发现显示文件名字不一致
show master status;
在从机上使用show master status命令查看
在主机上使用show master status命令查看
比对发现,File和Position不一致。
使用stop slave命令停掉从机的slave,回到第五步,重新使用change master命令设置,最后再start slave即可,如果还不行,就再去检查两个机器的配置文件是否修改正确。
stop slave;