13
2025
03
20:18:00

MySQL8配置主从同步(同步所有库)

目录 
1 概述
2 配置主库
3 配置从库
4 配置同步账号
5 记录主库信息
6 重启从库,进入mysql,配置同步
7 查看同步状态
8 测试同步
9 更多
9.1 主主同步
10 开启GTID
10.1 GTID概念
10.2 开启GTID的好处
10.3 如何开启
10.4 注意事项
10.5 查看GTID是否开启

概述

网上的教程大多是配置指定某个库的同步,如果主服务器上新建了数据库,从服务器并不会也跟着创建数据库并同步。

配置主库

在主库的mysql配置文件my.cnf中添加或修改如下参数:

  1. [mysqld]

  2. log-bin=mysql-bin

  3. binlog_format=mixed

  4. server-id=1

  5. binlog-ignore-db=mysql,sys,performance_schema,information_schema


配置项说明:
log-bin:表示启用binlog功能,并指定二进制日志的存储目录
binlog_format:binlog日志格式,mysql默认采用statement,建议使用mixed
server-id:指定唯一的servr ID,主从数据库的server-id必须是不一样的数字,一般线上环境可以用ip地址的最后一段作为server-id。
binlog-ignore-db:binlog日志不记录指定库的更新
binlog-do-db:binlog日志只记录指定库的更新。由于我们需要配置所有库的同步,故不设置该参数。

配置从库

在从库的mysql配置文件my.cnf中添加或修改如下参数:

  1. [mysqld]

  2. log-bin=mysql-bin

  3. binlog_format=mixed

  4. server-id=2

  5. replicate-ignore-db=mysql,sys,performance_schema,information_schema

  6. log-slave-updates

  7. slave-skip-errors=all

replicate-ignore-db:不进行主从复制的数据库名
log-slave-updates:记录从库更新,允许链式复制( A-B-C )。当该从库作为其他库的主库时,需要添加该参数
replicate-do-db:要进行主从复制的数据库名。由于我们需要配置所有库的同步,故不设置该参数。
slave-skip-errors:从库同步时忽略遇到的错误

配置同步账号

在主库中添加用于读取主库日志的账号:

  1. SET SQL_LOG_BIN=0;

  2. CREATE USER slaveuser@'%' IDENTIFIED WITH mysql_native_password BY 'password';

  3. grant replication slave on *.* to slaveuser@'%';

  4. flush privileges;

  5. SET SQL_LOG_BIN=1;

记录主库信息

登录主库,执行以下语句:

mysql> show master status;

a626e5d23e47e6b8545d64c97456635b_926db3840e9d02a6bed12a50a27bbdc4.png

File是同步会使用到的binlog文件
Position是同步时需要读取的位置

重启从库,进入mysql,配置同步

  1. mysql> stop slave;

  2. mysql> change master to master_host='主库的IP',master_port=3306,master_user='slaveuser',master_password='password',master_log_file='mysql-bin.000005', master_log_pos=753117;

  3. mysql> start slave;

master_host:主库的ip地址,这里为127.0.0.1
master_port:主库的端口,默认为3306
master_user:同步账号,这里为slaveuser
master_password:同步账号的密码,这里为password
master_log_file:开始同步的日志文件
master_log_pos:开始同步的日志的开始位置

查看同步状态

登录从库执行以下语句:

mysql> show slave status

如果Slave_IO_RunningSlave_SQL_Running的值都是Yes,说明配置成功。
如果Slave_IO_RunningNo,则查看后面的Last_IO_Error字段,里面会有详细的出错原因。
如果Slave_SQL_RunningNo,则查看后面的Last_SQL_Error字段,里面会有详细的出错原因。

测试同步

在主库中的创建一个新的数据库,然后查看从库中否同步也创建了这个数据库。

更多

主主同步

主主同步,只需要把主库的配置改为:

  1. [mysqld]

  2. log-bin=mysql-bin

  3. binlog_format=mixed

  4. server-id=1

  5. log-slave-updates

  6. slave-skip-errors=all

  7. binlog-ignore-db=mysql,sys,performance_schema,information_schema

  8. replicate-ignore-db=mysql,sys,performance_schema,information_schema

从库的配置改为:


  1. [mysqld]

  2. log-bin=mysql-bin

  3. binlog_format=mixed

  4. server-id=2

  5. log-slave-updates

  6. slave-skip-errors=all

  7. binlog-ignore-db=mysql,sys,performance_schema,information_schema

  8. replicate-ignore-db=mysql,sys,performance_schema,information_schema

开启GTID

GTID概念

从MySQL 5.6.5 开始新增了一种基于 GTID 的复制方式。通过 GTID 保证了每个在主库上提交的事务在集群中有一个唯一的ID。这种方式强化了数据库的主备一致性,故障恢复以及容错能力。

开启GTID的好处

GTID相对于行复制数据安全性更高,故障切换更简单。
1) 根据 GTID 可以快速的确定事务最初是在哪个实例上提交的。
2) 简单的实现 failover,不用以前那样在需要找 log_file 和 log_pos。
3) 更简单的搭建主从复制,确保每个事务只会被执行一次。
4) 比传统的复制更加安全,一个 GTID 在一个服务器上只执行一次,避免重复执行导致数据混乱或者主从不一致。
5)GTID是连续的没有空洞的,保证数据的一致性,零丢失
6)GTID 用来代替classic的复制方法,不再使用 binlog+pos 开启复制。而是使用 master_auto_postion=1 的方式自动匹配 GTID 断点进行复制。
7) GTID 的引入,让每一个事务在集群事务的海洋中有了秩序,使得 DBA 在运维中做集群变迁时更加方便

如何开启

只需要在my.cnf中添加:

# 开启gtidgtid_mode=ON
enforce-gtid-consistency=true

然后在从库上执行:

stop slave;
change master to master_host='主库的IP',master_port=3306,master_user='slaveuser',master_password='password',master_auto_position = 1;
start slave;

跟之前对比,不需要再去查master_log_filemaster_log_pos,直接用master_auto_position = 1代替即可。

注意事项

如果要开启gtid,需要在主库和从库都开启才有效。

查看GTID是否开启

show variables like 'gtid_mode'




推荐本站淘宝优惠价购买喜欢的宝贝:

image.png

本文链接:https://sg.hqyman.cn/post/9571.html 非本站原创文章欢迎转载,原创文章需保留本站地址!

分享到:
打赏





休息一下~~


« 上一篇 下一篇 »

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

请先 登录 再评论,若不是会员请先 注册

您的IP地址是: