主从复制原理
1。该过程的第一部分就是主记录二进制日志。在每个事务更新数据完成之前,主人在二进制日志记录这些改变.MySQL将事务写入二进制日志。在事件写入二进制日志完成后,主通知存储引擎提交事务。
2。奴隶将主人的二进制日志拷贝到它自己的中继日志。首先,奴隶开始一个工作线程——I/O线程。我/O线程在主人上打开一个普通的连接,然后开始binlog转储process.binlog转储过程从主人的二进制日志中读取事件,如果已经同步了主人,它会睡眠并等待主人产生新的事件。我/O线程将这些事件写入中继日志。
3。奴隶线程SQL (SQL从线程)处理该过程的最后一步. SQL线程从继电器日志中读取事件,并重放其中的事件,从而更新奴隶的数据,使其与主中的数据一致。只要该线程与I/O线程保持一致,中继日志通常会位于OS的缓存中,所以日志的继电器开销很小。
实现步骤
环境
防火墙和selinux都关闭h5> 主
奴隶
知识产权
192.168.7.71
192.168.7.72
主机名
master01
slave01
操作系统
CentOS7
CentOS7
MySQL版本
5.7.28
5.7.28
1。安装
<代码类=" language-bash ">略代码>
2.主配置h5> <编辑> 2.1将以下内容添加文到my . cnf中所做件中,然后重新启动数据库。编辑>
<代码类=" language-bash "> # vim/etc/my.cnf
(mysqld)
log-bin=mysql-bin
服务器id=1
#重启服务
systemctl开始mysqld 代码>
<编辑> 2.2创建授权复制账号编辑>
<代码类=" language-bash ">格兰特复制奴隶> mysql>显示主状态;
+------------------+----------+--------------+------------------+-------------------+
| |文件位置| Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin。000001 | 154 | | | |
+------------------+----------+--------------+------------------+-------------------+
1行集(0.00秒)代码>
3.奴隶配置h5> <编辑> 3.1将以下内容添加文到my . cnf中所做件中,然后重新启动数据库。编辑>
<代码类=" language-bash "> (mysqld)
服务器id=2
read_only=> mysql>改变主
→MASTER_HOST=' 192.168.7.71 ',
→MASTER_USER=' repluser ',
→MASTER_PASSWORD=' 123. com”,
→MASTER_PORT=3306,
→MASTER_LOG_FILE=' mysql-bin.000001 ',
→MASTER_LOG_POS=154; 代码>
<编辑>注:一定要确保MASTER_LOG_FILE与文件匹配,并且MASTER_LOG_POS与先前的显示主状态返回的位置匹配。编辑>
<编辑> 3.3启动奴隶编辑>
<代码类=" language-bash "> mysql>开始奴隶;代码>
<编辑> 3.4查看I/O线程和SQL线程状态,如果为是的表示与主服务器同步成功。编辑>
<代码类=" language-bash "> mysql>显示奴隶状态\ G
*************************** 1。行 ***************************
Slave_IO_State:等待主人发送事件
Master_Host: 192.168.7.71
Master_User: repluser
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000001
Read_Master_Log_Pos: 154
Relay_Log_File: slave01-relay-bin.000002
Relay_Log_Pos: 320
Relay_Master_Log_File: mysql-bin.000001
Slave_IO_Running:是的
Slave_SQL_Running:是的
…省略信息…代码>
<编辑> 3.5和复制功能相关的文件编辑>
<代码类=" language-bash "> master.info:用于保存奴隶连接至主时的相关信息,例如账号,密码,服务器地址等
relay-log.info:保存在当前奴隶节点上已经复制的当前二进制日志和本地传递日志日志的对应关系代码>
MySQL主从复制实现
<代码类=" language-bash "> # vim/etc/my.cnf (mysqld) log-bin=mysql-bin 服务器id=1 #重启服务 systemctl开始mysqld 代码><编辑> 2.2创建授权复制账号编辑>
<代码类=" language-bash ">格兰特复制奴隶> mysql>显示主状态; +------------------+----------+--------------+------------------+-------------------+ | |文件位置| Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set | +------------------+----------+--------------+------------------+-------------------+ | mysql-bin。000001 | 154 | | | | +------------------+----------+--------------+------------------+-------------------+ 1行集(0.00秒)代码>