下面以 Debian + MySQL / MariaDB 为例,一步一步说明如何配置 主从复制(Master–Slave Replication)。示例基于 MySQL 8.0 / MariaDB 10+,原理通用。
假设:
192.168.1.10192.168.1.20编辑 MySQL 配置文件(Debian 通常为):
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
添加或修改:
server-id = 1
log_bin = /var/log/mysql/mysql-bin.log
binlog_format = ROW
expire_logs_days = 7
server-id必须唯一
sudo systemctl restart mysql
CREATE USER 'repl'@'192.168.1.20' IDENTIFIED WITH mysql_native_password BY 'repl_password';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.1.20';
FLUSH PRIVILEGES;
SHOW MASTER STATUS;
记录:
File(如 mysql-bin.000001)Position(如 154)sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
server-id = 2
relay_log = /var/log/mysql/relay-bin
read_only = 1
sudo systemctl restart mysql
如果是新库可跳过;如果是已有数据:
mysqldump -u root -p --all-databases --master-data > db.sql
mysql -u root -p < db.sql
在从库执行:
CHANGE MASTER TO
MASTER_HOST='192.168.1.10',
MASTER_USER='repl',
MASTER_PASSWORD='repl_password',
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=154;
使用前面
SHOW MASTER STATUS的值
START SLAVE;
SHOW SLAVE STATUS\G
重点确认:
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
只要这两个是 Yes,主从配置成功 ✅
确保主库 3306 端口可访问:
sudo ufw allow from 192.168.1.20 to any port 3306
从库报错:
The slave I/O thread stops because master and slave have equal MySQL server UUIDs
解决:
sudo rm /var/lib/mysql/auto.cnf
sudo systemctl restart mysql
如果你告诉我:
我可以给你完全对应的命令版本。