Ubuntu24.04配置MySQL8.4数据库主从复制

Title Ubuntu24.04配置MySQL8.4数据库主从复制
Framework Ubuntu
User wy8817399@vip.qq.com
Id 81
Created 7/19/26, 4:35 PM
Modified 7/19/26, 7:56 PM
Published Yes
Content

一、主库配置

1、检查是否有ssl证书,默认应该包含ca.pem、server-cert.pem、server-key.pem三个文件

ll /var/lib/mysql/*.pem
# ----------------------正常应该显示下列文件----------------------
-rw------- 1 mysql mysql 1705 Jul 19 17:11 /var/lib/mysql/ca-key.pem
-rw-r--r-- 1 mysql mysql 1112 Jul 19 17:11 /var/lib/mysql/ca.pem
-rw-r--r-- 1 mysql mysql 1112 Jul 19 17:11 /var/lib/mysql/client-cert.pem
-rw------- 1 mysql mysql 1705 Jul 19 17:11 /var/lib/mysql/client-key.pem
-rw------- 1 mysql mysql 1705 Jul 19 17:11 /var/lib/mysql/private_key.pem
-rw-r--r-- 1 mysql mysql  452 Jul 19 17:11 /var/lib/mysql/public_key.pem
-rw-r--r-- 1 mysql mysql 1112 Jul 19 17:11 /var/lib/mysql/server-cert.pem
-rw------- 1 mysql mysql 1705 Jul 19 17:11 /var/lib/mysql/server-key.pem

 

2、配置数据库服务器

vim /etc/mysql/mysql.conf.d/mysqld.cnf
# 增加以下配置
# 主库唯一 ID
server-id       = 1
# 启用二进制日志
log_bin         = /var/log/mysql/mysql-bin.log
# 允许所有 IP 连接(生产环境建议改为具体 IP)
bind-address    = 0.0.0.0
# 二进制日志格式(推荐 ROW)
binlog_format   = ROW

# SSL 配置(添加以下 3 行)
ssl_ca          = /var/lib/mysql/ca.pem
ssl_cert        = /var/lib/mysql/server-cert.pem
ssl_key         = /var/lib/mysql/server-key.pem

 

3、重启主库

sudo systemctl restart mysql

 

4、验证 SSL 生效

# TCP/IP + SSL 连接测试(必须显示加密套件)
mysql -u root -p -h 127.0.0.1 --ssl-mode=REQUIRED -e "SHOW STATUS LIKE 'Ssl_cipher';"

# ----------------------正常输出如下----------------------
+---------------+------------------------+
| Variable_name | Value                  |
+---------------+------------------------+
| Ssl_cipher    | TLS_AES_128_GCM_SHA256 |
+---------------+------------------------+

 

5、创建复制用户

-- 创建复制用户(强制 SSL)
CREATE USER 'repl'@'%' IDENTIFIED BY '123456' REQUIRE SSL;
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';
FLUSH PRIVILEGES;

-- 创建复制用户(非强制 SSL)
CREATE USER 'repl'@'%' IDENTIFIED BY '123456';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';
FLUSH PRIVILEGES;

-- 验证
SELECT user, host, plugin, ssl_type FROM mysql.user WHERE user='repl';

 

6、导出当前节点的所有数据

mysqldump --single-transaction --source-data=2 -u root -p --all-databases > backup.sql

 

7、导出主库数据

mysqldump -u root -p \
  --all-databases \
  --single-transaction \
  --source-data=2 \
  --routines \
  --triggers \
  --events \
  --set-gtid-purged=OFF \
  > master_data.sql

 

8、查看备份文件记录的节点

head -50 master_data.sql | grep "SOURCE_LOG_FILE"

# --------------------预期输出--------------------------
CHANGE REPLICATION SOURCE TO SOURCE_LOG_FILE='binlog.000008', SOURCE_LOG_POS=6627;

 

二、从库配置

1、从主库复制master_data.sql 文件以及、ca.pem文件到从库,ca.pem需放到/var/lib/mysql/路径下覆盖

# 在主库操作复制到从库
root@leon:/var/lib/mysql# scp ca.pem root@192.168.20.137:/var/lib/mysql/
root@leon:/installpackage# scp master_data.sql root@192.168.20.137:/installpackage

 

2、导入数据

mysql -u root -p < master_data.sql

 

3、修改配置文件

vim /etc/mysql/mysql.conf.d/mysqld.cnf

# 增加以下配置
# 从库唯一 ID,必须不同于主库
server-id = 2

# 中继日志
relay-log = /var/log/mysql/mysql-relay-bin.log

# 开启只读模式
read_only = ON

 

4、重启MySQL从库

sudo systemctl restart mysql

 

5、从库复制配置

-- 重置复制配置
STOP REPLICA;
RESET REPLICA ALL;

-- 配置主库信息(使用 1.7 记录的值)
CHANGE REPLICATION SOURCE TO
  SOURCE_HOST = '192.168.20.136',  -- 替换主库IP地址
  SOURCE_PORT = 3306,  -- 替换为主库数据库端口
  SOURCE_USER = 'repl',  -- 替换为刚创建的复制专用帐号
  SOURCE_PASSWORD = '123456',  -- 替换刚创建的复制专用帐号的密码
  SOURCE_LOG_FILE = 'binlog.000008',  -- 替换为1.8实际值
  SOURCE_LOG_POS = 6627,                  -- 替换为1.8实际值
  SOURCE_SSL = 1,
  SOURCE_SSL_CA = '/var/lib/mysql/ca.pem';

START REPLICA;

 

6、从库查看复制状态

SHOW REPLICA STATUS\G;