MySQL 主从复制配置

应用架构

节点 系统 数据库版本 IP 地址
主节点 Ubuntu 24.04 MySQL 5.7.23 192.168.52.15
从节点 CentOS 7.6 MySQL 5.7.44 192.168.52.13

主节点配置

主节点开启二进制日志功能:

1
2
3
4
5
6
cat >> /etc/mysql/mysql.conf.d/mysqld.cnf << EOF
server-id=1 # 指定唯一ID
read-only=0 # 允许读写
log-bin=mysql-bin # 指定二进制日志文件名
binlog-format=ROW # 记录每一行的数据变化
EOF

alt text

重启主节点:

1
sudo systemctl restart mysql

为root用户授权主从复制权限并修改密码:

1
2
3
SET GLOBAL validate_password_policy = LOW;  -- 修改密码策略
grant replication slave on *.* to 'root'@'%' identified by 'root';
flush privileges; -- 刷新权限

记录二进制日志坐标:

1
show master status;

alt text

从节点配置

从节点开启二进制日志功能:

1
2
3
4
5
cat >> /etc/my.cnf << EOF
server-id=2 # 指定唯一ID
read-only=1 # 设置只读
binlog-format=ROW # 记录每一行的数据变化
EOF

alt text

重启从节点:

1
sudo systemctl restart mysqld

连接主节点:

1
2
3
4
5
6
7
8
9
CHANGE MASTER TO
MASTER_HOST='192.168.52.15',
MASTER_USER='root',
MASTER_PASSWORD='root',
MASTER_PORT=3306,
MASTER_LOG_FILE='mysql-bin.000002',
MASTER_LOG_POS=589;
start slave; -- 启动从节点
show slave status \G; -- 查看从节点状态

alt text

测试

主节点创建数据库并插入数据:

1
2
3
4
5
6
7
8
9
CREATE DATABASE test_db;  -- 创建数据库
USE test_db; -- 切换数据库
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(50) NOT NULL,
email VARCHAR(100) NOT NULL
); -- 创建表
INSERT INTO users (name, email) VALUES ('tsj', 'tsj@example.com'); -- 插入数据
SELECT * FROM users; -- 查看数据

alt text

注意:如果连接不上主节点,需要检查主节点是否放行3306端口。

从节点查看数据:

1
2
3
show databases;  -- 查看数据库
USE test_db; -- 切换数据库
SELECT * FROM users; -- 查看数据

alt text

参考:

https://www.bilibili.com/video/BV1jT411r77s/