Linux部署MySQL主从复制(一主两从)

  • A+
所属分类:MySQL 数据库

一、环境规划

角色服务器IP端口组件版本
主库(Master)192.168.22103306MySQL 5.7
从库1(Slave1)192.168.22.113306MySQL 5.7
从库2(Slave2)192.168.22.123306MySQL 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
Linux部署MySQL主从复制(一主两从)

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;
xxx