MySQL 8.4.0 LTS 已经发布 ,作为发版模型变更后的第一个长期支持版本,注定要承担未来生产环境的重任,那么这个版本都有哪些新特性、变更,接下来少安将带大家一起来 get 新知识点。
环境准备
本节内容继续沿用前文的环境,不同的是在前文的基础之上搭建了主从复制。
这里启动两个DB服务来验证复制的相关变更,分别监听3306和3316端口。
[mysql@shawnyan build]$ ./bin/mysql -uroot -h127.1 -P3306 -e 'select @@server_id' -E
*************************** 1. row ***************************
@@server_id: 10
[mysql@shawnyan build]$ ./bin/mysql -uroot -h127.1 -P3316 -e 'select @@server_id' -E
*************************** 1. row ***************************
@@server_id: 11
- 创建复制用户
CREATE USER 'replica' IDENTIFIED BY 'replica';
GRANT REPLICATION SLAVE ON *.* TO 'replica';
FLUSH PRIVILEGES;
- 配置复制源
CHANGE REPLICATION SOURCE TO
SOURCE_HOST = '127.0.0.1',
SOURCE_PORT = 3306,
SOURCE_SSL = 1,
SOURCE_AUTO_POSITION = 1;
- 启动复制
这里为了安全考虑,不推荐将 user/password 信息配置在创建复制源语句,而是在启动复制语句中设定。
START REPLICA USER = 'replica' PASSWORD = 'replica';
- 查看复制状态
mysql> show replica status\G
*************************** 1. row ***************************
Replica_IO_State: Waiting for source to send event
Source_Host: 127.0.0.1
Source_User: replica
Source_Port: 3306
Connect_Retry: 60
Source_Log_File: binlog.000001
Read_Source_Log_Pos: 432
Relay_Log_File: bitdlniu05021-relay-bin.000003
Relay_Log_Pos: 643
Relay_Source_Log_File: binlog.000001
Replica_IO_Running: Yes
Replica_SQL_Running: Yes
Replicate_Do_DB:
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno: 0
Last_Error:
Skip_Counter: 0
Exec_Source_Log_Pos: 432
Relay_Log_Space: 1043
Until_Condition: None
Until_Log_File:
Until_Log_Pos: 0
Source_SSL_Allowed: Yes
Source_SSL_CA_File:
Source_SSL_CA_Path:
Source_SSL_Cert:
Source_SSL_Cipher:
Source_SSL_Key:
Seconds_Behind_Source: 0
Source_SSL_Verify_Server_Cert: No
Last_IO_Errno: 0
Last_IO_Error:
Last_SQL_Errno: 0
Last_SQL_Error:
Replicate_Ignore_Server_Ids:
Source_Server_Id: 10
Source_UUID: 4db16b24-1268-11ef-bc66-00155d098dce
Source_Info_File: mysql.slave_master_info
SQL_Delay: 0
SQL_Remaining_Delay: NULL
Replica_SQL_Running_State: Replica has read all relay log; waiting for more updates
Source_Retry_Count: 10
Source_Bind:
Last_IO_Error_Timestamp:
Last_SQL_Error_Timestamp:
Source_SSL_Crl:
Source_SSL_Crlpath:
Retrieved_Gtid_Set: 4db16b24-1268-11ef-bc66-00155d098dce:1
Executed_Gtid_Set: 4db16b24-1268-11ef-bc66-00155d098dce:1
Auto_Position: 1
Replicate_Rewrite_DB:
Channel_Name:
Source_TLS_Version:
Source_public_key_path:
Get_Source_public_key: 0
Network_Namespace:
1 row in set (0.00 sec)
从 MySQL 8.4.0 LTS 开始,master/slave 见上帝去了,以后都将与 replica 伴舞。
复制 SQL 语句
之前版本的 MySQL 中已弃用的与 MySQL 复制相关的许多功能的语法现已删除,具体清单如下。
Removed | Replacements |
---|---|
START SLAVE | START REPLICA |
STOP SLAVE | STOP REPLICA |
SHOW SLAVE STATUS | SHOW REPLICA STATUS |
SHOW SLAVE HOSTS | SHOW REPLICAS |
RESET SLAVE | RESET REPLICA |
CHANGE MASTER TO | CHANGE REPLICATION SOURCE TO |
RESET MASTER | RESET BINARY LOGS AND GTIDS |
SHOW MASTER STATUS | SHOW BINARY LOG STATUS |
PURGE MASTER LOGS | PURGE BINARY LOGS |
SHOW MASTER LOGS | SHOW BINARY LOGS |
如果继续沿用之前的语法,会直接抛出错误。
mysql> start slave;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'slave' at line 1
SQL 语句选项
CHANGE REPLICATION SOURCE TO
语句的选项,发生了移除、替换变更,清单如下:
Removed | Replacements |
---|---|
MASTER_AUTO_POSITION | SOURCE_AUTO_POSITION |
MASTER_HOST | SOURCE_HOST |
MASTER_BIND | SOURCE_BIND |
MASTER_USER | SOURCE_USER |
MASTER_PASSWORD | SOURCE_PASSWORD |
MASTER_PORT | SOURCE_PORT |
MASTER_CONNECT_RETRY | SOURCE_CONNECT_RETRY |
MASTER_RETRY_COUNT | SOURCE_RETRY_COUNT |
MASTER_DELAY | SOURCE_DELAY |
MASTER_SSL | SOURCE_SSL |
MASTER_SSL_CA | SOURCE_SSL_CA |
MASTER_SSL_CAPATH | SOURCE_SSL_CAPATH |
MASTER_SSL_CIPHER | SOURCE_SSL_CIPHER |
MASTER_SSL_CRL | SOURCE_SSL_CRL |
MASTER_SSL_CRLPATH | SOURCE_SSL_CRLPATH |
MASTER_SSL_KEY | SOURCE_SSL_KEY |
MASTER_SSL_VERIFY_SERVER_CERT | SOURCE_SSL_VERIFY_SERVER_CERT |
MASTER_TLS_VERSION | SOURCE_TLS_VERSION |
MASTER_TLS_CIPHERSUITES | SOURCE_TLS_CIPHERSUITES |
MASTER_SSL_CERT | SOURCE_SSL_CERT |
MASTER_PUBLIC_KEY_PATH | SOURCE_PUBLIC_KEY_PATH |
GET_MASTER_PUBLIC_KEY | GET_SOURCE_PUBLIC_KEY |
MASTER_HEARTBEAT_PERIOD | SOURCE_HEARTBEAT_PERIOD |
MASTER_COMPRESSION_ALGORITHMS | SOURCE_COMPRESSION_ALGORITHMS |
MASTER_ZSTD_COMPRESSION_LEVEL | SOURCE_ZSTD_COMPRESSION_LEVEL |
MASTER_LOG_FILE | SOURCE_LOG_FILE |
MASTER_LOG_POS | SOURCE_LOG_POS |
系统状态变量
MySQL 服务器中的多个系统状态变量也发生了变更,具体清单如下。
Removed | Replacements |
---|---|
Com_slave_start | Com_replica_start |
Com_slave_stop | Com_replica_stop |
Com_show_slave_status | Com_show_replica_status |
Com_show_slave_hosts | Com_show_replicas |
Com_show_master_status | Com_show_binary_log_status |
Com_change_master | Com_change_replication_source |
组复制
1. group_replication_allow_local_lower_version_join 系统变量弃用
group_replication_allow_local_lower_version_join 是 5.7.17 引入的系统变量,表示当前服务器的插件版本比组的插件版本低时也允许加入组。
从 8.4.0 开始被弃用,如果更改值将会抛出如下警告。
mysql> set global group_replication_allow_local_lower_version_join = 1;
Query OK, 0 rows affected, 1 warning (0.00 sec)
Warning (Code 1681): 'group_replication_allow_local_lower_version_join' is deprecated and will be removed in a future release.
2. group_replication_recovery_complete_at 系统变量被移除
group_replication_allow_local_lower_version_join 是 5.7.17 引入的系统变量,表示状态传输后处理缓存中的事务时的恢复策略。在 8.0.34 中被废弃。
从此版本开始,分布式恢复过程中应用的策略始终是仅在新成员收到、认证并应用其加入组之前发生的所有事务后才将其标记为在线; 这相当于在以前版本的 MySQL 中将 group_replication_recovery_complete_at 设置为 TRANSACTIONS_APPLIED。
3. 系统变量默认值变更
- group_replication_consistency 系统变量的默认值现在是 BEFORE_ON_PRIMARY_FAILOVER ; 以前是 EVENTUAL 。
在组复制单主模式下,设定为 BEFORE_ON_PRIMARY_FAILOVER 时,新主有未应用的backlog时,客户端的请求会等到,直到应用为止,以此确保事务一致性。
- group_replication_exit_state_action 系统变量的默认值现在是 OFFLINE_MODE 。
该变量在 8.0.16 及以上版本的默认值为 READ_ONLY,从 8.0.18 增加 OFFLINE_MODE 选项。
如果成员无意中退出组或用尽自动重新加入尝试,实例会将 MySQL 切换到离线模式。在此模式下,已连接的客户端用户在下一个请求时将断开连接,并且不再接受连接,具有 CONNECTION_ADMIN 权限(或已弃用的 SUPER 权限)的客户端用户除外。
版本升级
这里有几点升级的注意事项或建议,以供参考。
-
MySQL 5.7 不支持直接升级到 MySQL 8.4,需要先升级到 MySQL 8.0 再过渡到 8.4。
-
MySQL 8.4 移除了对 8.0 早期版本的一些特殊处理,建议在升级到 8.4 之前,先升级到 8.0 最新版本。
-
当前 MySQL 8.0 系列的最新版本为 MySQL 8.0.37
总结
本章节我们介绍了编译 MySQL 8.4.0 LTS 源码需要注意几点变更,以及连接数据库时认证插件发生的变化。
下一节我们继续介绍其他新特性,欢迎关注本专栏。
往期精彩
- MySQL 8.4.0 LTS 发布 (MySQL 第一个长期支持版本)
- MySQL 8.4.0 LTS 变更解析: 源码编译(类库变更)和密码插件
- Oracle 数据库全面升级为 23ai
- python-oracledb 已率先支持 Oracle 23ai
- 一文带你了解 Oracle 23ai 新特性 Vector 的基础用法
- SOP for Oracle 23ai:Python 连接 Oracle 的两种方法
– END –
如果这篇文章为你带来了灵感或启发,就请帮忙点『赞』or『在看』or『转发』吧,感谢!(๑˃̵ᴗ˂̵)