最近使用了MySQL 8的主从复制,利用数据同步,实现数据备份。

1. 概述

关于MySQL主从复制的原理和各种部署方式,参考:看完这篇还不懂 MySQL 主从复制,可以回家躺平了~。本文采用“一主一从”方式部署。

参考文章:

官方文档:

注意:从MySQL 8.0.22开始,大量涉及“SLAVE”的配置和命令,都改为“REPLICA”字样,详见官网说明。

2. 主服务器配置

主服务器是安装在Debian 12的MySQL 8,假设其IP地址为192.168.0.100。修改MySQL的配置文件/etc/mysql/conf.d/mysqld.cnf,在[mysqld]下添加以下配置。保存配置文件后重启MySQL服务。

[mysqld]
# 主从复制,设为主服务器
# 服务器ID
server-id = 1
# 开启二进制日志。事务提交时写日志到对应文件
log-bin = mysql-bin
# 日志过期删除的天数,延迟严重的话会导致日志文件占用磁盘
expire_logs_days = 14

利用mysql命令,连上MySQL主服务器,并执行以下语句。注意: MySQL 8 默认身份验证插件是caching_sha2_password,详见变量default_authentication_plugin的配置。

-- 创建用户,提供给从服务器访问
CREATE USER 'repl'@'%' IDENTIFIED WITH caching_sha2_password BY 'password';
-- 授权用户拥有所有数据库表的同步数据权限
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';

再执行以下语句,显示主服务器的配置,记下FilePosition的值。

SHOW MASTER STATUS\G;

3. 从服务器配置

从服务是安装在Debian 12的MySQL 8,假设其IP地址为192.168.0.101。修改MySQL配置文件/etc/mysql/conf.d/mysqld.cnf,在[mysqld]下添加以下配置。保存配置文件后重启MySQL服务。

# 主从复制,设为从服务器
# 服务器ID
server-id = 2
# 同步的数据库。多个数据库需配置多行
#replicate-do-db = db1
#replicate-do-db = db2
# 服务重启后自动开始同步数据,默认OFF
#skip-replica-start = false

利用mysql命令,连上MySQL从服务器,并执行以下语句。

  • 由于主服务器的身份验证插件采用caching_sha2_password,从服务器需要配置GET_SOURCE_PUBLIC_KEY=1才能通过身份验证。
  • SOURCE_LOG_FILE对应主服务器的File的值。
  • SOURCE_LOG_POS对应主服务器的Position的值。
-- 从服务器配置
STOP REPLICA;

CHANGE REPLICATION SOURCE TO SOURCE_HOST='192.168.0.100'
    ,SOURCE_PORT=3306
    ,SOURCE_USER='repl'
    ,SOURCE_PASSWORD='password'
    ,SOURCE_LOG_FILE='mysql-bin.000001'
    ,SOURCE_LOG_POS=123
    ,GET_SOURCE_PUBLIC_KEY=1
    ;

START REPLICA;

执行以下语句,查看从服务器的状态,检查从服务器是否正常运行。如果Replica_IO_RunningReplica_SQL_Running都显示Yes,则表示正常运行。

SHOW REPLICA STATUS\G;

标签: MySQL, 主从复制

添加新评论