- A+
一、环境规划
角色 | 服务器IP | 端口 | 组件版本 |
---|---|---|---|
主库(Master) | 192.168.2210 | 3306 | MySQL 5.7 |
从库1(Slave1) | 192.168.22.11 | 3306 | MySQL 5.7 |
从库2(Slave2) | 192.168.22.12 | 3306 | MySQL 5.7 |
二、MySQL主从复制部署
1. 主库配置(192.168.22.10)
-- 登录MySQL(使用临时密码)
mysql -u root -p
-- 修改密码策略(可选)
SET GLOBAL validate_password.policy=LOW;
ALTER USER 'root'@'localhost' IDENTIFIED BY 'Admin@xxx.123';
-- 创建复制用户
CREATE USER 'repl'@'%' IDENTIFIED BY 'xxx.com';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';
FLUSH PRIVILEGES;
-- 修改配置文件
vim /etc/my.cnf
[mysqld]
server-id = 10 # 主从唯一标识,不能重复
log-bin = mysql-bin # 启用二进制日志
binlog_format = ROW # 推荐格式,保证数据一致性
expire_logs_days = 7 # 自动清理7天前的日志
# 可选:指定同步的数据库(如只需同步特定库)
# binlog-do-db = mydb # 只同步mydb库
# binlog-ignore-db = mysql # 忽略系统库
systemctl restart mysqld
-- 获取主库状态(记录File和Position)
SHOW MASTER STATUS;
2. 从库配置(192.168.22.11/192.168.22.12)
-- 修改配置文件
vim /etc/my.cnf
[mysqld]
server-id = 11 # 从库1为11,从库2为12
relay-log = mysql-relay-bin # 中继日志文件名
read-only = 1 # 从库只读(超级用户仍可写)
# 可选:指定同步的数据库(与主库binlog-do-db对应)
# replicate-do-db = mydb
# replicate-ignore-db = mysql
systemctl restart mysqld
-- 配置复制(使用主库的File和Position)
CHANGE MASTER TO
MASTER_HOST='主库IP',
MASTER_USER='repl',
MASTER_PASSWORD='xxx.com',
MASTER_LOG_FILE='记录的主库File值',
MASTER_LOG_POS=记录的主库Position值;
START SLAVE;
-- 检查复制状态
SHOW SLAVE STATUS\G
-- 确保以下值为"Yes":
-- Slave_IO_Running: Yes
-- Slave_SQL_Running: Yes

4. 验证主从同步
-- 主库创建测试表
CREATE DATABASE IF NOT EXISTS testdb;
USE testdb;
CREATE TABLE t_user(id INT PRIMARY KEY, name VARCHAR(50));
INSERT INTO t_user VALUES(1, 'Master');
-- 从库检查数据
SELECT * FROM testdb.t_user;