本文部署的MySQL Group Replication (MGR) 集群采用最小化三节点:db01、db02和db03。其中db01作为主节点,具有读写权限,db02和db03作为从节点,仅为只读。所有写操作须通过db01节点执行,当db01节点发生故障(宕机或不可达)时,MGR集群将自动触发故障转移流程,系统将从db02和db03中选举出一个新的主节点,新主节点将自动获得读写权限,接管所有写入操作,另一个节点继续保持只读模式。
MySQL部署基于wlnmp一键安装包(https://www.wlnmp.com/)提供的预编译包部署MySQL 8.4.6,并通过MySQL my.cnf配置文件生成器(https://dbcnf.wlnmp.com/)生成优化配置。将搭建三节点MySQL Group Replication(MGR)单主模式集群,具体环境如下:
操作系统:AlmaLinux 8.10
服务器配置:4核CPU/8GB内存
节点信息:主节点db01 (10.10.10.5) ,从节点db02 (10.10.10.6) ,从节点db03 (10.10.10.7)
1、分别配置主机名
1 2 3 |
hostnamectl set-hostname db01 hostnamectl set-hostname db02 hostnamectl set-hostname db03 |
2、分别配置hosts
1 2 3 4 |
vi /etc/hosts 10.10.10.5 db01 10.10.10.6 db02 10.10.10.7 db03 |
3、分别添加wlnmp源
1 |
curl -fsSL "https://sh.wlnmp.com/wlnmp.sh" | bash |
4、分别安装mysql8.4
1 |
dnf install wmysql84 -y |
5、生成my.cnf配置文件
访问MySQL my.cnf配置文件生成器(https://dbcnf.wlnmp.com/),选择MySQL8.4版本生成配置文件,生成3份,分别配置到3台MySQL server中。
注1:如果你是通过wlnmp安装的MySQL,这里仅需要填写CPU、内存以及开启主从,填写相关IP地址即可,其他参数可结合实际情况自行调整。
注2:确保三台MySQL server组复制group_replication_group_name标识ID一致。
注3:确保组复制通信的本地监听地址为本机,所有MySQL的group_replication_local_address参数值为本机地址。
注4:server_id不能相同,我这里主节点db01是5,从节点db02是6,从节点db03是7。
下面是生成后的my.cnf文件(https://dbcnf.wlnmp.com/随时更新,可能会出现一些参数与当前的参数不一致情况)
主节点db01配置文件如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 |
# #author:whsir(https://www.whsir.com/,QQ群630368975,公众号:吴昊博客) #免责声明:MySQL配置生成器所生成的my.cnf配置文件仅供参考。用户需结合自身的实际情况进行调整和优化。本工具及其作者不对因使用该配置文件而引起的任何问题、损失或损害承担任何责任。使用者需自行承担使用该配置文件的风险,并在必要时寻求专业意见。 #my.cnf for MySQL 8.4 # [client] port = 3306 socket = /tmp/mysql.sock [mysqld] user = mysql port = 3306 socket = /tmp/mysql.sock pid_file = /data/mysql/mysql.pid basedir = /usr/local/mysql/ datadir = /data/mysql/ default_time_zone = +08:00 character_set_server = UTF8MB4 log_timestamps = system skip_name_resolve = ON mysqlx_port = 33060 mysqlx = OFF # =================== 慢日志配置开始 =================== # 慢日志是否开启,ON=开启,OFF=关闭。 slow_query_log = OFF # 慢查询时间(秒)。 long_query_time = 3 # 慢日志文件路径。 slow_query_log_file = /data/mysql/mysql_slow_query.log # 从库慢日志是否开启(主库无需理会),ON=开启,OFF=关闭。 log_slow_replica_statements = OFF # 记录(ALTER TABLE、ANALYZE TABLE等)到慢查询日志中,ON=开启,OFF=关闭。 log_slow_admin_statements = OFF # 记录所有未带索引的查询到慢日志中,ON=开启,OFF=关闭。 log_queries_not_using_indexes = OFF # 限制所有未带索引的查询记录频率(每分钟条数)。 log_throttle_queries_not_using_indexes = 0 # 超过多少行的查询才会被记录到慢日志中。 min_examined_row_limit = 0 # =================== 慢日志配置结束 =================== log_slow_extra = OFF log_error_verbosity = 1 log_error_suppression_list = "" lock_wait_timeout = 3600 # MySQL错误日志文件路径 log_error = /data/mysql/error.log skip-external-locking max_allowed_packet = 16M table_open_cache = 1024 table_definition_cache = 1024 sort_buffer_size = 4M join_buffer_size = 4M net_buffer_length = 8K read_buffer_size = 1M read_rnd_buffer_size = 512K thread_cache_size = 200 bulk_insert_buffer_size = 8M tmp_table_size = 32M performance_schema_max_table_instances = 500 thread_stack = 512K interactive_timeout = 28800 wait_timeout = 28800 max_heap_table_size = 32M lower_case_table_names = 0 explicit_defaults_for_timestamp = true #skip-networking #bind-address = 127.0.0.1 max_connections = 500 max_connect_errors = 10000 open_files_limit = 65535 sql_mode = 'ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION' # binlog log_bin = mysql-bin binlog_format = ROW server_id = 101 binlog_checksum = CRC32 binlog_expire_logs_seconds = 86400 max_binlog_cache_size = 128M max_binlog_size = 1G binlog_cache_size = 2M gtid_mode = ON # GTID一致性是否启用(ON=强制一致性,WARN=仅警告,OFF=不检查) enforce_gtid_consistency = ON # 启用后从库会将复制事件写入自身二进制日志。 log_replica_updates = ON # 应尽可能的不要使用mysql_native_password,未来在MySQL9.0版本中将被彻底删除。 mysql_native_password = ON # ==================== MGR配置开始 ===================== # 开启MGR时,必须使用InnoDB引擎,关闭其它存储引擎 disabled_storage_engines = "MyISAM,BLACKHOLE,FEDERATED,ARCHIVE,MEMORY" # 组复制集群的唯一标识(必须全局唯一,可使用uuidgen命令或MySQL的select uuid();生成) # 警告:同一集群的所有节点必须使用相同的group_name! group_replication_group_name = 83d4df8d-c92f-4b1a-b3b0-2afcc8f2890f # 插件加载 # MySQL从8.0.17版本引入克隆插件 plugin-load-add = mysql_clone.so # MySQL从5.7.17版本引入组复制插件 plugin-load-add = group_replication.so # 运行模式 # ON=单主模式(推荐),OFF=多主模式 group_replication_single_primary_mode = ON # 是否随MySQL服务启动自动开启MGR(建议OFF,避免启动顺序问题导致脑裂) group_replication_start_on_boot = OFF # 节点通信配置 # 组复制成员间通信的本地监听地址(格式:host:port) group_replication_local_address = 10.10.10.5:33061 # 组复制成员间通信的地址列表(格式:host1:port1,host2:port2,host3:port3...) group_replication_group_seeds = db01:33061,db02:33061,db03:33061 # 组复制集群的IP地址白名单(支持CIDR格式,如:192.168.1.0/24,10.0.0.1) group_replication_ip_allowlist = 10.10.10.5,10.10.10.6,10.10.10.7 # 组复制严格一致性检查开关,OFF=禁用,不检查 group_replication_enforce_update_everywhere_checks = OFF # 组复制引导开关,仅首次启动时通过SET GLOBAL临时启用(SET GLOBAL group_replication_bootstrap_group=ON;),正常运行时必须设为OFF group_replication_bootstrap_group = OFF # ==================== MGR配置结束 ===================== # innodb transaction_isolation = REPEATABLE-READ default_storage_engine = InnoDB innodb_buffer_pool_instances = 4 innodb_file_per_table = 1 innodb_data_home_dir = /data/mysql/ innodb_data_file_path = ibdata1:64M:autoextend innodb_log_group_home_dir = /data/mysql/ innodb_buffer_pool_size = 5G innodb_redo_log_capacity = 256M innodb_log_buffer_size = 16M innodb_flush_log_at_trx_commit = 1 innodb_lock_wait_timeout = 50 innodb_read_io_threads = 2 innodb_write_io_threads = 2 innodb_purge_threads = 1 innodb_page_cleaners = 1 innodb_io_capacity = 4000 innodb_io_capacity_max = 8000 innodb_buffer_pool_load_at_startup = ON innodb_buffer_pool_dump_at_shutdown = ON innodb_flush_method = fsync innodb_print_all_deadlocks = OFF innodb_print_ddl_logs = OFF innodb_status_output_locks = OFF innodb_status_output = OFF innodb_max_undo_log_size = 1G innodb_undo_log_truncate = ON innodb_commit_concurrency = 0 [mysqldump] quick [mysql] prompt = "\u@\h \\R:\\m:\\s [\d]> " no_auto_rehash loose-skip-binary-as-hex [myisamchk] key_buffer_size = 128M myisam_sort_buffer_size = 128M read_buffer = 2M write_buffer = 2M |
从节点db02配置文件如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 |
# #author:whsir(https://www.whsir.com/,QQ群630368975,公众号:吴昊博客) #免责声明:MySQL配置生成器所生成的my.cnf配置文件仅供参考。用户需结合自身的实际情况进行调整和优化。本工具及其作者不对因使用该配置文件而引起的任何问题、损失或损害承担任何责任。使用者需自行承担使用该配置文件的风险,并在必要时寻求专业意见。 #my.cnf for MySQL 8.4 # [client] port = 3306 socket = /tmp/mysql.sock [mysqld] user = mysql port = 3306 socket = /tmp/mysql.sock pid_file = /data/mysql/mysql.pid basedir = /usr/local/mysql/ datadir = /data/mysql/ default_time_zone = +08:00 character_set_server = UTF8MB4 log_timestamps = system skip_name_resolve = ON mysqlx_port = 33060 mysqlx = OFF # =================== 慢日志配置开始 =================== # 慢日志是否开启,ON=开启,OFF=关闭。 slow_query_log = OFF # 慢查询时间(秒)。 long_query_time = 3 # 慢日志文件路径。 slow_query_log_file = /data/mysql/mysql_slow_query.log # 从库慢日志是否开启(主库无需理会),ON=开启,OFF=关闭。 log_slow_replica_statements = OFF # 记录(ALTER TABLE、ANALYZE TABLE等)到慢查询日志中,ON=开启,OFF=关闭。 log_slow_admin_statements = OFF # 记录所有未带索引的查询到慢日志中,ON=开启,OFF=关闭。 log_queries_not_using_indexes = OFF # 限制所有未带索引的查询记录频率(每分钟条数)。 log_throttle_queries_not_using_indexes = 0 # 超过多少行的查询才会被记录到慢日志中。 min_examined_row_limit = 0 # =================== 慢日志配置结束 =================== log_slow_extra = OFF log_error_verbosity = 1 log_error_suppression_list = "" lock_wait_timeout = 3600 # MySQL错误日志文件路径 log_error = /data/mysql/error.log skip-external-locking max_allowed_packet = 16M table_open_cache = 1024 table_definition_cache = 1024 sort_buffer_size = 4M join_buffer_size = 4M net_buffer_length = 8K read_buffer_size = 1M read_rnd_buffer_size = 512K thread_cache_size = 200 bulk_insert_buffer_size = 8M tmp_table_size = 32M performance_schema_max_table_instances = 500 thread_stack = 512K interactive_timeout = 28800 wait_timeout = 28800 max_heap_table_size = 32M lower_case_table_names = 0 explicit_defaults_for_timestamp = true #skip-networking #bind-address = 127.0.0.1 max_connections = 500 max_connect_errors = 10000 open_files_limit = 65535 sql_mode = 'ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION' # binlog log_bin = mysql-bin binlog_format = ROW server_id = 102 binlog_checksum = CRC32 binlog_expire_logs_seconds = 86400 max_binlog_cache_size = 128M max_binlog_size = 1G binlog_cache_size = 2M gtid_mode = ON # GTID一致性是否启用(ON=强制一致性,WARN=仅警告,OFF=不检查) enforce_gtid_consistency = ON # 启用后从库会将复制事件写入自身二进制日志。 log_replica_updates = ON # 应尽可能的不要使用mysql_native_password,未来在MySQL9.0版本中将被彻底删除。 mysql_native_password = ON # ==================== MGR配置开始 ===================== # 开启MGR时,必须使用InnoDB引擎,关闭其它存储引擎 disabled_storage_engines = "MyISAM,BLACKHOLE,FEDERATED,ARCHIVE,MEMORY" # 组复制集群的唯一标识(必须全局唯一,可使用uuidgen命令或MySQL的select uuid();生成) # 警告:同一集群的所有节点必须使用相同的group_name! group_replication_group_name = 83d4df8d-c92f-4b1a-b3b0-2afcc8f2890f # 插件加载 # MySQL从8.0.17版本引入克隆插件 plugin-load-add = mysql_clone.so # MySQL从5.7.17版本引入组复制插件 plugin-load-add = group_replication.so # 运行模式 # ON=单主模式(推荐),OFF=多主模式 group_replication_single_primary_mode = ON # 是否随MySQL服务启动自动开启MGR(建议OFF,避免启动顺序问题导致脑裂) group_replication_start_on_boot = OFF # 节点通信配置 # 组复制成员间通信的本地监听地址(格式:host:port) group_replication_local_address = 10.10.10.6:33061 # 组复制成员间通信的地址列表(格式:host1:port1,host2:port2,host3:port3...) group_replication_group_seeds = db01:33061,db02:33061,db03:33061 # 组复制集群的IP地址白名单(支持CIDR格式,如:192.168.1.0/24,10.0.0.1) group_replication_ip_allowlist = 10.10.10.5,10.10.10.6,10.10.10.7 # 组复制严格一致性检查开关,OFF=禁用,不检查 group_replication_enforce_update_everywhere_checks = OFF # 组复制引导开关,仅首次启动时通过SET GLOBAL临时启用(SET GLOBAL group_replication_bootstrap_group=ON;),正常运行时必须设为OFF group_replication_bootstrap_group = OFF # ==================== MGR配置结束 ===================== # innodb transaction_isolation = REPEATABLE-READ default_storage_engine = InnoDB innodb_buffer_pool_instances = 4 innodb_file_per_table = 1 innodb_data_home_dir = /data/mysql/ innodb_data_file_path = ibdata1:64M:autoextend innodb_log_group_home_dir = /data/mysql/ innodb_buffer_pool_size = 5G innodb_redo_log_capacity = 256M innodb_log_buffer_size = 16M innodb_flush_log_at_trx_commit = 1 innodb_lock_wait_timeout = 50 innodb_read_io_threads = 2 innodb_write_io_threads = 2 innodb_purge_threads = 1 innodb_page_cleaners = 1 innodb_io_capacity = 4000 innodb_io_capacity_max = 8000 innodb_buffer_pool_load_at_startup = ON innodb_buffer_pool_dump_at_shutdown = ON innodb_flush_method = fsync innodb_print_all_deadlocks = OFF innodb_print_ddl_logs = OFF innodb_status_output_locks = OFF innodb_status_output = OFF innodb_max_undo_log_size = 1G innodb_undo_log_truncate = ON innodb_commit_concurrency = 0 [mysqldump] quick [mysql] prompt = "\u@\h \\R:\\m:\\s [\d]> " no_auto_rehash loose-skip-binary-as-hex [myisamchk] key_buffer_size = 128M myisam_sort_buffer_size = 128M read_buffer = 2M write_buffer = 2M |
从节点db03配置文件如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 |
# #author:whsir(https://www.whsir.com/,QQ群630368975,公众号:吴昊博客) #免责声明:MySQL配置生成器所生成的my.cnf配置文件仅供参考。用户需结合自身的实际情况进行调整和优化。本工具及其作者不对因使用该配置文件而引起的任何问题、损失或损害承担任何责任。使用者需自行承担使用该配置文件的风险,并在必要时寻求专业意见。 #my.cnf for MySQL 8.4 # [client] port = 3306 socket = /tmp/mysql.sock [mysqld] user = mysql port = 3306 socket = /tmp/mysql.sock pid_file = /data/mysql/mysql.pid basedir = /usr/local/mysql/ datadir = /data/mysql/ default_time_zone = +08:00 character_set_server = UTF8MB4 log_timestamps = system skip_name_resolve = ON mysqlx_port = 33060 mysqlx = OFF # =================== 慢日志配置开始 =================== # 慢日志是否开启,ON=开启,OFF=关闭。 slow_query_log = OFF # 慢查询时间(秒)。 long_query_time = 3 # 慢日志文件路径。 slow_query_log_file = /data/mysql/mysql_slow_query.log # 从库慢日志是否开启(主库无需理会),ON=开启,OFF=关闭。 log_slow_replica_statements = OFF # 记录(ALTER TABLE、ANALYZE TABLE等)到慢查询日志中,ON=开启,OFF=关闭。 log_slow_admin_statements = OFF # 记录所有未带索引的查询到慢日志中,ON=开启,OFF=关闭。 log_queries_not_using_indexes = OFF # 限制所有未带索引的查询记录频率(每分钟条数)。 log_throttle_queries_not_using_indexes = 0 # 超过多少行的查询才会被记录到慢日志中。 min_examined_row_limit = 0 # =================== 慢日志配置结束 =================== log_slow_extra = OFF log_error_verbosity = 1 log_error_suppression_list = "" lock_wait_timeout = 3600 # MySQL错误日志文件路径 log_error = /data/mysql/error.log skip-external-locking max_allowed_packet = 16M table_open_cache = 1024 table_definition_cache = 1024 sort_buffer_size = 4M join_buffer_size = 4M net_buffer_length = 8K read_buffer_size = 1M read_rnd_buffer_size = 512K thread_cache_size = 200 bulk_insert_buffer_size = 8M tmp_table_size = 32M performance_schema_max_table_instances = 500 thread_stack = 512K interactive_timeout = 28800 wait_timeout = 28800 max_heap_table_size = 32M lower_case_table_names = 0 explicit_defaults_for_timestamp = true #skip-networking #bind-address = 127.0.0.1 max_connections = 500 max_connect_errors = 10000 open_files_limit = 65535 sql_mode = 'ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION' # binlog log_bin = mysql-bin binlog_format = ROW server_id = 103 binlog_checksum = CRC32 binlog_expire_logs_seconds = 86400 max_binlog_cache_size = 128M max_binlog_size = 1G binlog_cache_size = 2M gtid_mode = ON # GTID一致性是否启用(ON=强制一致性,WARN=仅警告,OFF=不检查) enforce_gtid_consistency = ON # 启用后从库会将复制事件写入自身二进制日志。 log_replica_updates = ON # 应尽可能的不要使用mysql_native_password,未来在MySQL9.0版本中将被彻底删除。 mysql_native_password = ON # ==================== MGR配置开始 ===================== # 开启MGR时,必须使用InnoDB引擎,关闭其它存储引擎 disabled_storage_engines = "MyISAM,BLACKHOLE,FEDERATED,ARCHIVE,MEMORY" # 组复制集群的唯一标识(必须全局唯一,可使用uuidgen命令或MySQL的select uuid();生成) # 警告:同一集群的所有节点必须使用相同的group_name! group_replication_group_name = 83d4df8d-c92f-4b1a-b3b0-2afcc8f2890f # 插件加载 # MySQL从8.0.17版本引入克隆插件 plugin-load-add = mysql_clone.so # MySQL从5.7.17版本引入组复制插件 plugin-load-add = group_replication.so # 运行模式 # ON=单主模式(推荐),OFF=多主模式 group_replication_single_primary_mode = ON # 是否随MySQL服务启动自动开启MGR(建议OFF,避免启动顺序问题导致脑裂) group_replication_start_on_boot = OFF # 节点通信配置 # 组复制成员间通信的本地监听地址(格式:host:port) group_replication_local_address = 10.10.10.7:33061 # 组复制成员间通信的地址列表(格式:host1:port1,host2:port2,host3:port3...) group_replication_group_seeds = db01:33061,db02:33061,db03:33061 # 组复制集群的IP地址白名单(支持CIDR格式,如:192.168.1.0/24,10.0.0.1) group_replication_ip_allowlist = 10.10.10.5,10.10.10.6,10.10.10.7 # 组复制严格一致性检查开关,OFF=禁用,不检查 group_replication_enforce_update_everywhere_checks = OFF # 组复制引导开关,仅首次启动时通过SET GLOBAL临时启用(SET GLOBAL group_replication_bootstrap_group=ON;),正常运行时必须设为OFF group_replication_bootstrap_group = OFF # ==================== MGR配置结束 ===================== # innodb transaction_isolation = REPEATABLE-READ default_storage_engine = InnoDB innodb_buffer_pool_instances = 4 innodb_file_per_table = 1 innodb_data_home_dir = /data/mysql/ innodb_data_file_path = ibdata1:64M:autoextend innodb_log_group_home_dir = /data/mysql/ innodb_buffer_pool_size = 5G innodb_redo_log_capacity = 256M innodb_log_buffer_size = 16M innodb_flush_log_at_trx_commit = 1 innodb_lock_wait_timeout = 50 innodb_read_io_threads = 2 innodb_write_io_threads = 2 innodb_purge_threads = 1 innodb_page_cleaners = 1 innodb_io_capacity = 4000 innodb_io_capacity_max = 8000 innodb_buffer_pool_load_at_startup = ON innodb_buffer_pool_dump_at_shutdown = ON innodb_flush_method = fsync innodb_print_all_deadlocks = OFF innodb_print_ddl_logs = OFF innodb_status_output_locks = OFF innodb_status_output = OFF innodb_max_undo_log_size = 1G innodb_undo_log_truncate = ON innodb_commit_concurrency = 0 [mysqldump] quick [mysql] prompt = "\u@\h \\R:\\m:\\s [\d]> " no_auto_rehash loose-skip-binary-as-hex [myisamchk] key_buffer_size = 128M myisam_sort_buffer_size = 128M read_buffer = 2M write_buffer = 2M |
6、启动MySQL
1 |
systemctl start mysql |
7、登录MySQL确保插件正常启用
mysql -uroot -p
Enter password:默认密码为空,直接回车进入
SHOW PLUGINS;
这里确保clone和group_replication插件处于ACTIVE,如未处于ACTIVE状态,可参考以下两种方法设置
方法一:通过my.cnf配置方式开启
plugin-load-add = mysql_clone.so
# MySQL从8.0.17版本引入克隆插件
plugin-load-add = group_replication.so
# MySQL从5.7.17版本引入组复制插件
方法二:通过安装方式开启
1 2 |
mysql > INSTALL PLUGIN group_replication SONAME 'group_replication.so'; mysql > INSTALL PLUGIN clone SONAME 'mysql_clone.so'; |
8、引导主节点初始化
在主节点db01上,登录MySQL执行以下操作
禁用二进制日志
1 |
mysql > SET SQL_LOG_BIN=0; |
创建MySQL用户
1 2 |
mysql > CREATE USER 'rpl_user'@'%' IDENTIFIED WITH mysql_native_password BY 'password'; mysql > GRANT REPLICATION SLAVE, GROUP_REPLICATION_ADMIN, CONNECTION_ADMIN,GROUP_REPLICATION_STREAM, BACKUP_ADMIN ON *.* TO 'rpl_user'@'%'; |
注:GROUP_REPLICATION_STREAM 是 MySQL 8.4 新引入的权限,专门用于组复制的二进制日志流传输机制
1 2 3 |
mysql > FLUSH PRIVILEGES; mysql > SET SQL_LOG_BIN=1; mysql > CHANGE REPLICATION SOURCE TO SOURCE_USER='rpl_user', SOURCE_PASSWORD='password' FOR CHANNEL 'group_replication_recovery'; |
启动组复制
1 2 3 |
mysql > SET GLOBAL group_replication_bootstrap_group=ON; mysql > START GROUP_REPLICATION; mysql > SET GLOBAL group_replication_bootstrap_group=OFF; |
查看状态
1 |
mysql > SELECT CHANNEL_NAME,MEMBER_ID,MEMBER_HOST,MEMBER_PORT,MEMBER_STATE,MEMBER_ROLE,MEMBER_VERSION FROM performance_schema.replication_group_members; |
或
1 |
mysql > SELECT * FROM performance_schema.replication_group_members; |
一切正常的话,所看到的内容如下:
9、加入从节点使用mysql_native_password
在其余两个从节点db02、db03上,登录MySQL执行以下操作
禁用二进制日志
1 |
mysql > SET SQL_LOG_BIN=0; |
创建MySQL用户、执行相关操作,启动组复制
1 2 3 4 5 6 |
mysql > CREATE USER 'rpl_user'@'%' IDENTIFIED WITH mysql_native_password BY 'password'; mysql > GRANT REPLICATION SLAVE, GROUP_REPLICATION_ADMIN, CONNECTION_ADMIN,GROUP_REPLICATION_STREAM, BACKUP_ADMIN ON *.* TO 'rpl_user'@'%'; mysql > FLUSH PRIVILEGES; mysql > SET SQL_LOG_BIN=1; CHANGE REPLICATION SOURCE TO SOURCE_USER='rpl_user', SOURCE_PASSWORD='password' FOR CHANNEL 'group_replication_recovery'; mysql > START GROUP_REPLICATION; |
查看状态
1 |
mysql > SELECT CHANNEL_NAME,MEMBER_ID,MEMBER_HOST,MEMBER_PORT,MEMBER_STATE,MEMBER_ROLE,MEMBER_VERSION FROM performance_schema.replication_group_members; |
或
1 |
mysql > SELECT * FROM performance_schema.replication_group_members; |
或
1 |
mysql > select * from performance_schema.replication_group_members\G |
注1:单主模式和多主模式区别在于MGR初始化时,group_replication_single_primary_mode参数,多主模式需设置group_replication_single_primary_mode=OFF,其他配置与单主模式操作一模一样。
注2:如果你没有通过https://dbcnf.wlnmp.com/生成my.cnf文件,则注意以下几个参数
disabled_storage_engines="MyISAM,BLACKHOLE,FEDERATED,ARCHIVE,MEMORY"
server_id = 100
gtid_mode = ON
enforce_gtid_consistency = ON
plugin_load_add='group_replication.so'
group_replication_group_name="aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa"
group_replication_start_on_boot=off
group_replication_local_address= "s3:33061"
group_replication_group_seeds= "s1:33061,s2:33061,s3:33061"
group_replication_bootstrap_group= off
10、验证
最后,在主库创建或插入数据,看是否会同步到从库中,成功同步表示验证通过。
原文链接:MySQL8.4 MGR主从高可用集群搭建(基于wlnmp源),转载请注明来源!