爱站网工具阜阳做网站多少钱
2026/5/21 13:38:46 网站建设 项目流程
爱站网工具,阜阳做网站多少钱,纸箱 技术支持 东莞网站建设,学设计软件的app有哪些目录标题 MySQL MGR 集群 vs 主备集群对比分析报告一、集群基本信息对比二、event_scheduler 使用对比1. 配置值2. 配置文件位置3. 使用说明 三、同步机制异同点3.1 相同点3.2 差异点3.3 MGR 专用配置文件3.4 主备集群半同步配置 四、存储过程、触发器、定时器同步机制4.1 同步…目录标题MySQL MGR 集群 vs 主备集群对比分析报告一、集群基本信息对比二、event_scheduler 使用对比1. 配置值2. 配置文件位置3. 使用说明三、同步机制异同点3.1 相同点3.2 差异点3.3 MGR 专用配置文件3.4 主备集群半同步配置四、存储过程、触发器、定时器同步机制4.1 同步原理4.2 关键配置参数4.3 对象同步验证4.4 存储过程创建与验证4.4.1 创建存储过程示例4.4.2 验证同步到从节点4.4.3 完整验证检查清单4.5 触发器创建与验证4.5.1 创建触发器示例4.5.2 验证同步到从节点4.5.3 触发器验证检查清单4.6 定时器 (EVENT) 创建与验证4.6.1 创建定时器示例4.6.2 验证同步到从节点4.6.3 定时器验证检查清单4.6.4 定时器生产环境配置建议4.7 完整同步验证流程总结五、节点读写状态对比5.1 MGR 集群5.2 主备集群六、配置、检查方法总结6.1 检查 event_scheduler 状态6.2 检查节点角色6.3 检查复制状态6.4 检查对象同步6.5 启用 event_scheduler (仅主节点)6.6 永久配置修改七、建议与注意事项7.1 event_scheduler 使用建议7.2 存储过程/触发器/定时器开发建议7.3 监控建议八、配置文件路径汇总MySQL MGR 集群 vs 主备集群对比分析报告MySQL 版本: 8.0.26一、集群基本信息对比对比项MGR 集群 (mysql-65cbddad)主备集群 (mysql-a486e45d)集群策略MGRClusterMySQLRWCluster数据库版本mysql8.0.26-mgrmysql8.0.26节点数量3节点 (1主2备)2节点 (1主1备)部署模式多主模式 (单主写入)传统主从复制二、event_scheduler 使用对比1. 配置值MGR 集群: event_scheduler OFF 主备集群: event_scheduler OFF2. 配置文件位置# /etc/mysql/my.cnf [mysqld] event_scheduler03. 使用说明event_scheduler 默认关闭原因:避免自动化任务在多个节点重复执行主备/MGR 集群中事件调度器仅需在主节点/PRIMARY节点运行启用方式:-- 方式1: 动态开启 (仅主节点)SETGLOBALevent_schedulerON;-- 方式2: 在配置文件中开启 (需重启)-- 修改 /etc/mysql/my.cnfevent_scheduler1最佳实践:MGR 集群: 仅在 PRIMARY 节点开启SECONDARY 节点保持关闭主备集群: 仅在 Master 节点开启Slave 节点保持关闭通过应用程序检测节点角色后再开启或由运维手动管理三、同步机制异同点3.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保持事务提交顺序3.2 差异点配置MGR 集群主备集群说明复制机制Group ReplicationBinlog半同步复制核心差异group_replication_group_seedsmysql-65cbddad00-headless:33061,…无MGR组成员发现transaction_write_set_extractionXXHASH64XXHASH64写集提取算法半同步复制不使用使用 rpl_semi_sync_master主备专用3.3 MGR 专用配置文件文件:/etc/mysql.cnf.d/mgr_group.cnf[mysqld] report_host245.0.4.201 loose-group_replication_local_address245.0.4.201:33061 loose-group_replication_group_seedsmysql-65cbddad00-headless:33061,... loose-group_replication_gtid_assignment_block_size13.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四、存储过程、触发器、定时器同步机制4.1 同步原理对象类型同步机制说明存储过程通过 binlog DDL 语句同步CREATE/ALTER PROCEDURE 记录在binlog触发器通过 binlog DDL 语句同步CREATE TRIGGER 记录在binlog定时器通过 binlog DDL 语句同步CREATE EVENT 记录在binlog执行event_scheduler 控制执行语法自动同步执行需调度器4.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: 允许创建任意存储函数4.3 对象同步验证-- 1. 查看存储过程SELECTROUTINE_NAME,ROUTINE_TYPEFROMinformation_schema.ROUTINESWHEREROUTINE_SCHEMAyour_db;-- 2. 查看触发器SELECTTRIGGER_NAME,EVENT_MANIPULATIONFROMinformation_schema.TRIGGERSWHERETRIGGER_SCHEMAyour_db;-- 3. 查看事件/定时器SELECTEVENT_NAME,STATUS,EXECUTE_ATFROMinformation_schema.EVENTSWHEREEVENT_SCHEMAyour_db;4.4 存储过程创建与验证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.4.2 验证同步到从节点# 1. 获取 GTID 位置主节点kubectlexec-it -n qfusion-adminprimary-pod-c mysql -- mysql -u root -p -e SELECT GLOBAL.GTID_EXECUTED; # 2. 检查从节点 GTID 是否一致kubectlexec-it -n qfusion-adminsecondary-pod-c mysql -- mysql -u root -p -e SELECT GLOBAL.GTID_EXECUTED; SHOW SLAVE STATUS\G # 3. 在从节点验证存储过程已同步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; # 4. 查看存储过程定义确认代码一致kubectlexec-it -n qfusion-adminsecondary-pod-c mysql -- mysql -u root -p -e SHOW CREATE PROCEDURE test_db.sp_sample_process\G 4.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代码与主节点一致4.5 触发器创建与验证4.5.1 创建触发器示例-- 在主节点 (PRIMARY/Master) 执行USEtest_db;-- 创建测试表DROPTABLEIFEXISTSt_audit_log;CREATETABLEt_audit_log(idBIGINTAUTO_INCREMENTPRIMARYKEY,table_nameVARCHAR(64),actionVARCHAR(16),old_value JSON,new_value JSON,created_atTIMESTAMPDEFAULTCURRENT_TIMESTAMP);DROPTABLEIFEXISTSt_users;CREATETABLEt_users(idINTAUTO_INCREMENTPRIMARYKEY,usernameVARCHAR(50),emailVARCHAR(100),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.5.2 验证同步到从节点# 1. 在主节点测试触发器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; # 2. 检查从节点同步状态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# 3. 在从节点验证触发器定义已同步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; # 4. 查看触发器详细定义kubectlexec-it -n qfusion-adminsecondary-pod-c mysql -- mysql -u root -p -e SHOW CREATE TRIGGER test_db.tr_users_after_update\G # 5. 验证数据已同步注意从节点不会再次执行触发器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.5.3 触发器验证检查清单检查项命令预期结果触发器定义同步SHOW TRIGGERS LIKE t_users能查到 tr_users_after_update触发器详情SHOW CREATE TRIGGER定义与主节点一致数据表同步SELECT * FROM t_users数据一致审计日志同步SELECT * FROM t_audit_log主节点执行结果已同步4.6 定时器 (EVENT) 创建与验证4.6.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.6.2 验证同步到从节点# 1. 检查从节点事件定义是否同步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; # 2. 验证从节点 event_scheduler 状态应为 OFFkubectlexec-it -n qfusion-adminsecondary-pod-c mysql -- mysql -u root -p -e SELECT event_scheduler; # 3. 查看从节点事件详情kubectlexec-it -n qfusion-adminsecondary-pod-c mysql -- mysql -u root -p -e SHOW CREATE EVENT test_db.ev_cleanup_old_logs\G # 4. 等待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; # 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.6.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.6.4 定时器生产环境配置建议-- 生产环境建每天凌晨2点执行DROPEVENTIFEXISTSev_cleanup_old_logs;DELIMITER//CREATEEVENT ev_cleanup_old_logsONSCHEDULE EVERY1DAYSTARTS CONCAT(CURDATE()INTERVAL1DAY, 02:00:00)ONCOMPLETION PRESERVEDOBEGINDELETEFROMt_audit_logWHEREcreated_atDATE_SUB(NOW(),INTERVAL90DAY)LIMIT10000;END//DELIMITER;-- 查看所有事件状态SELECTEVENT_NAME,STATUS,LAST_EXECUTED,ON_COMPLETION,INTERVAL_VALUE,INTERVAL_FIELDFROMinformation_schema.EVENTSWHEREEVENT_SCHEMAtest_db;4.7 完整同步验证流程总结#!/bin/bash# 完整的对象同步验证脚本NAMESPACEqfusion-adminPRIMARY_PODprimary-pod-nameSECONDARY_PODsecondary-pod-nameDB_USERrootDB_PASSpasswordDB_NAMEtest_dbecho 1. 检查复制状态 kubectlexec-it -n$NAMESPACE$SECONDARY_POD-c mysql -- mysql -u$DB_USER-p$DB_PASS-e SHOW SLAVE STATUS\G |grep-ESlave_IO_Running|Slave_SQL_Running|Seconds_Behind_Master|Last_Errorecho-e\n 2. 验证存储过程同步 kubectlexec-it -n$NAMESPACE$SECONDARY_POD-c mysql -- mysql -u$DB_USER-p$DB_PASS-e SELECT ROUTINE_NAME, CREATED FROM information_schema.ROUTINES WHERE ROUTINE_SCHEMA $DB_NAME; echo-e\n 3. 验证触发器同步 kubectlexec-it -n$NAMESPACE$SECONDARY_POD-c mysql -- mysql -u$DB_USER-p$DB_PASS-e SELECT TRIGGER_NAME, EVENT_OBJECT_TABLE FROM information_schema.TRIGGERS WHERE TRIGGER_SCHEMA $DB_NAME; echo-e\n 4. 验证定时器同步 kubectlexec-it -n$NAMESPACE$SECONDARY_POD-c mysql -- mysql -u$DB_USER-p$DB_PASS-e SELECT EVENT_NAME, STATUS, LAST_EXECUTED FROM information_schema.EVENTS WHERE EVENT_SCHEMA $DB_NAME; echo-e\n 5. 验证 GTID 一致性 echo主节点 GTID:kubectlexec-it -n$NAMESPACE$PRIMARY_POD-c mysql -- mysql -u$DB_USER-p$DB_PASS-e SELECT GLOBAL.GTID_EXECUTED; echo从节点 GTID:kubectlexec-it -n$NAMESPACE$SECONDARY_POD-c mysql -- mysql -u$DB_USER-p$DB_PASS-e SELECT GLOBAL.GTID_EXECUTED; echo-e\n 6. 检查 event_scheduler 状态 echo主节点:kubectlexec-it -n$NAMESPACE$PRIMARY_POD-c mysql -- mysql -u$DB_USER-p$DB_PASS-e SELECT event_scheduler; echo从节点:kubectlexec-it -n$NAMESPACE$SECONDARY_POD-c mysql -- mysql -u$DB_USER-p$DB_PASS-e SELECT event_scheduler; 五、节点读写状态对比5.1 MGR 集群节点角色super_read_onlyread_only说明mysql-65cbddad00-0PRIMARY00可读写mysql-65cbddad01-0SECONDARY11只读mysql-65cbddad02-0SECONDARY11只读5.2 主备集群节点角色super_read_onlyread_only说明mysql-a486e45d00-0Master00可读写mysql-a486e45d01-0Slave10只读注意:主备集群的 Slave 节点read_only1由配置文件/etc/mysql/ext.semi.cnf设置。六、配置、检查方法总结6.1 检查 event_scheduler 状态SHOWVARIABLESLIKEevent_scheduler;-- 或SELECTevent_scheduler;6.2 检查节点角色-- MGR 集群SELECTMEMBER_HOST,MEMBER_PORT,MEMBER_STATE,MEMBER_ROLEFROMperformance_schema.replication_group_members;-- 主备集群SHOWSLAVESTATUS\G6.3 检查复制状态-- MGR 集群SHOWVARIABLESLIKEgroup_replication%;-- 主备集群SHOWSLAVESTATUS\GSHOWMASTERSTATUS;6.4 检查对象同步-- 检查 GTID 执行情况SHOWVARIABLESLIKEgtid%;SELECTGLOBAL.GTID_EXECUTED;-- 检查 binlog 位置SHOWMASTERSTATUS;6.5 启用 event_scheduler (仅主节点)-- MGR 集群 - 在 PRIMARY 节点执行SETGLOBALevent_schedulerON;-- 主备集群 - 在 Master 节点执行SETGLOBALevent_schedulerON;6.6 永久配置修改# 编辑配置文件kubectlexec-it -n qfusion-adminpod-name-c mysql --vi/etc/mysql/my.cnf# 修改 event_scheduler0 为 event_scheduler1# 然后重启 Podkubectl delete pod -n qfusion-adminpod-name七、建议与注意事项7.1 event_scheduler 使用建议默认保持关闭: 集群默认配置为关闭是合理的按需启用: 仅在需要执行定时任务的节点上手动启用单点执行: 避免多节点同时执行相同任务应用层控制: 建议在应用层检测节点角色后再启用7.2 存储过程/触发器/定时器开发建议幂等性设计: 确保对象可以被重复创建而不报错DROPPROCEDUREIFEXISTSproc_name;CREATEPROCEDUREproc_name()...声明确定性: 函数应声明 DETERMINISTIC 或 NO SQLCREATEFUNCTIONfunc_name()RETURNSINTDETERMINISTICREADSSQLDATABEGIN...避免不确定性操作: 不使用 RAND(), UUID(), NOW() 等不确定函数7.3 监控建议-- 监控 MGR 状态SELECT*FROMperformance_schema.replication_group_member_stats;-- 监控主备延迟SHOWSLAVESTATUS\G-- 关注: Seconds_Behind_Master-- 监控事件执行SELECT*FROMinformation_schema.EVENTS;八、配置文件路径汇总文件MGR 集群主备集群主配置/etc/mysql/my.cnf/etc/mysql/my.cnf只读配置/etc/mysql/my.ro.cnf/etc/mysql/my.ro.cnfMGR配置/etc/mysql.cnf.d/mgr_group.cnf无半同步配置无/etc/mysql/ext.semi.cnf动态配置/etc/mysql.cnf.d/config_option.cnf同左扩展配置/etc/mysql.cnf.d/mysql-expand.conf同左

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询