核心内容摘要
91久久久久:穿越时光的永恒乐章
目录标题MySQL MGR 集群 vs 主备集群对比分析报告
集群基本信息对比
event_scheduler 使用对比
配置值
配置文件位置
使用说明
同步机制异同点
1 相同点
2 差异点
3 MGR 专用配置文件
4 主备集群半同步配置
存储过程、触发器、定时器同步机制
1 同步原理
2 关键配置参数
3 对象同步验证
4 存储过程创建与验证
4.
1 创建存储过程示例
4.
2 验证同步到从节点
4.
3 完整验证检查清单
5 触发器创建与验证
4.
1 创建触发器示例
4.
2 验证同步到从节点
4.
3 触发器验证检查清单
6 定时器 (EVENT) 创建与验证
4.
1 创建定时器示例
4.
2 验证同步到从节点
4.
3 定时器验证检查清单
4.
4 定时器生产环境配置建议
7 完整同步验证流程
总结
节点读写状态对比
1 MGR 集群
2 主备集群
配置、检查方法
总结
1 检查 event_scheduler 状态
2 检查节点角色
3 检查复制状态
4 检查对象同步
5 启用 event_scheduler (仅主节点)
6 永久配置修改
建议与
注意事项
1 event_scheduler 使用建议
2 存储过程/触发器/定时器开发建议
3 监控建议
配置文件路径汇总MySQL MGR 集群 vs 主备集群对比分析报告MySQL 版本:
8.
26
集群基本信息对比对比项MGR 集群 (mysql-65cbddad)主备集群 (mysql-a486e45d)集群策略MGRClusterMySQLRWCluster数据库版本mysql
8.
26-mgrmysql
8.
26节点数量3节点 (1主2备)2节点 (1主1备)部署模式多主模式 (单主写入)传统主从复制
event_scheduler 使用对比
配置值MGR 集群: event_scheduler OFF 主备集群: event_scheduler OFF
配置文件位置# /etc/mysql/my.cnf [mysqld] event_scheduler
使用说明event_scheduler 默认关闭原因:避免自动化任务在多个节点重复执行主备/MGR 集群中事件调度器仅需在主节点/PRIMARY节点运行启用方式:-- 方式1: 动态开启 (仅主节点)SETGLOBALevent_schedulerON;-- 方式2: 在配置文件中开启 (需重启)-- 修改 /etc/mysql/my.cnfevent_scheduler1最佳实践:MGR 集群: 仅在 PRIMARY 节点开启SECONDARY 节点保持关闭主备集群: 仅在 Master 节点开启Slave 节点保持关闭通过应用程序检测节点角色后再开启或由运维手动管理
同步机制异同点
1 相同点配置项MGR 集群主备集群说明binlog_formatROWROW行级复制MGR强制要求gtid_modeONON使用GTID全局事务IDenforce_gtid_consistencyONON强制GTID一致性log_slave_updatesONON从库记录中继日志到binlogbinlog_row_imageFULLFULL记录完整行镜像slave_parallel_typeLOGICAL_CLOCKLOGICAL_CLOCK并行复制类型slave_parallel_workers1616并行复制线程数slave_preserve_commit_orderONON保持事务提交顺序
2 差异点配置MGR 集群主备集群说明复制机制Group ReplicationBinlog半同步复制核心差异group_replication_group_seedsmysql-65cbddad00-headless:33061,…无MGR组成员发现transaction_write_set_extractionXXHASH64XXHASH64写集提取算法半同步复制不使用使用 rpl_semi_sync_master主备专用
3 MGR 专用配置文件文件:/etc/mysql.cnf.d/mgr_group.cnf[mysqld] report_host
245.
0.
201 loose-group_replication_local_address
245.
0.
201:33061 loose-group_replication_group_seedsmysql-65cbddad00-headless:33061,... loose-group_replication_gtid_assignment_block_size
1
4 主备集群半同步配置文件:/etc/mysql/ext.semi.cnf# 半同步复制插件 loose-rpl_semi_sync_master_enabled1 loose-rpl_semi_sync_master_timeout1000 loose-rpl_semi_sync_master_wait_no_slaveOFF loose-rpl_semi_sync_master_wait_for_slave_count1 loose-rpl_semi_sync_master_wait_pointAFTER_SYNC loose-rpl_semi_sync_slave_enabled1
存储过程、触发器、定时器同步机制
1 同步原理对象类型同步机制说明存储过程通过 binlog DDL 语句同步CREATE/ALTER PROCEDURE 记录在binlog触发器通过 binlog DDL 语句同步CREATE TRIGGER 记录在binlog定时器通过 binlog DDL 语句同步CREATE EVENT 记录在binlog执行event_scheduler 控制执行语法自动同步执行需调度器
2 关键配置参数log_bin_trust_function_creatorsMGR 集群: log_bin_trust_function_creators OFF 主备集群: log_bin_trust_function_creators OFF 配置文件中: log_bin_trust_function_creators1 (实际已启用)此参数控制是否信任存储函数创建者OFF: 创建存储函数/触发器需要 SUPER 权限或 DETERMINISTIC/NO SQL 声明ON: 允许创建任意存储函数
3 对象同步验证--
查看存储过程SELECTROUTINE_NAME,ROUTINE_TYPEFROMinformation_schema.ROUTINESWHEREROUTINE_SCHEMAyour_db;--
查看触发器SELECTTRIGGER_NAME,EVENT_MANIPULATIONFROMinformation_schema.TRIGGERSWHERETRIGGER_SCHEMAyour_db;--
查看事件/定时器SELECTEVENT_NAME,STATUS,EXECUTE_ATFROMinformation_schema.EVENTSWHEREEVENT_SCHEMAyour_db;
4 存储过程创建与验证
4.
1 创建存储过程示例-- 在主节点 (PRIMARY/Master) 执行USEtest_db;-- 删除已存在的存储过程幂等性设计DROPPROCEDUREIFEXISTSsp_sample_process;-- 创建存储过程DELIMITER//CREATEPROCEDUREsp_sample_process()DETERMINISTICREADSSQLDATABEGINSELECTCOUNT(*)AStable_countFROMinformation_schema.TABLESWHERETABLE_SCHEMAtest_db;END//DELIMITER;-- 验证创建成功SHOWPROCEDURESTATUSWHEREDbtest_dbANDNamesp_sample_process;
4.
2 验证同步到从节点#
获取 GTID 位置主节点kubectlexec-it -n qfusion-adminprimary-pod-c mysql -- mysql -u root -p -e SELECT GLOBAL.GTID_EXECUTED; #
检查从节点 GTID 是否一致kubectlexec-it -n qfusion-adminsecondary-pod-c mysql -- mysql -u root -p -e SELECT GLOBAL.GTID_EXECUTED; SHOW SLAVE STATUS\G #
在从节点验证存储过程已同步kubectlexec-it -n qfusion-adminsecondary-pod-c mysql -- mysql -u root -p -e SELECT ROUTINE_NAME, ROUTINE_TYPE, CREATED FROM information_schema.ROUTINES WHERE ROUTINE_SCHEMA test_db AND ROUTINE_NAME sp_sample_process; #
查看存储过程定义确认代码一致kubectlexec-it -n qfusion-adminsecondary-pod-c mysql -- mysql -u root -p -e SHOW CREATE PROCEDURE test_db.sp_sample_process\G
4.
3 完整验证检查清单检查项命令预期结果主节点 GTIDSELECT GLOBAL.GTID_EXECUTED;返回 GTID 集合从节点同步状态SHOW SLAVE STATUS\GSeconds_Behind_Master: 0从节点 GTIDSELECT GLOBAL.GTID_EXECUTED;与主节点一致存储过程存在SHOW PROCEDURE STATUS能查到 sp_sample_process存储过程代码SHOW CREATE PROCEDURE代码与主节点一致
5 触发器创建与验证
4.
1 创建触发器示例-- 在主节点 (PRIMARY/Master) 执行USEtest_db;-- 创建测试表DROPTABLEIFEXISTSt_audit_log;CREATETABLEt_audit_log(idBIGINTAUTO_INCREMENTPRIMARYKEY,table_nameVARCHAR(
,actionVARCHAR(
,old_value JSON,new_value JSON,created_atTIMESTAMPDEFAULTCURRENT_TIMESTAMP);DROPTABLEIFEXISTSt_users;CREATETABLEt_users(idINTAUTO_INCREMENTPRIMARYKEY,usernameVARCHAR(
,emailVARCHAR(
,updated_atTIMESTAMPDEFAULTCURRENT_TIMESTAMPONUPDATECURRENT_TIMESTAMP);-- 删除已存在的触发器DROPTRIGGERIFEXISTStr_users_after_update;-- 创建触发器记录更新操作DELIMITER//CREATETRIGGERtr_users_after_updateAFTERUPDATEONt_usersFOR EACH ROWBEGININSERTINTOt_audit_log(table_name,action,old_value,new_value)VALUES(t_users,UPDATE,JSON_OBJECT(id,OLD.id,username,OLD.username,email,OLD.email),JSON_OBJECT(id,NEW.id,username,NEW.username,email,NEW.email));END//DELIMITER;-- 验证创建成功SHOWTRIGGERSLIKEt_users;
4.
2 验证同步到从节点#
在主节点测试触发器kubectlexec-it -n qfusion-adminprimary-pod-c mysql -- mysql -u root -p test_db -e INSERT INTO t_users (username, email) VALUES (user1, user1test.com); UPDATE t_users SET email newemailtest.com WHERE username user1; SELECT * FROM t_audit_log ORDER BY id DESC LIMIT 1; #
检查从节点同步状态kubectlexec-it -n qfusion-adminsecondary-pod-c mysql -- mysql -u root -p -e SHOW SLAVE STATUS\G |grep-ESlave_IO_Running|Slave_SQL_Running|Seconds_Behind_Master#
在从节点验证触发器定义已同步kubectlexec-it -n qfusion-adminsecondary-pod-c mysql -- mysql -u root -p -e SELECT TRIGGER_NAME, EVENT_MANIPULATION, EVENT_OBJECT_TABLE, ACTION_TIMING FROM information_schema.TRIGGERS WHERE TRIGGER_SCHEMA test_db AND TRIGGER_NAME tr_users_after_update; #
查看触发器详细定义kubectlexec-it -n qfusion-adminsecondary-pod-c mysql -- mysql -u root -p -e SHOW CREATE TRIGGER test_db.tr_users_after_update\G #
验证数据已同步注意从节点不会再次执行触发器kubectlexec-it -n qfusion-adminsecondary-pod-c mysql -- mysql -u root -p test_db -e SELECT * FROM t_users; SELECT * FROM t_audit_log;
4.
3 触发器验证检查清单检查项命令预期结果触发器定义同步SHOW TRIGGERS LIKE t_users能查到 tr_users_after_update触发器详情SHOW CREATE TRIGGER定义与主节点一致数据表同步SELECT * FROM t_users数据一致审计日志同步SELECT * FROM t_audit_log主节点执行结果已同步
6 定时器 (EVENT) 创建与验证
4.
1 创建定时器示例-- 在主节点 (PRIMARY/Master) 执行USEtest_db;-- 先启用事件调度器仅主节点SETGLOBALevent_schedulerON;-- 验证调度器已启动SHOWVARIABLESLIKEevent_scheduler;-- 删除已存在的事件DROPEVENTIFEXISTSev_cleanup_old_logs;-- 创建定时清理任务每分钟执行一次DELIMITER//CREATEEVENT ev_cleanup_old_logsONSCHEDULE EVERY1MINUTESTARTSCURRENT_TIMESTAMPDOBEGINDECLARErows_deletedINTDEFAULT0;-- 清理30天前的审计日志DELETEFROMt_audit_logWHEREcreated_atDATE_SUB(NOW(),INTERVAL30DAY)LIMIT1000;SETrows_deletedROW_COUNT();-- 记录执行日志可选INSERTINTOt_audit_log(table_name,action,new_value)VALUES(event_scheduler,cleanup,JSON_OBJECT(deleted_rows,rows_deleted));END//DELIMITER;-- 验证事件创建并查看状态SELECTEVENT_NAME,STATUS,EXECUTE_AT,INTERVAL_VALUE,INTERVAL_FIELDFROMinformation_schema.EVENTSWHEREEVENT_SCHEMAtest_dbANDEVENT_NAMEev_cleanup_old_logs;-- 启用事件默认创建后即启用ALTEREVENT ev_cleanup_old_logsENABLE;
4.
2 验证同步到从节点#
检查从节点事件定义是否同步kubectlexec-it -n qfusion-adminsecondary-pod-c mysql -- mysql -u root -p -e SELECT EVENT_NAME, STATUS, EXECUTE_AT, INTERVAL_VALUE, INTERVAL_FIELD FROM information_schema.EVENTS WHERE EVENT_SCHEMA test_db AND EVENT_NAME ev_cleanup_old_logs; #
验证从节点 event_scheduler 状态应为 OFFkubectlexec-it -n qfusion-adminsecondary-pod-c mysql -- mysql -u root -p -e SELECT event_scheduler; #
查看从节点事件详情kubectlexec-it -n qfusion-adminsecondary-pod-c mysql -- mysql -u root -p -e SHOW CREATE EVENT test_db.ev_cleanup_old_logs\G #
等待1分钟后检查主节点执行结果kubectlexec-it -n qfusion-adminprimary-pod-c mysql -- mysql -u root -p test_db -e SELECT * FROM t_audit_log WHERE table_name event_scheduler ORDER BY created_at DESC LIMIT 5; #
验证从节点数据已同步但事件未在从节点执行kubectlexec-it -n qfusion-adminsecondary-pod-c mysql -- mysql -u root -p test_db -e SELECT * FROM t_audit_log WHERE table_name event_scheduler ORDER BY created_at DESC LIMIT 5;
4.
3 定时器验证检查清单检查项命令预期结果主节点调度器SELECT event_schedulerON从节点调度器SELECT event_schedulerOFF重要事件定义同步SHOW EVENTS能查到 ev_cleanup_old_logs事件状态SELECT * FROM information_schema.EVENTSSTATUSENABLED主节点执行检查 t_audit_log有执行记录从节点数据检查 t_audit_log数据已同步但非本地执行
4.