【数据库】mysql主从复制原理、搭建


前言

本博客内容仅为记录博主思路,仅供参考,一切以自己实践结果为准。


一、工作原理

1.1 示意图

![在这里插入图片描述](https://img-blog.csdnimg.cn/52d959b6dadb47f8acc642509440bc29.png


1.2 文字解释

  • 主服务器开启二进制日志,从服务器开启中继日志
  • 主服务器日志发生更新后,从服务器通过I/O线程探测到更新并发送请求二进制事件
  • 主服务器通过dump线程将更新的二进制日志事件发送给从服务器
  • 从服务器将事件写入中继日志,通过SQL线程将日志读取为sql语句,重放执行语句,保持数据的统一性

二、搭建

2.1 架构

模拟环境IP地址所需工具
主服务器192.168.13.10mysql-boost-5.7.20.tar
从服务器192.168.13.20mysql-boost-5.7.20.tar

2.2 主服务器

systemctl disable --now firewalld
setenforce 0
hostnamectl set-hostname Mysql1

vim /etc/my.cnf
	server-id = 1
	log_bin = master-bin
	log-slave-updates = true

systemctl restart mysqld.service 
ln -s /usr/local/mysql/bin/mysql /usr/sbin/
ln -s /usr/local/mysql/bin/mysqlbinlog /usr/sbin/

mysql -uroot -pabc123
	grant replication slave on *.* to 'myslave'@'192.168.13.%' identified by '123';
	grant all privileges on *.* to 'mha'@'192.168.13.%' identified by 'manager';
	grant all privileges on *.* to 'mha'@'Mysql1' identified by 'manager';
	grant all privileges on *.* to 'mha'@'Mysql2' identified by 'manager';
	grant all privileges on *.* to 'mha'@'Mysql3' identified by 'manager';
	flush privileges;
	show master status;
}

  • 主服务器的日志名为mysql-bin.000001,偏移量为915
    在这里插入图片描述

2.3 从服务器

systemctl disable --now firewalld
setenforce 0
hostnamectl set-hostname Mysql2

vim /etc/my.cnf
	server-id = 2
	log_bin = master-bin
	relay-log = relay-log-bin
	relay-log-index = slave-relay-bin.index

systemctl restart mysqld.service 
ln -s /usr/local/mysql/bin/mysql /usr/sbin/
ln -s /usr/local/mysql/bin/mysqlbinlog /usr/sbin/

mysql -uroot -pabc123
	grant replication slave on *.* to 'myslave'@'192.168.13.%' identified by '123';
	grant all privileges on *.* to 'mha'@'192.168.13.%' identified by 'manager';
	grant all privileges on *.* to 'mha'@'Mysql1' identified by 'manager';
	grant all privileges on *.* to 'mha'@'Mysql2' identified by 'manager';
	grant all privileges on *.* to 'mha'@'Mysql3' identified by 'manager';
	flush privileges;
	change master to master_host='192.168.13.10',master_user='myslave',master_password='123',master_log_file='master-bin.000001',master_log_pos=915; 
	start slave;
}

2.4 验证

  • 进入主服务器创建任意库;
  • 进入从服务器查看所有库,发现数据同步;

三、思维导图

在这里插入图片描述

四、结语

  • Slave_IO_Running: No:途中我遇到了两次这种情况
  • 一:检查自己的防火墙是否关闭
  • 二:检查自己文件名及偏移量是否输入错误
  • 三:检查mysql数据库的UUID是否相同,我是源码编译,路径为:/usr/local/mysql/data//auto.cnf,若是主从的数据库UUID是相同的,则无法连接成功,随便改动一个数据库的UUID其中任意一个字母即可
  • 四:/etc/my.cnf 的配置文件有问题
  • 五:网络不通
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

雪碧不要气

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值