【MySQL】主从复制(两台服务器)
概述
主从复制是将主数据库的DDL(数据定义语句)和 DML(数据操作语句)操作通过二进制日志(binlog)传到从库服务器中,然后在从库上对这些日志重新执行(也叫重做),从而使得从库和主库的数据保持同步。主库通常称为Master,从库通常称为Slave。
优点
主库发生问题,可以快速切换到从库提供服务。
实现读写分离,降低主库的访问压力。
可以在从库中执行备份,以避免备份期间影响主库服务。
原理
当从服务器连接到主服务器时,从服务器会启动一个I/O线程,该线程会连接到主服务器,并请求复制主服务器上的二进制日志。I/O线程会将二进制日志的内容读取到本地的中继日志(relay log)中,并保存在本地磁盘上。
I/O线程的主要任务是从主服务器上读取二进制日志,并将其写入从服务器的中继日志。I/O线程的工作方式如下:
从服务器向主服务器发送一个请求,请求复制主服务器上的二进制日志。
主服务器接收到请求后,将二进制日志的内容发送给从服务器。
I/O线程在从服务器上读取二进制日志,并将其写入中继日志。
从服务器周期性地向主服务器发送心跳包,以确保主从服务器之间的连接正常。
如果主服务器发生故障,从服务器可以自动切换到另一个主服务器(即主服务器的备份服务器)。
当I/O线程将二进制日志写入中继日志后,SQL线程会读取中继日志中的内容,并执行其中的SQL语句。SQL线程的主要任务是将中继日志中的SQL语句执行到从服务器上的数据库中。SQL线程的工作方式如下:
SQL线程从中继日志中读取SQL语句。
SQL线程执行SQL语句,并将结果写入从服务器上的数据库中。
SQL线程周期性地向主服务器发送心跳包,以确保主从服务器之间的连接正常。
如果主服务器发生故障,从服务器可以自动切换到另一个主服务器(即主服务器的备份服务器)。
通过I/O线程和SQL线程的协作,从服务器可以将主服务器上的数据复制到本地,并保持与主服务器上的数据一致。
主库配置
开放端口/关闭防火墙
首先在服务器上均需要开放MySQL的端口,为了让别的服务器进行访问。这里有两种方法:
第一种:开放指定端口,并且重新加载防火墙
firewall-cmd --zone=public --add-port=3306/tcp -permanentfirewall-cmd -reload
第二种:关闭防火墙,并且禁止开机自启
systemctl stop firewalldsystemctl disable firewalld
修改配置文件
vim /etc/my.cnf
# 服务id 用来保证整个集群环境的唯一性 取值范围[1,2^32 - 1] 默认为1server-id=1# 是否可读:0可读可写 1只读read-only=0# 二进制文件的命名log-bin=master-bin# 二进制索引文件的命名log-bin-index=master-bin.index# 忽略的数据 表示不需要同步的数据库# binlog-ignore-db=mysql# 指定同步的数据库# binlog-do-db=test
重启MySQL
systemctl restart mysqld
创建账号
必须先登录MySQL,在里面执行代码
# 创建ovo用户 设置其密码 并且使该用户可在任意主机连接该MySQL服务CREATE USER 'ovo'@'%' IDENTIFIED WITH mysql_navive_password BY 'OvO@123456';# 为该用户分配主从复制权限GRANT REPLICATION SLAVE ON *.* TO 'ovo'@'%';
查询binlog坐标
这也是在MySQL服务中的代码
SHOW MASTER STATUS;
表中会有五个字段
File:从哪个日志文件开始推送日志文件
Position:从哪个位置开始推送日志
Binlog_Do_DB:指定需要同步的数据库
Binlog_Ignore_DB:指定不需要同步的数据库
Executed_Gtid_set
从库配置
修改配置文件
vim /etc/my.cnf
server-id=2read-only=1relay-bin=slave-relay-binrelay-bin-index=slave-bin.index
重启MySQL
systemctl restart mysqld
设置主库
登录MySQL,若MySQL版本大于等于8.0.23则执行
CHANGE REPLICATION SOURCE TO SOURCE_HOST='主库IP',SOURCE_USER='主库用户名',SOURCE_PASSWORD="主库密码",SOURCE_LOG_FILE='binlog文件名',SOURCE_LOG_POS='binlog文件位置'
MySQL版本小于8.0.23执行
CHANGE MASTER TO MASTER_HOST='主库IP',MASTER_USER='主库用户名',MASTER_PASSWORD="主库密码",MASTER_LOG_FILE='binlog文件名',MASTER_LOG_POS='binlog文件位置'
注意:关于binlog的文件名与文件位置在主库配置的最后一步中可以查看:
SHOW MASTER STATUS;
执行同步
MySQL版本8.0.22之前
start slave;
MySQL版本8.0.22之后
start replica;
查看主从同步状态
MySQL版本8.0.22之前
show slave status;
MySQL版本8.0.22之后
show replica status;
来源地址:https://blog.csdn.net/m0_65563175/article/details/130914553
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341