下面以 Debian 11/12 + MySQL 8.0 为例,说明如何配置 MySQL 主从复制(Master-Slave Replication)。
假设:
192.168.1.10192.168.1.20编辑配置文件(通常如下之一):
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
添加或修改:
[mysqld]
server-id = 1
log-bin = mysql-bin
binlog_format = ROW
server-id必须唯一
sudo systemctl restart mysql
mysql -u root -p
CREATE USER 'repl'@'192.168.1.20' IDENTIFIED WITH mysql_native_password BY 'ReplPass123!';
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
[mysqld]
server-id = 2
relay-log = mysql-relay-bin
sudo systemctl restart mysql
mysql -u root -p
CHANGE MASTER TO
MASTER_HOST='192.168.1.10',
MASTER_USER='repl',
MASTER_PASSWORD='ReplPass123!',
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=154;
START SLAVE;
SHOW SLAVE STATUS\G
确认:
Slave_IO_Running: YesSlave_SQL_Running: YesCREATE DATABASE test_repl;
USE test_repl;
CREATE TABLE t1(id INT);
INSERT INTO t1 VALUES(1);
SELECT * FROM test_repl.t1;
能看到数据即成功。
若克隆虚拟机:
SHOW VARIABLES LIKE 'server_uuid';
删除:
sudo rm /var/lib/mysql/auto.cnf
sudo systemctl restart mysql
sudo ufw allow from 192.168.1.20 to any port 3306
binlog-do-db=db_name
Master & Slave:
gtid_mode=ON
enforce_gtid_consistency=ON
Slave:
CHANGE MASTER TO
MASTER_HOST='192.168.1.10',
MASTER_USER='repl',
MASTER_PASSWORD='ReplPass123!',
MASTER_AUTO_POSITION=1;
如果你需要 Docker 版 / MariaDB / 一主多从 / 半同步复制,我可以继续补充。