MySQL主从复制的配置方式

概念原理

主从复制(Master-Slave Replication)

主从复制是一种常见的高可用、读写分离和数据备份方案。它通过将主库(Master)上的数据变更同步到一个或多个从库(Slave)来实现数据冗余和负载均衡。

复制模式

行模式:只记录哪个数据被修改,修改成什么样,数据一致性高,兼容所有 SQL,但是binlog 体积大

语句模式:将执行的 SQL 语句 记录下来,binlog 体积小,但是某些非确定性函数(如 NOW(), RAND(), UUID())在主从上结果可能不同,导致数据不一致

配置过程

一、环境准备

  • 主库(Master) :IP 为 192.168.1.10
  • 从库(Slave) :IP 为 192.168.1.11
  • 两台服务器都安装了相同版本的 MySQL(本文基于Mysql8.0 )

二、主库配置

2.1修改配置文件

找到my.ini配置文件

位置:手动配置在bin目录下,自动安装的(使用msi按照)在C:\ProgramData\MySQL\MySQL Server

ProgramData为隐藏文件夹

增加/修改如下配置
ini 复制代码
[mysqld]
# 唯一服务器 ID
server-id = 1

# 开启 binlog(必须)
log-bin="MYSQL-bin"
log-error="MYSQL.err"


# 启用 GTID 模式
gtid_mode = ON
enforce_gtid_consistency = ON

# 推荐设置(MySQL 8 默认已开启)
binlog_format = ROW

# 可选:指定需要同步的数据库(如不指定则同步全部)
# binlog_do_db = your_db_name

注意事项:

(1)所有配置都在[mysqld] 这个标签下面,配置文件应该已经有[mysqld] ,不需要另外写

(2)log-bin和log-error配置先找找配置文件中有没有,没有再配置

(3)下面同步部分的配置,要现在原来配置文件中先查找是否已经配置项,有就修改,没有就添加

配置文件改错会导致无法启动

2.2重启服务

配置完成之后重启服务,通过服务中直接停止再启动,或者cmd命令行(管理员模式)

2.3创建用于复制的用户

执行下面脚本,创建一个用于用户复制的账号 (用户名:copyer,密码:12345678按需修改)

SQL 复制代码
-- 创建用户(如不存在)
CREATE USER 'copyer'@'%' IDENTIFIED WITH IDENTIFIED BY '12345678';
#早期版本使用mysql_native_password认证方式
# CREATE USER 'copyer'@'%' IDENTIFIED WITH mysql_native_password BY '12345678';

-- 授权
GRANT REPLICATION SLAVE ON *.* TO 'copyer'@'%';

-- 刷新
FLUSH PRIVILEGES;

-- 验证
SELECT user, host, plugin FROM mysql.user WHERE user = 'copyer';

三、从库配置

3.1 修改配置文件信息

修改配置文件,在从库电脑上配置mysql配置文件,内如如下,方法和注意事项同主库

Ini 复制代码
[mysqld]
server-id = 2  # 必须与主库不同,且在整个复制拓扑中唯一

# 启用 GTID
gtid_mode = ON
enforce_gtid_consistency = ON

# 推荐设置
binlog_format = ROW

log-bin = mysql-bin  # 从库也建议开启 binlog,便于级联复制或切换为主库

3.2重启服务

配置完成之后重启服务,主库和从库配置完成都要重启服务,通过服务中直接停止再启动,或者cmd命令行(管理员模式)

3.3 创建同步通道

执行一下脚本创建通道channel_line1用于同步,配置中的信息都是主库的ip和端口,然后启动同步通道

SQL 复制代码
-- 1. 停止通道(不存在就不需要执行这一步)
# STOP SLAVE FOR CHANNEL 'channel_line1';

-- 彻底清除该通道的所有复制信息(包括 GTID 状态)
-- RESET SLAVE ALL FOR CHANNEL 'channel_line1';

-- 为主库A配置通道,并只同步 line1_db
CHANGE MASTER TO
  MASTER_HOST='192.168.1.10',
  MASTER_PORT=3306,
  MASTER_USER='copyer',
  MASTER_PASSWORD='12345678',
  SOURCE_AUTO_POSITION=1  # GTID自动定位
  FOR CHANNEL 'channel_line1';
  
  -- 3. 启动通道
START SLAVE FOR CHANNEL 'channel_line1';

四、同步

配置完成之后,只要对应的数据库有变化,会自动同步

该功能只能实现配置之后的数据同步,配置之前如果已经有数据了,需要手动进行一次同步

补充

额外的配置

1.指定同步的数据库或表

如果不指定,就是所有数据库表都同步,指定了之后只会同步指定的数据库表

Ini 复制代码
[mysqld] 
# 同步库表(根据不同数据库配置)
# 数据库名
replicate-wild-do-table = xxdatabse   
# 数据库名.表名
replicate-wild-do-table = xxdatabse.xxtable  

2.过滤指定库

使用replicate-ignore-db过滤不需要同步的数据库

Ini 复制代码
[mysqld] 
# 过滤配置
replicate-ignore-db = mysql
replicate-ignore-db = sys
replicate-ignore-db = performance_schema
replicate-ignore-db = information_schema

补充脚本

查看通道状态

SQL 复制代码
SHOW SLAVE STATUS FOR CHANNEL 'channel_line1';

通道重启

SQL 复制代码
-- 1. 停止通道(不存在就不需要执行这一步)
 STOP SLAVE FOR CHANNEL 'channel_line1';
   
  -- 2. 启动通道
START SLAVE FOR CHANNEL 'channel_line1';
相关推荐
阿巴斯甜16 小时前
Android 报错:Zip file '/Users/lyy/develop/repoAndroidLapp/l-app-android-ble/app/bu
android
Kapaseker17 小时前
实战 Compose 中的 IntrinsicSize
android·kotlin
xq952718 小时前
Andorid Google 登录接入文档
android
黄林晴19 小时前
告别 Modifier 地狱,Compose 样式系统要变天了
android·android jetpack
冬奇Lab1 天前
Android触摸事件分发、手势识别与输入优化实战
android·源码阅读
城东米粉儿1 天前
Android MediaPlayer 笔记
android
Jony_1 天前
Android 启动优化方案
android
阿巴斯甜1 天前
Android studio 报错:Cause: error=86, Bad CPU type in executable
android
张小潇1 天前
AOSP15 Input专题InputReader源码分析
android
_小马快跑_2 天前
Kotlin | 协程调度器选择:何时用CoroutineScope配置,何时用launch指定?
android