当前位置: 首页 > article >正文

MySQL 8.0 与 8.4 主主同步

MySQL数据库主主同步

快速部署8.0和8.4数据库

  • 初始化8.0数据库
# 两台服务器安装MySQL8.0数据库(非docker安装)
tar -xf mysql-8.0.39-1.el9.x86_64.rpm-bundle.tar
yum -y install mysql-community*.rpm
systemctl restart mysqld.service
  • 初始化8.4数据库
# 两台服务器安装MySQL8.4数据库
tar -xf mysql-8.4.2-1.el9.x86_64.rpm-bundle.tar
yum -y install mysql-community*.rpm
systemctl restart mysqld.service

更改root初始密码

  • 进入数据库
mysql -uroot -p$(grep password /var/log/mysqld.log | awk '{print $NF}')
  • 修改root初始密码
alter user root@'localhost' identified by 'you_password';
exit;
配置数据库主主同步

创建同步的库和用户

-- 创建同步的库
CREATE DATABASE new_database
CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;

-- 新建同步的用户
CREATE USER 'replicator'@'%' IDENTIFIED BY 'password';
GRANT REPLICATION SLAVE ON *.* TO 'replicator'@'%';
FLUSH PRIVILEGES;

配置主节点 1

  • 修改 /etc/my.cnf 文件,添加下面内容
server-id = 1
log_bin = mysql-bin
binlog_do_db = new_database
# 设置自增列的增量值,建议将其设置为大于 1 的值,以避免两个主节点在插入时产生相同的自增值
auto_increment_increment = 2
# 设置自增列的起始值
auto_increment_offset = 1
  • 重启主节点 1
systemctl restart mysqld.service

配置主节点 2

  • 修改数据库配置文件 /etc/my.cnf
server-id = 2
log_bin = mysql-bin
binlog_do_db = new_database
auto_increment_increment = 2
auto_increment_offset = 2
  • 重启主节点 2
systemctl restart mysqld.service

8.0 版本配置主主同步

  • 主节点1登录主节点2数据库,将密钥发送到主节点2
mysql -ureplicator -h主节点2的IP -p'password' --get-server-public-key
  • 主节点2登录主节点1数据库,将密钥发送到主节点1
mysql -ureplicator -h主节点1的IP -p'password' --get-server-public-key
  • 获取当前的二进制日志文件和位置
-- 主节点1和2都需要查看
SHOW MASTER STATUS;

/*
主节点1测试环境的结果(仅作参考)
mysql> SHOW MASTER STATUS;
+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000001 |      157 | new_test     |                  |                   |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)

主节点2测试环境结果
mysql> SHOW MASTER STATUS;
+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000001 |      157 | new_test     |                  |                   |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
*/
  • 配置主节点 1 连接主节点 2
CHANGE MASTER TO
    MASTER_HOST='主节点2的IP',
    MASTER_USER='replicator',
    MASTER_PASSWORD='password',
    MASTER_LOG_FILE='记录的File',
    MASTER_LOG_POS=记录的Position;

-- 启动复制
START SLAVE;
  • 配置主节点 2 连接主节点 1
CHANGE MASTER TO
    MASTER_HOST='主节点1的IP',
    MASTER_USER='replicator',
    MASTER_PASSWORD='password',
    MASTER_LOG_FILE='记录的File',
    MASTER_LOG_POS=记录的Position;

-- 启动复制
START SLAVE;
  • 检查复制状态
SHOW SLAVE STATUS\G;
-- 确保 Slave_IO_Running 和 Slave_SQL_Running 都为 Yes。

8.4 版本配置主主同步

  • 同理,需要先将密钥发送到对方服务器
mysql -ureplicator -hIP -p'password' --get-server-public-key
  • 获取当前的二进制日志文件和位置
-- 8.4 部分查询有改变
SHOW BINARY LOG STATUS;

/*
mysql> SHOW BINARY LOG STATUS;
+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000001 |      158 | new_test     |                  |                   |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
*/
  • 配置主节点 1 连接主节点 2
-- 此处也会有变化
CHANGE REPLICATION SOURCE TO
    SOURCE_HOST='主节点2的IP',
    SOURCE_USER='replicator',
    SOURCE_PASSWORD='password',
    SOURCE_LOG_FILE='记录的File',
    SOURCE_LOG_POS=记录的Position;

-- 启动复制
START REPLICA;
  • 配置主节点 2 连接主节点 1
CHANGE REPLICATION SOURCE TO
    SOURCE_HOST='主节点1的IP',
    SOURCE_USER='replicator',
    SOURCE_PASSWORD='password',
    SOURCE_LOG_FILE='记录的File',
    SOURCE_LOG_POS=记录的Position;

-- 启动复制
START REPLICA;
  • 检查复制状态
SHOW REPLICA STATUS\G

-- -- 确保 Slave_IO_Running 和 Slave_SQL_Running 都为 Yes。
总结和答疑

8.4 是MySQL数据库的一个分水岭,部分操作会有小小的变化。

  • 具体变化请参考文档: https://dev.mysql.com/doc/refman/8.4/en/mysql-nutshell.html

新的同步方式会验证用户名密钥,没有同步密钥会导致同步不成功


http://www.kler.cn/news/319247.html

相关文章:

  • E+H超声波物位仪FMU42-ATB2A22A
  • 企业内训|华为昇腾智算中心深度技术研修-某智算厂商研发中心
  • mysql RR是否会导致幻读?
  • [Redis][事务]详细讲解
  • 激光粉尘传感器:筑牢粮仓安全防线,有效应对粮食粉尘爆炸高危风险
  • 为什么一定要学AI(Stable Diffusion)做设计? 会用AI和不会用AI的区别真的太大了!打工人一定要看!
  • SQL中的WITH AS语法
  • Java项目中异常处理的最佳实践
  • nginx+keepalived健康检查案例详解(解决nginx出现故障却不能快速切换到备份服务器的问题)
  • 【Java特性】多态详解——对象类型转换与 instanceof 关键字的运用
  • python使用vscode 所需插件
  • VCS和Verdi联合仿真使用学习记录
  • 哪里有同等学力申硕英语历年真题答案
  • 计算机知识科普问答--17(81-85)
  • pg入门5—pg有哪些系统schema
  • git add成功后忘记commit的文件丢了?
  • Linux、Windows、Android下查看可执行文件、动态库和静态库信息的命令
  • 数据结构|二叉搜索树
  • ProgrammerAI—AI辅助编程学习指南
  • 前端实现将二进制文件流,并下载为excel文件
  • HarmonyOS鸿蒙开发实战(5.0)自定义全局弹窗实践
  • 缓存技术的核心价值与应用
  • android studio 批量修改包名 app package name
  • 技术周总结 09.16~09.22 周日(架构 C# 数据库)
  • 基于Java,SpringBoot和Vue的仓库管理商品管理电商后台管理系统
  • 交换机和路由器的区别
  • HTML-DOM模型
  • 《深度学习》—— 神经网络中的调整学习率
  • React组件如何暴露自身的方法
  • 专题·大模型安全 | 生成式人工智能的内容安全风险与应对策略