MySql8.0主从同步

本文详细介绍了如何在MySQL环境中进行基于binlog和gtid的主从同步配置,包括设置server-id、开启binlog/gtid、配置同步账号、备份与传输数据、从库配置以及同步和测试过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

环境准备

一、基于binlog的主从同步

1、主库配置

1.1、 设置server-id值并开启binlog参数(mysql自动开启binlog)

1.2、建立同步账号

1.3、同步主库数据到从库

2、从库配置

2.1、 设置server-id值并开启binlog参数(mysql自动开启binlog)

2.2、设定从主库同步

3、测试

3.1、在主库中创建db1数据库,创建student表,在student表中插入数据。

3.2在从数据库查看

二、基于gtid的主从同步配置

1、主库配置

1.1、开启gtid,并开启强一直性

2、从库配置

2.1、开启gtid,并开启强一直性

2.2设置主从复制的配置

3、测试

1、在主库中添加数据

2、在从库中查看数据


环境准备

两台机器一主一从。

主库(MySql Master):ip为:192.168.80.129

从库(MySql Slave)  :ip为:192.168.80.130

一、基于binlog的主从同步

1、主库配置

1.1、 设置server-id值并开启binlog参数(mysql自动开启binlog)

[root@node1 ~]# vim /etc/my.cnf.d/mysql-server.cnf

 server_id=129   #唯一

看看binlog是否开启

systemctl restart mysqld   #重启数据库

1.2、建立同步账号

mysql> create user rep@'192.168.80.%' identified with mysql_native_password by '123456';
Query OK, 0 rows affected (0.01 sec)

mysql> grant replication slave on *.* to rep@'192.168.80.%';设置权限
Query OK, 0 rows affected (0.00 sec)

1.3、同步主库数据到从库

[root@node1 ~]# mysqldump -B db1 >  db1.sql     #备份数据库

[root@node1 ~]# scp db1.sql 192.168.80.130:~    #将数据传输到从库中

2、从库配置

2.1、 设置server-id值并开启binlog参数(mysql自动开启binlog)

[root@node2 etc]# vim /etc/my.cnf.d/mysql-server.cnf

 server_id=130    #唯一

read_only=on      #只读

[root@node2 ~]# mysql < db1.sql    #将主库数据传到从库中

systemctl restart mysqld    #重启数据库

[root@node2 ~]# mysql -e "show databases";  #查看所以数据库

2.2、设定从主库同步

mysql> show master status;      #查看主数据库的二进制日志文件和位置(在主库mysql中查看)

配置从数据库连接到主数据库进行复制的参数

mysql> change master to   
         -> master_host='192.168.80.129',       主数据库的IP地址
         -> master_user='rep',                          设置了从数据库连接到用户名
         -> master_password='123456',           设置了从数据库连接到密码
         -> master_log_file='binlog.000002',    主数据库复制数据时使用的二进制日志文件名
         -> master_log_pos=1367;                   主数据库复制数据时使用的二进制日志位置=

mysql> start slave;    #启动从数据库的复制进程

mysql> show slave status \G    #显示从数据库的复制状态信息,包括当前从数据库连接的主数据库信息、复制进程的状态、已经复制的日志文件和位置等。

3、测试

3.1、在主库中创建db1数据库,创建student表,在student表中插入数据。

3.2在从数据库查看

二、基于gtid的主从同步配置

1、主库配置

1.1、开启gtid,并开启强一直性

[root@node1 ~]# vim /etc/my.cnf.d/mysql-server.cnf 

gtid_mode=on                                #开启gtid
enforce-gtid-consistency=on          #开启强一致性

[root@node1 ~]# systemctl restart mysqld   #重启数据库

2、从库配置

2.1、开启gtid,并开启强一直性

[root@node2 ~]# vim /etc/my.cnf.d/mysql-server.cnf 

gtid_mode=on                                #开启gtid
enforce-gtid-consistency=on          #开启强一致性

[root@node1 ~]# systemctl restart mysqld   #重启数据库

2.2设置主从复制的配置

mysql> change master to
    -> master_host='192.168.80.129',
    -> master_user='rep',
    -> master_password='123456',
    -> master_auto_position=1;         #使用自动定位

mysql> start slave;    #启动从数据库的复制进程

mysql> show slave status \G                 #显示从数据库的复制状态信息

3、测试

1、在主库中添加数据

2、在从库中查看数据

### 关于 MySQL 8.0 主从同步源码 对于MySQL 8.0版本中的主从同步机制,在官方文档中提到`CHANGE MASTER TO`语句已经被弃用并建议使用`CHANGE REPLICATION SOURCE TO`来替代[^1]。这表明在查看相关源代码时,应当关注新的命令实现逻辑。 #### 源文件位置 MySQL的主从复制功能主要由几个核心模块构成: - **binlog事件处理**:位于`sql/binlog.cc`和`sql/rpl_binlog.h`等文件内。 - **IO线程管理**:涉及`sql/slave.cc`内的函数定义。 - **SQL执行线程**:同样可以在`sql/slave.cc`找到相应代码片段。 - **网络通信层**:负责master与slave之间的数据传输协议解析,这部分通常分布在多个头文件以及C++源文件之中。 针对新引入的变化如`CHANGE REPLICATION SOURCE TO`语句的支持,则需特别留意`sql/sql_yacc.yy`语法分析器部分及其关联的动作函数实现;另外还有可能是`rpl_rli_pdb.cc`等相关联的数据结构修改以适应新的API调用方式。 #### 修改点概览 随着MySQL不断迭代升级,特别是自8.0起对旧版指令进行了优化改进,因此如果要深入研究具体改动细节,可以从以下几个方面入手: - 查看提交记录(commit history),寻找有关移除`CHANGE MASTER TO`及新增`CHANGE REPLICATION SOURCE TO`的关键字条目。 - 对比不同分支间的差异对比图(diff graph),直观了解哪些地方做了调整。 - 阅读官方发布的release notes说明文档,获取更多背景信息和技术决策依据。 ```bash git clone https://github.com/mysql/mysql-server.git cd mysql-server git checkout 8.0 grep -rnw './' -e 'CHANGE REPLICATION SOURCE' ``` 上述命令可以帮助定位到具体的变更位置,并为进一步探索提供线索。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值