下面给你一份**Linux 下 MariaDB 主从同步(Master–Slave Replication)**的实战步骤,适用于常见发行版(CentOS / Rocky / Ubuntu 等,命令略有差异但原理一致)。
假设:
⚠️ 主从版本建议一致或主 ≥ 从
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必须唯一
systemctl restart mariadb
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;
SHOW MASTER STATUS;
记录:
[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 即成功
firewall-cmd --add-service=mysql --permanent
firewall-cmd --reload
bind-address = 0.0.0.0
确保主从不一致
STOP SLAVE;
SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
START SLAVE;
如果你愿意,可以告诉我:
我可以给你一份完全贴合你环境的配置示例。