Mysql 主从同步

Updated on with 0 views and 0 comments

image.png

Mysql 主从同步

一、实现原理

主库(Master):负责写(增删改)

从库(Slave):负责读(查询)、备份、高可用

**原理:**主库生成 binlog → 从库拉取并执行,实现数据一致

二、必备条件

主从 MySQL 版本最好一致

主从服务器网络互通

主库开启 binlog

主库创建复制专用账号(REPLICATION SLAVE)

三、完整搭建步骤

1. 主库配置(my.cnf/my.ini)

[mysqld]
# 必须开启binlog
log_bin=mysql-bin

# 唯一ID,不能和从库一样
server_id=1

# 要同步的库(可选)
# binlog_do_db = test

# 忽略的库(可选)
binlog_ignore_db = mysql
binlog_ignore_db = information_schema
binlog_ignore_db = performance_schema

# 以下可选,建议加上
expire_logs_days = 7
binlog_format = ROW

重启主节点 mysql

systemctl restart mysqld

2. 主库创建复制账号

-- REPLICATION SLAVE, REPLICATION CLIENT 主从复制的权限

CREATE USER 'repl'@'192.168.%' IDENTIFIED BY '123456';

GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'repl'@'192.168.%';

FLUSH PRIVILEGES;

3. 查看主库状态(获取文件和偏移量)

SHOW MASTER STATUS;

得到类似:

  • File: mysql-bin.000001
  • Position: 156

4. 从库配置(my.cnf)

[mysqld]
server_id=2   # 必须和主库不同
read_only=1   # 从库只读(普通用户不能写)

重启 mysql

systemctl restart mysqld

5. 从库连接主库

CHANGE MASTER TO
MASTER_HOST='主库IP',
MASTER_USER='repl',
MASTER_PASSWORD='123456',
MASTER_LOG_FILE='mysql-bin.000001',  -- 主库查到的
MASTER_LOG_POS=156;                  -- 主库查到的

GET_SOURCE_PUBLIC_KEY=1; # mysql8.0

6. 启动同步

START SLAVE;

7. 检查从库状态

SHOW SLAVE STATUS\G

同步成功:

  • Slave_IO_Running: Yes
  • Slave_SQL_Running: Yes

四、运维命令

# 停止
STOP SLAVE;

# 重置
RESET SLAVE;

# 跳过错误(偶尔出错用)
STOP SLAVE;
SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 1;
START SLAVE;

标题:Mysql 主从同步
作者:zhongts
地址:http://zhongts.cc:8080/articles/2026/04/05/1775377935991.html