ToB企服应用市场:ToB评测及商务社交产业平台

标题: 数据库同步革命:MySQL GTID模式下主从配置的全面剖析 [打印本页]

作者: 去皮卡多    时间: 2024-7-14 14:43
标题: 数据库同步革命:MySQL GTID模式下主从配置的全面剖析

   欢迎来到我的博客,代码的世界里,每一行都是一个故事  



  
前言

在数据库的世界里,同步是一场永恒的舞蹈,而MySQL GTID模式就像是这场舞蹈中的舞者,可以或许带领我们跳出传统的舞步,进入全新的田地。而今天,就让我们一起来揭开MySQL GTID模式下主从配置的秘密面纱,探索它的魅力所在吧!
GTID模式简介

GTID,全称为全局事务标识(Global Transaction ID),是MySQL数据库中用于唯一标识每个事务的一种机制。在GTID模式下,每个事务都会被分配一个唯一的全局标识符,由服务器生成和维护,以标识该事务在整个数据库集群中的唯一位置。GTID通常由两个部门组成:服务器唯一标识符和事务序列号。
优势:
对主从复制的影响和改进:
总的来说,GTID模式简化了主从复制的管理和维护,并提高了数据划一性和故障切换的效率和可靠性,使得数据库集群的管理更加容易和可靠。
常用配置参数

  1. [mysqld]
  2. # 设置服务器唯一标识符,每个服务器必须有唯一的ID
  3. server-id = 1  
  4. # 启用二进制日志,用于主从复制
  5. log-bin = mysql-bin  
  6. # 确保从服务器也会记录二进制日志
  7. log-slave-updates = 1  
  8. # 启用GTID模式,全局事务标识符将被用于唯一标识每个事务
  9. gtid-mode = ON  
  10. # 强制GTID一致性,防止非GTID事务的复制
  11. enforce-gtid-consistency = ON  
  12. # 如果主服务器启用了gtid-executed参数记录了当前的GTID集合,则它会被用于从服务器初始化的时候自动配置
  13. # 在从服务器初始化时,使用CHANGE MASTER TO ... MASTER_AUTO_POSITION = 1可以自动获取主服务器的GTID集合
  14. # master_info_repository和relay_log_info_repository必须设置为TABLE,以确保GTID复制的正确性
  15. gtid-executed = COMPRESSION_AUTO, ENCRYPTION_OFF  
  16. # 如果从服务器初始化时自动配置,则设置为ON,否则设置为OFF
  17. # 如果不需要使用从服务器自动获取GTID集合,请将此参数设置为OFF
  18. # 如果master_info_repository和relay_log_info_repository都设置为TABLE,这个参数将被自动设置为ON
  19. slave_preserve_commit_order = ON  
  20. # 定义二进制日志的文件名前缀,与log-bin参数一起使用
  21. binlog_format = ROW  
  22. # 如果slave-sql-verify-checksum=1并且gtid-mode=ON,GTID位置信息的存储(当使用TABLE选项时)将包括校验和
  23. slave-sql-verify-checksum = 1  
  24. # 设置二进制日志的缓存大小,影响二进制日志的写入性能
  25. binlog_cache_size = 1M  
  26. # 设置二进制日志的最大大小,当二进制日志达到这个大小后会自动滚动并创建新的日志文件
  27. max_binlog_size = 100M  
  28. # 设置主服务器和从服务器之间的超时时间,单位为秒
  29. # 如果主服务器在此时间内未发送任何数据,从服务器会认为主服务器已经失效并重新尝试连接
  30. # 这个值应该根据网络和负载情况进行调整
  31. master-info-repository = TABLE
  32. relay-log-info-repository = TABLE
  33. relay-log-recovery = 1  
  34. # 如果不需要从服务器自动获取GTID集合,请将此参数设置为OFF
  35. # 设置为ON时,从服务器会自动从主服务器获取GTID集合,否则需要手动指定GTID集合
  36. # 设置为OFF时,必须在CHANGE MASTER TO ... MASTER_AUTO_POSITION = 0的情况下使用
  37. # 在master_info_repository和relay_log_info_repository设置为TABLE的情况下,此参数将自动设置为ON
  38. # master_info_repository和relay_log_info_repository必须设置为TABLE,以确保GTID复制的正确性
  39. # 设置主服务器和从服务器之间的超时时间,单位为秒
  40. # 如果主服务器在此时间内未发送任何数据,从服务器会认为主服务器已经失效并重新尝试连接
  41. # 这个值应该根据网络和负载情况进行调整
  42. slave_net_timeout = 60  
  43. # 限制主服务器发出的二进制日志数据的速率
  44. # 如果主服务器的写入速率过快,从服务器可能无法跟上复制进程,导致延迟
  45. # 通过限制主服务器的写入速率,可以减轻从服务器的负载压力
  46. max-binlog-transaction-size = 1073741824  
  47. # 设置binlog文件的过期时间,过期后的binlog文件将被自动删除
  48. # 可以避免磁盘空间被过多的binlog文件占用
  49. expire_logs_days = 7  
  50. # 设置复制线程在从服务器上重新连接主服务器之前等待的时间
  51. # 如果从服务器与主服务器之间的连接断开,复制线程将等待这段时间然后尝试重新连接
  52. # 这个值应该根据网络和负载情况进行调整
  53. master-connect-retry = 60  
  54. # 定义复制过滤规则,用于过滤不需要复制的数据库或表
  55. # 在此处可以定义需要排除的数据库或表,以避免复制不必要的数据
  56. replicate-ignore-db = mysql
  57. replicate-ignore-db = test
  58. replicate-ignore-table = mysql.user
  59. replicate-ignore-table = mysql.help_category
  60. # 设置主服务器的字符集,确保与从服务器的字符集一致
  61. character-set-server = utf8mb4
  62. collation-server = utf8mb4_unicode_ci
  63. # 设置SQL模式,确保与从服务器的SQL模式一致,以避免由于不同的SQL模式导致的数据不一致性
  64. sql-mode = "STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION"
  65. # 设置innodb_flush_log_at_trx_commit参数,控制事务提交时日志刷新的时机
  66. # 设置为2时,表示每次事务提交时只将日志写入日志文件而不进行刷新,可以提高性能
  67. innodb_flush_log_at_trx_commit = 2
  68. # 设置innodb_file_per_table参数,每个InnoDB表都使用独立的表空间文件
  69. # 可以提高性能和管理性
  70. innodb_file_per_table = 1
  71. # 设置innodb_buffer_pool_size参数,指定InnoDB缓冲池的大小
  72. # 可以提高InnoDB存储引擎的性能
  73. innodb_buffer_pool_size = 512M
  74. # 设置innodb_flush_method参数,指定InnoDB刷新日志和数据文件的方法
  75. # 设置为O_DIRECT可以减少I/O操作,提高性能
  76. innodb_flush_method = O_DIRECT
  77. # 设置innodb_log_file_size参数,指定InnoDB日志文件的大小
  78. # 较大的日志文件大小可以提高性能,但也会增加恢复时间
  79. innodb_log_file_size = 256M
  80. # 设置innodb_log_buffer_size参数,指定InnoDB日志缓冲区的大小
  81. # 较大的缓冲区可以提高性能,但也会增加内存使用量
  82. innodb_log_buffer_size = 8M
  83. # 设置innodb_autoinc_lock_mode参数,控制InnoDB自增锁的行为
  84. # 设置为2时,表示采用交错自增锁,可以提高性能
  85. innodb_autoinc_lock_mode = 2
  86. # 设置innodb_flush_neighbors参数,指定InnoDB是否在写入数据时使用邻居页刷新策略
  87. # 设置为0时,表示禁用邻居页刷新,可以提高性能
  88. innodb_flush_neighbors = 0
  89. # 设置innodb_io_capacity参数,指定InnoDB每秒可以处理的I/O操作数
  90. # 可以根据系统性能和I/O负载进行调整
  91. innodb_io_capacity = 2000
  92. # 设置innodb_io_capacity_max参数,指定InnoDB每秒最大可以处理的I/O操作数
  93. # 可以根据系统性能和I/O负载进行调整
  94. innodb_io_capacity_max = 4000
复制代码
GTID复制监控与管理

监控和管理GTID复制的状态和耽误是确保数据库系统稳定运行的告急任务。以下是一些系统工具和方法,可以帮助您监控和管理GTID复制:
1. 监控GTID复制状态和耽误

MySQL内置状态查询:


外部监控工具:


2. 管理GTID复制的故障和异常情况

自动化故障恢复:


手动故障恢复:


故障恢复计谋:


3. 预防措施

定期备份数据:


定期维护:


监控系统性能:


GTID模式的优势与应用

GTID模式在实际项目中具有很多优势,并且实用于各种场景和最佳实践。以下是一些常见的GTID模式应用案例:
1. 主从复制管理

场景:


最佳实践:


2. 数据库迁移和升级

场景:


最佳实践:


3. 备份和恢复管理

场景:


最佳实践:


4. 复制监控和故障切换

场景:


最佳实践:


GTID模式在实际项目中的应用场景和最佳实践取决于具体的业务需求和系统架构,但总的来说,GTID模式可以简化数据库管理和维护,并提高数据库系统的可用性、可靠性和可维护性。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4