MySQL 8.0 与 8.4 主主同步
MySQL 8.0 与 8.4 主主同步
1. MySQL 8.4 的新特性
MySQL 8.4 是 MySQL 8 系列的持续更新,虽然没有完全不同于 8.0 的架构变动,但它在稳定性和性能方面提供了增强和改进。
以下是 MySQL 8.4 中与主主同步相关的一些新特性:
- 性能改进:
MySQL 8.4 通过改进的查询优化器、内存管理和存储引擎等方面的优化,进一步提高了多节点复制的效率。 在主主同步中,主节点间的复制延迟和冲突解决有了显著优化,减少了复制中的性能瓶颈。
- 改进的 GTID 复制:
在 MySQL 8.4 中,GTID(全局事务标识符)机制进一步优化。GTID 复制使得跨多个节点的数据同步和事务追踪变得更加可靠。 GTID 的自动生成和追踪更加精准,能够有效避免主主同步中因事务丢失或重复提交而产生的数据不一致问题。
- 增强的半同步复制:
半同步复制(Semi-synchronous Replication)得到了进一步优化,可以提高事务的可用性,确保至少一个从节点确认事务提交后主节点才会返回成功响应,避免在网络或复制节点发生故障时数据丢失。 8.4 中对半同步复制的改进,使得主主同步的环境在高可用性场景下表现更加稳定。
- 错误日志增强:
在 MySQL 8.4 中,复制错误日志被增强,能够更好地诊断同步延迟、复制错误及事务冲突等问题,这对于维护主主同步的健康状态至关重要。
2. 主主同步的基本配置
与 MySQL 8.0 中的配置方法类似,在 MySQL 8.4 中进行主主同步时,需要进行以下配置:
- 唯一
server_id
:每个实例的server_id
需要唯一,且应与其他实例不冲突。 - 启用二进制日志:确保在每个 MySQL 实例上启用
log_bin
选项,以启用日志记录。 - 配置 GTID 或半同步复制:建议启用 GTID 复制模式,并使用半同步复制来增强事务一致性。
[mysqld]
server-id=1 # 对于第一个实例
log-bin=mysql-bin
gtid_mode=O
enforce-gtid-cistency=O
- 复制用户配置:在 MySQL 8.4 中,使用 REPLICATIO SLAVE 权限来创建用于复制的用户。
CREATE USER 'repl'@'%' IDETIFIED BY 'password';
GRAT REPLICATIO SLAVE O *.* TO 'repl'@'%';
. 冲突解决机制
- 事务冲突检测:在 MySQL 8.4 中,冲突检测机制更加健全。通过 GTID 和事务标识,主主同步中的冲突能够通过先进的冲突检测机制自动处理,尤其是在具有高并发写入的环境中,减少了人工干预。
- 冲突解决策略:可以通过 slave_parallel_workers 来启用并行复制,减少由于主主同步中数据冲突所导致的性能瓶颈。
4. 性能监控和优化
- 主主同步性能监控:MySQL 8.4 提供了增强的监控工具,可以帮助管理员更好地跟踪复制状态和延迟情况。通过 SHOW SLAVE STATUS 和 SHOW MASTER STATUS 语句,管理员可以实时监控复制进度。
- 复制延迟和事务执行:MySQL 8.4 对复制延迟的优化使得在高负载下,主主同步的性能不容易受到影响。用户可以通过性能模式工具(如 Performance Schema)进行详细分析。
5. 高可用性和故障恢复
- 增强的高可用性:MySQL 8.4 在高可用性场景下通过优化复制和故障恢复机制,提高了在主主同步配置中的可用性。
- 自动故障转移:通过设置 super_read_only 和 read_only 属性,确保在主主同步过程中,如果某个节点发生故障,另一节点可以迅速接管,保障服务的高可用性。
6. 数据一致性和容错
- 一致性保证:MySQL 8.4 提供更强的数据一致性保证,特别是在使用 GTID 模式时,能够确保各个节点的数据一致性。在主主同步架构中,确保没有数据丢失和数据重复是至关重要的。
- 容错性:MySQL 8.4 提供了更健壮的容错机制,使得即使发生网络延迟或连接问题,复制过程也不会完全中断,从而增加了系统的容错能力。
快速部署8.0和8.4数据库
- 初始化8.0数据库
# 两台服务器安装MySQL8.0数据库(非docker安装)
tar -xf mysql-8.0.x86_64.
yum -y install mysql-community*.rpm
systemctl restart mysqld.service
- 初始化8.4数据库
# 两台服务器安装MySQL8.4数据库
tar -xf mysql-8.4.x86_64.
yum -y install mysql-community*.rpm
systemctl restart mysqld.service
更改root初始密码
- 进入数据库
mysql -uroot -p$(grep password /var/log/mysqld.log | awk '{print $F}')
- 修改root初始密码
alter user root@'localhost' identified by 'you_password';
exit;
配置数据库主主同步
创建同步的库和用户
代码语言:sql复制-- 创建同步的库
CREATE DATABASE new_database
CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;
-- 新建同步的用户
CREATE USER 'replicator'@'%' IDETIFIED BY 'password';
GRAT REPLICATIO SLAVE O *.* TO 'replicator'@'%';
FLUSH PRIVILEGES;
配置主节点 1
- 修改 /etc/myf 文件,添加下面内容
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/myf
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
CHAGE MASTER TO
MASTER_HOST='主节点2的IP',
MASTER_USER='replicator',
MASTER_PASSWORD='password',
MASTER_LOG_FILE='记录的File',
MASTER_LOG_POS=记录的Position;
-- 启动复制
START SLAVE;
- 配置主节点 2 连接主节点 1
CHAGE 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 BIARY LOG STATUS;
/*
mysql> SHOW BIARY 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
-- 此处也会有变化
CHAGE REPLICATIO SOURCE TO
SOURCE_HOST='主节点2的IP',
SOURCE_USER='replicator',
SOURCE_PASSWORD='password',
SOURCE_LOG_FILE='记录的File',
SOURCE_LOG_POS=记录的Position;
-- 启动复制
START REPLICA;
- 配置主节点 2 连接主节点 1
CHAGE REPLICATIO 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数据库的一个分水岭,部分操作会有小小的变化。
- 具体变化请参考文档: .4/en/mysql-nutshell.html
新的同步方式会验证用户名密钥,没有同步密钥会导致同步不成功
#感谢您对电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格的认可,转载请说明来源于"电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格
上一篇:webGL开发框架的技术难点
留言与评论(共有 14 条评论) |
本站网友 南阳租房网 | 5分钟前 发表 |
MASTER_LOG_FILE='记录的File' | |
本站网友 河东租房 | 16分钟前 发表 |
4. 性能监控和优化主主同步性能监控:MySQL 8.4 提供了增强的监控工具 | |
本站网友 乳山新闻 | 11分钟前 发表 |
添加下面内容代码语言:bash复制server-id = 1 log_bin = mysql-bin binlog_do_db = new_database # 设置自增列的增量值 | |
本站网友 客客 | 17分钟前 发表 |
MASTER_LOG_POS=记录的Position; -- 启动复制 START SLAVE;检查复制状态代码语言:sql复制SHOW SLAVE STATUS\G; -- 确保 Slave_IO_Running 和 Slave_SQL_Running 都为 Yes | |
本站网友 天空飘来五个字 | 21分钟前 发表 |
MASTER_LOG_POS=记录的Position; -- 启动复制 START SLAVE;配置主节点 2 连接主节点 1代码语言:sql复制CHAGE MASTER TO MASTER_HOST='主节点1的IP' | |
本站网友 获得性免疫缺陷 | 10分钟前 发表 |
能够更好地诊断同步延迟 | |
本站网友 自助建站软件 | 2分钟前 发表 |
实现MySQL 8.0 与 8.4 主主同步快速部署8.0和8.4数据库初始化8.0数据库代码语言:bash复制# 两台服务器安装MySQL8.0数据库(非docker安装) tar -xf mysql-8.0.x86_64. yum -y install mysql-community*.rpm systemctl restart mysqld.service初始化8.4数据库代码语言:bash复制# 两台服务器安装MySQL8.4数据库 tar -xf mysql-8.4.x86_64. yum -y install mysql-community*.rpm systemctl restart mysqld.service更改root初始密码进入数据库代码语言:bash复制mysql -uroot -p$(grep password /var/log/mysqld.log | awk '{print $F}')修改root初始密码代码语言:sql复制alter user root@'localhost' identified by 'you_password'; exit;配置数据库主主同步创建同步的库和用户代码语言:sql复制-- 创建同步的库 CREATE DATABASE new_database CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- 新建同步的用户 CREATE USER 'replicator'@'%' IDETIFIED BY 'password'; GRAT REPLICATIO SLAVE O *.* TO 'replicator'@'%'; FLUSH PRIVILEGES;配置主节点 1修改 /etc/myf 文件 | |
本站网友 灵魂的台阶 | 9分钟前 发表 |
提高了在主主同步配置中的可用性 | |
本站网友 陆金所登录 | 7分钟前 发表 |
保障服务的高可用性 | |
本站网友 图表制作软件 | 16分钟前 发表 |
总结和答疑8.4 是MySQL数据库的一个分水岭 | |
本站网友 圣导师怎么加点 | 30分钟前 发表 |
管理员可以实时监控复制进度 | |
本站网友 独活的功效与作用 | 17分钟前 发表 |
在 MySQL 8.4 中进行主主同步时 | |
本站网友 清淡去火汤 | 15分钟前 发表 |
GTID 的自动生成和追踪更加精准 |