Mysql主从复制(读写分离)原理及实现 - Go语言中文社区

Mysql主从复制(读写分离)原理及实现


1.主从复制原理

在这里插入图片描述
(1)主数据库(master)在每个事务更新数据完成之后,主数据库(master)在二进制日志记录这些改变。
(2)从数据库(slave)开启一个I/O线程,读取主数据库(master)的二进制日志文件,然后写入到从数据库(slave)的中继日志。I/O线程会在master打开一个连接,从数据库I/O线程从主数据库(master)的二进制日志中读取事件,如果已经连接上,它会睡眠并等待主数据库(master)产生新的事件,I/o线程将这些事件写入到中继日志。I/O一般缓存在OS上,系统开销比较小。
(3)从数据库SQL线程读取中继日志中的事件,并重放其中的事件,更新从数据库的数据,保证主从复制的数据一致性

2.实现主从复制

(1)修改主(master)服务器配置
    修改my.cnf配置文件,在/etc/目录下。如果不在,可以通过whereis命令搜索下。
MYSQL安装教程

在my.cnf配置文件下添加如下配置,对应原理的第一条,开启二进制日志
#配置主从复制选项,mysql的id
server_id = 1
#开启二进制文件
log-bin=mysql-bin

(2)在主数据库上创建复制账号(连接上主数据执行)

GRANT REPLICATION SLAVE ON *.* TO root@'192.168.223.130' IDENTIFIED BY '123456';

在这里插入图片描述
序号1:创建的用户
序号2 :从数据库的ip,(也可以是任何ip,建议设置成从数据库ip)
序号3:连接用的密码
(3)修改从(Slave)数据库配置

#配置主从复制
server_id = 2
log-bin=mysql-bin
#表示要同步的数据库
binlog_do_db=seckill

说明:
binlog-ignore-db=test 表示不同步 test 数据库
binlog_do_db=db_test#表示要同步的数据库
(4)重启Mysql
主数据库和从数据库重启

service mysqld restart

(5)查看主服务器状态

show master status

查看并记录相关信息,配置从数据库需要
在这里插入图片描述
(6)配置从服务器(连接 Master 服务器),对应原理的第二条,从数据库开启I/O线程

change master to master_host='192.168.223.129',master_user='root',master_password='123456',master_log_file='mysql-bin.000008',master_log_pos=888;

在这里插入图片描述
master_host是主服务器的ip
master_port=3306(这里没有配置,默认3306)
master_user:Master 服务器授权用户,也就是 Master 前面创建的那个用户
master_password:Master 服务器授权用户对应的密码
master_log_file:Master binlog 文件名
master_log_pos:Master binlog 文件中的 Postion 值
关于position值,这里做一个说明:如果主服务器已经是有很多数据了的,那就先需要备份主服务器的数据到从服务器中,然后再使用命令show master status记录需要开始同步的位置。

(7)开始复制
在从服务器中执行

start slave

停止的命令是:stop slave;
(8)查看从服务器状态

show slave status

从数据库的I/O线程,和SQL线程都是YES说明,主从复制成功。I/O开启后可以从主数据库读取二进制日志,然后写入中继日志,SQL读取中继日志,重放中继日志的事件,实现主从同步。
在这里插入图片描述

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/qq_39380737/article/details/103866271
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢