主从复制原理
原理图

主从配置
1. 主:
1.1 修改配置文件:
编辑主服务器的MySQL配置文件 my.cnf(一般位于 /etc/mysql/my.cnf 或 /etc/my.cnf),在 [mysqld] 部分添加或修改以下配置项:
[mysqld]
server-id = 1 # 唯一标识主服务器,必须是正整数
log_bin = mysql-bin # 启用二进制日志
binlog_do_db = cannian # 指定需要复制的数据库
配置说明:
-
server-id:每个 MySQL 实例必须有唯一的 ID。
-
log_bin:启用二进制日志,主从复制依赖它。
-
binlog_do_db:限制只复制 cannian 数据库。
1.2 重启服务
systemctl restart mysqld # 重启服务
1.3 创建复制用户
CREATE USER 'repl'@'192.168.1.101' IDENTIFIED WITH 'mysql_native_password' BY 'your_password';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.1.101';
FLUSH PRIVILEGES;
配置说明:
- 'repl'@'192.168.1.101':指定从服务器 IP。
- your_password:替换为你的密码。
- MySQL 8.0 默认使用 caching_sha2_password,但主从复制可能需要 mysql_native_password。
1.4 获取主机状态
SHOW MASTER STATUS;
+---------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+---------------+----------+--------------+------------------+
| mysql-bin.000001 | 154 | cannian | |
+---------------+----------+--------------+------------------+
记录 File(如 mysql-bin.000001)和 Position(如 154),后续从服务器需要用到。
2. 从
2.1 修改配置文件
[mysqld]
server-id = 2 # 唯一标识从服务器,必须与主服务器不同
replicate-do-db = cannian # 指定只复制 cannian 数据库
2.2 重启mysql
systemctl restart mysqld
2.3 配置主服务器链接
mysql -u root -p
CHANGE REPLICATION SOURCE TO
SOURCE_HOST = '192.168.1.100', # 主服务器 IP
SOURCE_USER = 'repl', # 复制用户
SOURCE_PASSWORD = 'your_password', # 复制用户密码
SOURCE_LOG_FILE = 'mysql-bin.000001',# 主服务器二进制日志文件
SOURCE_LOG_POS = 154; # 主服务器日志位置
MySQL 8.0 使用 CHANGE REPLICATION SOURCE TO(旧版本为 CHANGE MASTER TO)
2.4 启动复制
START REPLICATION;
2.5 获取从机状态
SHOW REPLICATION STATUS\G
确认以下字段:
-
Source_Host:主服务器 IP。
-
Replication_Running:应为 Yes。
-
Last_Error:应为空(无错误)。
3. 测试
3.1 主机上操作
USE cannian;
CREATE TABLE test_table (id INT, name VARCHAR(20));
INSERT INTO test_table VALUES (1, 'test');
3.2 从机上验证
USE cannian;
SELECT * FROM test_table;