0、网络策略开通

从机需要访问主机的3306端口,在从机上执行
telnet 主机IP 3306 需要能通。否则会因为网络原因导致配置mysql主从集群失败。

1、主库配置

1.1、锁定主库写操作

flush tables with read lock;

作用是不能再写入主库。

在这里插入图片描述

1.2、备份主数据库,用于导入从数据库实现同步

mysqldump -R -uroot -p <yourMysqlPassword> --host=127.0.0.1 --port=3306 --all-databases > /tmp/mysqlMasterBackupAllDatabases.sql

在这里插入图片描述

2、从库配置

2.1、使用主库备份文件恢复从库

1.3中备份的mysqlMasterBackupAllDatabases.sql 文件上传到 从库的/ 目录下。
mysql -uroot -p 登录进mysql命令行
然后执行

source /mysqlMasterBackupAllDatabases.sql;

这个命令的作用是使用主库备份文件恢复从库,保证从库和主库数据是一致的。

在这里插入图片描述

2.2、校验和主库是否一致

从库数据

在这里插入图片描述

主库数据

在这里插入图片描述

3、创建主从集群

3.1、主库需要配置

3.1.1、vi /etc/my.cnf 添加2行

 vi /etc/my.cnf

文件最后添加2行内容

server-id=1
log-bin=/var/lib/mysql/mysql-bin

在这里插入图片描述

然后重启主机MySQL服务

systemctl restart mysqld.service 

3.1.2、查看主库主从状态,记录file 和 position的值

show master status;

在这里插入图片描述

3.2、从库需要配置

3.2.1、vi /etc/my.cnf 添加一行

vi /etc/my.cnf

在末尾加入一行:

server-id=2

在这里插入图片描述

然后重启从机MySQL服务

systemctl restart mysqld.service 

3.2.2、stop slave;

stop slave命令作用是停止从库的io进程和sql进程。
查看从库的主从同步进程状态都是NO,表明已经成功停止了从库的io进程和sql进程。

stop slave;

在这里插入图片描述

3.2.3、reset slave;

reset slave命令作用是清除以前存在的:从库同步主库的历史记录,作用是把从库重置成:从没有同步过主库的状态。

reset slave;

3.2.4、给从库指定主库的参数:

change master to master_host='x.x.x.x',master_port=3306,master_user='root',master_password='yourMysqlPassWord', master_log_file='mysql-bin.000007',master_log_pos=822090;

在这里插入图片描述

其中master_log_file、master_log_pos 需要从主库查询获取,参见1.2节。

在这里插入图片描述

3.2.5、start slave

start slave;

start slave命令作用是启动从库的io进程和sql进程。
查看从库的主从同步进程状态都是YES,表明已经成功启动了从库的io进程和sql进程。

再次查看从库的主从同步进程状态都是YES

show slave status\G;

在这里插入图片描述

3.2.6、查看从库主从状态

show slave status\G;

在这里插入图片描述

Seconds_Behind_Master: 0
0表示从库没有落后于主库,主库数据都同步到从库了,Seconds_Behind_Master的期望值是0。
Seconds_Behind_Master如果是正值,说明从库落后于主库,还没有同步完成,或者同步失败,为正直时需要注意排查确认同步状态。

在这里插入图片描述

4、 恢复主库写操作

unlock tables;

作用是恢复主库的写操作。

5、主从复制测试

5.1、主库插入1条数据

在主库的banji表中插入1条数据。
在这里插入图片描述

show full processlist;

显示主库哪些线程正在运行,返回的结果是实时变化的;
在这里插入图片描述

Master has sent all binlog to slave; waiting for more updates 表明本次同步信息已经发送完毕。

5.2、从库确认是否同步了这条数据

查看从库的banji表中是否同步了主库插入的那条数据。

在这里插入图片描述

show full processlist;

显示从库哪些线程正在运行,返回的结果是实时变化的;

在这里插入图片描述

Slave has read all relay log; waiting for more updates 表明本次同步信息已经接收完毕。

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐