一、MySQL 主从复制基本原理
MySQL 主从复制是指:一台数据库服务器负责写入操作,并将数据变更以二进制日志形式记录下来;一台或多台从库通过读取主库的二进制日志,实时或半实时地将主库的写入操作同步到自身数据库,实现数据一致性。
二、环境准备
本示例使用以下环境:
Ubuntu 20.04 / 22.04 两台或多台服务器(主库1台,从库1台或多台)
MySQL 8.x(5.7 同理,部分配置项命名不同)
主库 IP:192.168.1.100
从库 IP:192.168.1.101
建议主从服务器防火墙开放 MySQL 端口(默认 3306),并在内网部署以确保安全性。
三、主库配置
1.编辑主库 MySQL 配置文件
在主库服务器上修改 MySQL 配置文件,一般路径:
/etc/mysql/mysql.conf.d/mysqld.cnf
主要修改或增加以下内容:
[mysqld]
server-id = 1 # 唯一标识主库
log_bin = /var/log/mysql/mysql-bin.log # 开启二进制日志
binlog_do_db = your_database_name # 指定需要复制的数据库(可选)
保存后,重启 MySQL:
sudo systemctl restart mysql
2.创建复制账号
登录 MySQL:
mysql -u root -p
创建一个专用复制账号,并授权:
CREATE USER 'repl'@'192.168.1.%' IDENTIFIED WITH mysql_native_password BY 'strong_password';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.1.%';
FLUSH PRIVILEGES;
说明:
用户名可自定义(如 repl)
IP 段可根据实际环境调整
3.查看主库状态
锁定表并查看主库当前二进制日志状态:
FLUSH TABLES WITH READ LOCK;
SHOW MASTER STATUS;
记录输出中的:
File (例如:mysql-bin.000001)
Position (例如:1234)
不要关闭此终端,否则锁会失效。
四、从库配置
1.编辑从库配置文件
在从库服务器上修改 MySQL 配置文件:
[mysqld]
server-id = 2 # 从库唯一ID,和主库不同
relay_log = /var/log/mysql/mysql-relay-bin.log
重启 MySQL:
sudo systemctl restart mysql
2.配置主从关系
登录从库:
mysql -u root -p
执行如下命令,配置主库信息和同步点:
CHANGE MASTER TO
MASTER_HOST='192.168.1.100',
MASTER_USER='repl',
MASTER_PASSWORD='strong_password',
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=1234;
请将 MASTER_LOG_FILE 和 MASTER_LOG_POS 替换成主库实际状态。
3.启动复制
START SLAVE;
查看复制状态:
SHOW SLAVE STATUS\G
重点检查输出中的:
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
如果两项均为 Yes,则说明主从配置成功。
4.解除主库锁定
回到主库终端:
UNLOCK TABLES;
主库恢复写入。
五、验证主从复制
在主库执行:
USE your_database_name;
CREATE TABLE test_table (id INT PRIMARY KEY, val VARCHAR(50));
INSERT INTO test_table VALUES (1, 'hello');
在从库查看:
SELECT * FROM your_database_name.test_table;
若数据同步成功,则表和数据与主库一致。
主从架构不仅提升了数据库读写性能,还为数据安全和业务可用性提供了重要保障。在实际部署中,可根据业务需求选择全量同步、部分库表同步、多从库扩展等方案,以适配不同规模的生产环境。