Mysql8.0主从同步,主从复制详解(超详细)

一:准备事项

1 两台服务器,mysql版本一致,不然会出现问题 如果不会的可以参看我的另外一篇文章

centos7安装mysql8详细介绍(超详细)

172.16.21.238 主服务器

172.16.21.237从服务器

注意:在进行主从同步之前先确保要备份的数据库和表在同库存在,主从复制不会创建库和表,如果没有会出现不能同步的错误,可以自己通过mysqldump进行数据导出,然后再用source进行数据恢复到从库中去。

二:主服务器配置

  1. 在 /etc/my.cnf 的[mysqld]节点内,新加以下内容

注意:MySQL 5.1.7版本之后,已经不支持把master配置属性写入my.cnf配置文件中了,只需要把同步的数据库和要忽略的数据库写入即可。

[mysqld]

#主从配置

server-id=66  #服务器 id ,主从机器在同一局域网内必须全局唯一,不能相同

log-bin=mysql-bin   #二进制文件存放路径,非必须,mysql8后默认存放/var/lib/mysql这里

binlog-do-db=palan-dev    #待同步的数据库,如果有多个以空格隔开db1 db2 db3 ....

binlog-ignore-db=mysql  #不同步的数据  如果有多个以空格隔开db1 db2 db3 ....

  1. 查看主服务器是否开启binlog日志如果没有开启则开启,

show variables like 'log_bin';

Mysql8.0主从同步,主从复制详解(超详细)

 

  1. 重启mysql   

service mysqld restart

  1. 给从库授权账号,让从库可以复制,也可以用原有root账号,有关授权账号可以参看    用户授权

4.1 mysql -u root -p密码

4.2 CREATE USER 'rootslave'@'从服务器ip地址' IDENTIFIED WITH mysql_native_password BY '1qaz#WSX';

4.3grant replication slave on *.* to 'rootslave'@'从服务器IP地址';

4.4 FLUSH PRIVILEGES;

备注:rootslave就是为从库进行复制配置的账号,1qaz#WSX为密码,从服务器ip即就是172.16.21.237

  1. 5重启mysql

service mysqld restart

  1. 查看主库状态,记住执行下面之后显示的File和Position,下面会用到

show variables like 'log_bin%';

Mysql8.0主从同步,主从复制详解(超详细)

 

三:配置从数据库

  1. 配置文件my.cnf添加

server-id=67 #这里的id一定不要和主库id相同

  1. 重启数据库

service mysqld restart

  1. 启动主从同步
    1. 登陆mysql  

mysql -uroot -p密码

3.2登录之后,执行下面,ip地址是主库的ip(自己修改),rootslave是上面配置的账号,1qaz#WSX是密码,master_log_file是主库第5步查看的文件名字(自己修改),master_log_pos也是第5步查看的位置(自己修改)

    1. change master to master_host='172.16.21.238',master_user='rootslave',master_password='1qaz#WSX',master_log_file='binlog.000018',master_log_pos=155;
    2. start slave;

4 查看主库状态

show slave status\G;

Mysql8.0主从同步,主从复制详解(超详细)

 

确认以上两个线程为yes,如果有一个为no都不会进行主从同步

mysql replication 中slave机器上有两个关键的进程,死一个都不行,一个是slave_sql_running,一个是Slave_IO_Running,一个负责与主机的io通信,一个负责自己的slave mysql进程。

四:自己遇到的常见问题

1 Slave_SQL_Running: No    

Last_Error:会有提示原因

出现上述情况说明数据主从发生故障。 问题原因   https://blog.****.net/heng_ji/article/details/51013710

1、可能是主库的表,在从库中没有找到

解决方法:跳过这次错误继续进行

1、先停止同步:mysql>stop slave;

2、使用命令:mysql>set GLOBAL SQL_SLAVE_SKIP_COUNTER=1;

3、开启同步:mysql>start slave;

4、使用命令:mysql>show slave status\G,查看Slave_SQL_Running的值,如果不为Yes,则重复上述3步,直到为Yes

2.slave_io_running:no

Mysql8.0主从同步,主从复制详解(超详细)

 

解决办法如下

查看主服务器状态

show master status\G

Mysql8.0主从同步,主从复制详解(超详细)

 

查看从服务器状态

show slave status\G

Mysql8.0主从同步,主从复制详解(超详细)

 

问题所在:发现Master_Log_File没有对应。

出现Slave_IO_Running: No的机器上操作,即从库上进行操作

3.1停止主从复制 slave stop;

3.2 CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000026', MASTER_LOG_POS=0;

3.3 slave start;

3.4 show slave status\G

Mysql8.0主从同步,主从复制详解(超详细)

至此问题解决