温馨提示×

linux mariadb怎样主从同步

小樊
44
2026-10-21 19:15:24
栏目: 云计算

下面给你一份**Linux 下 MariaDB 主从同步(Master–Slave Replication)**的实战步骤,适用于常见发行版(CentOS / Rocky / Ubuntu 等,命令略有差异但原理一致)。


一、环境准备

假设:

  • 主库(Master):192.168.1.10
  • 从库(Slave):192.168.1.20
  • MariaDB 版本:10.x

⚠️ 主从版本建议一致或主 ≥ 从


二、主库(Master)配置

1. 修改配置文件

vim /etc/my.cnf.d/server.cnf

或(Ubuntu):

vim /etc/mysql/mariadb.conf.d/50-server.cnf

添加 / 修改:

[mysqld]
server-id = 1
log-bin = mysql-bin
binlog_format = ROW

server-id 必须唯一

2. 重启 MariaDB

systemctl restart mariadb

3. 创建复制账号

mysql -u root -p

CREATE USER 'repl'@'192.168.1.20' IDENTIFIED BY 'replpass';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.1.20';
FLUSH PRIVILEGES;

4. 查看主库状态

SHOW MASTER STATUS;

记录:

  • File(如 mysql-bin.000001)
  • Position(如 154)

三、从库(Slave)配置

1. 修改配置文件

[mysqld]
server-id = 2
relay-log = relay-bin

重启:

systemctl restart mariadb

四、初始化数据(可选但推荐)

如果是已有数据的主库:

主库:

mysqldump -u root -p --all-databases --master-data > db.sql
scp db.sql root@192.168.1.20:/root/

从库:

mysql -u root -p < db.sql

五、配置从库指向主库

在从库执行:

CHANGE MASTER TO
MASTER_HOST='192.168.1.10',
MASTER_USER='repl',
MASTER_PASSWORD='replpass',
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=154;

启动复制:

START SLAVE;

六、检查同步状态

SHOW SLAVE STATUS\G

重点看:

Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Seconds_Behind_Master: 0

✅ 都为 Yes 即成功


七、常见问题排查

1. 无法连接主库

  • 防火墙
firewall-cmd --add-service=mysql --permanent
firewall-cmd --reload
  • 检查 bind-address
bind-address = 0.0.0.0

2. server-id 冲突

确保主从不一致

3. 数据不一致

STOP SLAVE;
SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
START SLAVE;

八、可选增强

  • GTID 复制(更现代)
  • 半同步复制
  • 双主 / 多从
  • 读写分离(ProxySQL)

如果你愿意,可以告诉我:

  • 你的 Linux 发行版
  • MariaDB 版本
  • 是否 已有数据

我可以给你一份完全贴合你环境的配置示例。

0 踩