mysql 8.4 配置MGR
1.环境
1.mysql 8.4
2.os: oracle linux 10.1
3.节点 3节点
2.配置主机名
hostnamectl set-hostname sz-mgr-db01
hostnamectl set-hostname sz-mgr-db02
hostnamectl set-hostname sz-mgr-db03
3.设置主机域名解析
vim /etc/hosts
192.168.133.10 sz-mgr-db01
192.168.133.20 sz-mgr-db02
192.168.133.30 sz-mgr-db03
3.安装 MYSQL 8.4
该步骤略,可以根据自己的情况进行安装
4.产生MYQL配置文件
可以my.cnf 配置文件生成器 https://dbcnf.wlnmp.com/ 来生成,分别生成3份即可
配置文件注意:
1:确保新节点的组复制group_replication_group_name标识ID与原来MGR集群中的保持一致。
2:确保组复制通信的本地监听地址为本机,所有MySQL的group_replication_local_address参数值为本机地址。
3:server_id不能相同,我这里主节点db01是101,从节点db02是102,从节点db03是103,新节点的db04是104。
下面是生成的配置文件:
1.db01 的配置文件
[root@sz-mgr-db01 mysql_3306]# cat my_3306.cnf
[client]
port = 3306
socket = /data/mysql/mysql_3306/tmp/mysql_3306.sock
[mysql]
prompt="\u@\h \\R:\\m:\\s [\d]> "
no-auto-rehash
[mysqld]
user = mysql
port = 3306
admin_address = 127.0.0.1
basedir = /usr/local/mysql
datadir = /data/mysql/mysql_3306/data
socket = /data/mysql/mysql_3306/tmp/mysql_3306.sock
pid-file = mysql_3306.pid
character-set-server = utf8mb4
skip_name_resolve = 1
plugin_dir = /usr/local/mysql/lib/plugin #官方版本的路径
plugin-load-add=mysql_clone.so
plugin-load-add=group_replication.so
clone=FORCE_PLUS_PERMANENT
group_replication_clone_threshold = 10000
open_files_limit = 65535
back_log = 1024
max_connections = 1024
max_connect_errors = 1000000
table_open_cache = 1024
table_definition_cache = 1024
table_open_cache_instances = 64
thread_stack = 512K
external-locking = FALSE
max_allowed_packet = 32M
sort_buffer_size = 4M
join_buffer_size = 4M
thread_cache_size = 1536
interactive_timeout = 600
wait_timeout = 600
tmp_table_size = 32M
max_heap_table_size = 32M
slow_query_log = 1
log_timestamps = SYSTEM
slow_query_log_file = /data/mysql/mysql_3306/logs/slow.log
log-error = /data/mysql/mysql_3306/logs/error.log
long_query_time = 0.1
log_queries_not_using_indexes =1
log_throttle_queries_not_using_indexes = 60
min_examined_row_limit = 100
log_slow_admin_statements = 1
server-id = 1423306
log-bin = /data/mysql/mysql_3306/logs/mysql-bin
sync_binlog = 1
binlog_cache_size = 4M
max_binlog_cache_size = 2G
max_binlog_size = 1G
gtid_mode = on
enforce_gtid_consistency = 1
binlog_checksum=NONE
binlog_row_image=FULL
relay_log_recovery = 1
relay-log-purge = 1
key_buffer_size = 32M
read_buffer_size = 8M
read_rnd_buffer_size = 4M
bulk_insert_buffer_size = 64M
myisam_sort_buffer_size = 128M
myisam_max_sort_file_size = 10G
lock_wait_timeout = 3600
explicit_defaults_for_timestamp = 1
innodb_thread_concurrency = 0
innodb_sync_spin_loops = 100
innodb_spin_wait_delay = 30
transaction_isolation = READ-COMMITTED
innodb_buffer_pool_size = 2867M
innodb_buffer_pool_instances = 4
innodb_buffer_pool_load_at_startup = 1
innodb_buffer_pool_dump_at_shutdown = 1
innodb_data_file_path = ibdata1:1G:autoextend
innodb_flush_log_at_trx_commit = 1
innodb_log_buffer_size = 32M
innodb_max_undo_log_size = 4G
innodb_undo_directory = /data/mysql/mysql_3306/undolog
innodb_io_capacity = 4000
innodb_io_capacity_max = 8000
innodb_flush_sync = 0
innodb_flush_neighbors = 0
innodb_write_io_threads = 8
innodb_read_io_threads = 8
innodb_purge_threads = 4
innodb_page_cleaners = 4
innodb_open_files = 65535
innodb_max_dirty_pages_pct = 50
innodb_flush_method = O_DIRECT
innodb_lru_scan_depth = 4000
innodb_checksum_algorithm = crc32
innodb_lock_wait_timeout = 10
innodb_rollback_on_timeout = 1
innodb_print_all_deadlocks = 1
innodb_file_per_table = 1
innodb_online_alter_log_max_size = 4G
innodb_stats_on_metadata = 0
log_error_verbosity = 3
innodb_print_ddl_logs = 1
binlog_expire_logs_seconds = 2592000
innodb_status_file = 1
innodb_status_output = 0
innodb_status_output_locks = 0
performance_schema = 1
performance_schema_instrument = '%memory%=on'
performance_schema_instrument = '%lock%=on'
innodb_monitor_enable="module_innodb"
innodb_monitor_enable="module_server"
innodb_monitor_enable="module_dml"
innodb_monitor_enable="module_ddl"
innodb_monitor_enable="module_trx"
innodb_monitor_enable="module_os"
innodb_monitor_enable="module_purge"
innodb_monitor_enable="module_log"
innodb_monitor_enable="module_lock"
innodb_monitor_enable="module_buffer"
innodb_monitor_enable="module_index"
innodb_monitor_enable="module_ibuf_system"
innodb_monitor_enable="module_buffer_page"
innodb_monitor_enable="module_adaptive_hash"
loose-group_replication_group_name = "cc654ef6-1ec1-11f1-b0af-000c29bb2c79" #组名,此处可拿select uuid()生成
loose-group_replication_local_address = "192.168.133.10:33006" #本节点的IP地址和端口,注意该端口是组内成员之间通信的端口,而不是MySQL对外提供服务的端口
loose-group_replication_group_seeds = "192.168.133.10:33006,192.168.133.20:33006,192.168.133.30:33006" #种子节点的IP和端口号,新成员加入到集群的时候需要联系种子节点,启动集群的节点不使用该选项
loose-group_replication_start_on_boot = off #在mysqld启动时不自动启动组复制
loose-group_replication_bootstrap_group = off #关闭,如果打开会造成脑裂 #是否启动集群,注意,该选项任何时候只能用于一个节点,通常情况下启动集群的时候使用,启动之后需要关闭该选项
loose-group_replication_member_weight = 50 #权重选择
[mysqldump]
quick
max_allowed_packet = 32M
[mysqld_safe]
malloc-lib=/usr/local/mysql/lib/jmalloc.so
nice=-19
open-files-limit=65535
2.db02 的配置文件
[root@sz-mgr-db02 mysql_3306]# cat my_3306.cnf
[client]
port = 3306
socket = /data/mysql/mysql_3306/tmp/mysql_3306.sock
[mysql]
prompt="\u@\h \R:\m:\s [\d]> "
no-auto-rehash
[mysqld]
user = mysql
port = 3306
admin_address = 127.0.0.1
basedir = /usr/local/mysql
datadir = /data/mysql/mysql_3306/data
socket = /data/mysql/mysql_3306/tmp/mysql_3306.sock
pid-file = mysql_3306.pid
character-set-server = utf8mb4
skip_name_resolve = 1
plugin_dir = /usr/local/mysql/lib/plugin #官方版本的路径
plugin-load-add=mysql_clone.so
plugin-load-add=group_replication.so
clone=FORCE_PLUS_PERMANENT
group_replication_clone_threshold = 10000
open_files_limit = 65535
back_log = 1024
max_connections = 1024
max_connect_errors = 1000000
table_open_cache = 1024
table_definition_cache = 1024
table_open_cache_instances = 64
thread_stack = 512K
external-locking = FALSE
max_allowed_packet = 32M
sort_buffer_size = 4M
join_buffer_size = 4M
thread_cache_size = 1536
interactive_timeout = 600
wait_timeout = 600
tmp_table_size = 32M
max_heap_table_size = 32M
slow_query_log = 1
log_timestamps = SYSTEM
slow_query_log_file = /data/mysql/mysql_3306/logs/slow.log
log-error = /data/mysql/mysql_3306/logs/error.log
long_query_time = 0.1
log_queries_not_using_indexes =1
log_throttle_queries_not_using_indexes = 60
min_examined_row_limit = 100
log_slow_admin_statements = 1
# log_slow_slave_statements = 1
server-id = 1423307
log-bin = /data/mysql/mysql_3306/logs/mysql-bin
sync_binlog = 1
binlog_cache_size = 4M
max_binlog_cache_size = 2G
max_binlog_size = 1G
binlog_expire_logs_seconds=2592000
gtid_mode = on
enforce_gtid_consistency = 1
binlog_checksum=NONE
binlog_row_image=FULL
relay_log_recovery = 1
relay-log-purge = 1
key_buffer_size = 32M
read_buffer_size = 8M
read_rnd_buffer_size = 4M
bulk_insert_buffer_size = 64M
myisam_sort_buffer_size = 128M
myisam_max_sort_file_size = 10G
lock_wait_timeout = 3600
explicit_defaults_for_timestamp = 1
innodb_thread_concurrency = 0
innodb_sync_spin_loops = 100
innodb_spin_wait_delay = 30
transaction_isolation = READ-COMMITTED
innodb_buffer_pool_size = 2867M
innodb_buffer_pool_instances = 4
innodb_buffer_pool_load_at_startup = 1
innodb_buffer_pool_dump_at_shutdown = 1
innodb_data_file_path = ibdata1:1G:autoextend
innodb_flush_log_at_trx_commit = 1
innodb_log_buffer_size = 32M
innodb_max_undo_log_size = 4G
innodb_undo_directory = /data/mysql/mysql_3306/undolog
innodb_io_capacity = 4000
innodb_io_capacity_max = 8000
innodb_flush_sync = 0
innodb_flush_neighbors = 0
innodb_write_io_threads = 8
innodb_read_io_threads = 8
innodb_purge_threads = 4
innodb_page_cleaners = 4
innodb_open_files = 65535
innodb_max_dirty_pages_pct = 50
innodb_flush_method = O_DIRECT
innodb_lru_scan_depth = 4000
innodb_checksum_algorithm = crc32
innodb_lock_wait_timeout = 10
innodb_rollback_on_timeout = 1
innodb_print_all_deadlocks = 1
innodb_file_per_table = 1
innodb_online_alter_log_max_size = 4G
innodb_stats_on_metadata = 0
log_error_verbosity = 3
innodb_print_ddl_logs = 1
binlog_expire_logs_seconds = 2592000
innodb_status_file = 1
innodb_status_output = 0
innodb_status_output_locks = 0
performance_schema = 1
performance_schema_instrument = '%memory%=on'
performance_schema_instrument = '%lock%=on'
innodb_monitor_enable="module_innodb"
innodb_monitor_enable="module_server"
innodb_monitor_enable="module_dml"
innodb_monitor_enable="module_ddl"
innodb_monitor_enable="module_trx"
innodb_monitor_enable="module_os"
innodb_monitor_enable="module_purge"
innodb_monitor_enable="module_log"
innodb_monitor_enable="module_lock"
innodb_monitor_enable="module_buffer"
innodb_monitor_enable="module_index"
innodb_monitor_enable="module_ibuf_system"
innodb_monitor_enable="module_buffer_page"
innodb_monitor_enable="module_adaptive_hash"
loose-group_replication_group_name = "cc654ef6-1ec1-11f1-b0af-000c29bb2c79" #组名,此处可拿select uuid()生成
loose-group_replication_local_address = "192.168.133.20:33006" #本节点的IP地址和端口,注意该端口是组内成员之间通信的端口,而不是MySQL对外提供服务的端口
loose-group_replication_group_seeds = "192.168.133.10:33006,192.168.133.20:33006,192.168.133.30:33006" #种子节点的IP和端口号
loose-group_replication_start_on_boot = off #在mysqld启动时不自动启动组复制
loose-group_replication_bootstrap_group = off #关闭,如果打开会造成脑裂
loose-group_replication_member_weight = 50 #权重选择
[mysqldump]
quick
max_allowed_packet = 32M
[mysqld_safe]
malloc-lib=/usr/local/mysql/lib/jmalloc.so
nice=-19
open-files-limit=65535
3.db03的配置文件
[root@sz-mgr-db03 mysql_3306]# cat my_3306.cnf
[client]
port = 3306
socket = /data/mysql/mysql_3306/tmp/mysql_3306.sock
[mysql]
prompt="\u@\h \\R:\\m:\\s [\d]> "
no-auto-rehash
[mysqld]
user = mysql
port = 3306
admin_address = 127.0.0.1
basedir = /usr/local/mysql
datadir = /data/mysql/mysql_3306/data
socket = /data/mysql/mysql_3306/tmp/mysql_3306.sock
pid-file = mysql_3306.pid
character-set-server = utf8mb4
skip_name_resolve = 1
plugin_dir = /usr/local/mysql/lib/plugin #官方版本的路径
plugin-load-add=mysql_clone.so
plugin-load-add=group_replication.so
clone=FORCE_PLUS_PERMANENT
group_replication_clone_threshold = 10000
open_files_limit = 65535
back_log = 1024
max_connections = 1024
max_connect_errors = 1000000
table_open_cache = 1024
table_definition_cache = 1024
table_open_cache_instances = 64
thread_stack = 512K
external-locking = FALSE
max_allowed_packet = 32M
sort_buffer_size = 4M
join_buffer_size = 4M
thread_cache_size = 1536
interactive_timeout = 600
wait_timeout = 600
tmp_table_size = 32M
max_heap_table_size = 32M
slow_query_log = 1
log_timestamps = SYSTEM
slow_query_log_file = /data/mysql/mysql_3306/logs/slow.log
log-error = /data/mysql/mysql_3306/logs/error.log
long_query_time = 0.1
log_queries_not_using_indexes =1
log_throttle_queries_not_using_indexes = 60
min_examined_row_limit = 100
log_slow_admin_statements = 1
server-id = 1423308
log-bin = /data/mysql/mysql_3306/logs/mysql-bin
sync_binlog = 1
binlog_cache_size = 4M
max_binlog_cache_size = 2G
max_binlog_size = 1G
binlog_expire_logs_seconds=2592000
gtid_mode = on
enforce_gtid_consistency = 1
binlog_checksum=NONE
binlog_row_image=FULL
relay_log_recovery = 1
relay-log-purge = 1
key_buffer_size = 32M
read_buffer_size = 8M
read_rnd_buffer_size = 4M
bulk_insert_buffer_size = 64M
myisam_sort_buffer_size = 128M
myisam_max_sort_file_size = 10G
#myisam_repair_threads = 1
lock_wait_timeout = 3600
explicit_defaults_for_timestamp = 1
innodb_thread_concurrency = 0
innodb_sync_spin_loops = 100
innodb_spin_wait_delay = 30
transaction_isolation = READ-COMMITTED
innodb_buffer_pool_size = 2867M
innodb_buffer_pool_instances = 4
innodb_buffer_pool_load_at_startup = 1
innodb_buffer_pool_dump_at_shutdown = 1
innodb_data_file_path = ibdata1:1G:autoextend
innodb_flush_log_at_trx_commit = 1
innodb_log_buffer_size = 32M
innodb_max_undo_log_size = 4G
innodb_undo_directory = /data/mysql/mysql_3306/undolog
innodb_io_capacity = 4000
innodb_io_capacity_max = 8000
innodb_flush_sync = 0
innodb_flush_neighbors = 0
innodb_write_io_threads = 8
innodb_read_io_threads = 8
innodb_purge_threads = 4
innodb_page_cleaners = 4
innodb_open_files = 65535
innodb_max_dirty_pages_pct = 50
innodb_flush_method = O_DIRECT
innodb_lru_scan_depth = 4000
innodb_checksum_algorithm = crc32
innodb_lock_wait_timeout = 10
innodb_rollback_on_timeout = 1
innodb_print_all_deadlocks = 1
innodb_file_per_table = 1
innodb_online_alter_log_max_size = 4G
innodb_stats_on_metadata = 0
log_error_verbosity = 3
innodb_print_ddl_logs = 1
binlog_expire_logs_seconds = 2592000
innodb_status_file = 1
innodb_status_output = 0
innodb_status_output_locks = 0
performance_schema = 1
performance_schema_instrument = '%memory%=on'
performance_schema_instrument = '%lock%=on'
innodb_monitor_enable="module_innodb"
innodb_monitor_enable="module_server"
innodb_monitor_enable="module_dml"
innodb_monitor_enable="module_ddl"
innodb_monitor_enable="module_trx"
innodb_monitor_enable="module_os"
innodb_monitor_enable="module_purge"
innodb_monitor_enable="module_log"
innodb_monitor_enable="module_lock"
innodb_monitor_enable="module_buffer"
innodb_monitor_enable="module_index"
innodb_monitor_enable="module_ibuf_system"
innodb_monitor_enable="module_buffer_page"
innodb_monitor_enable="module_adaptive_hash"
loose-group_replication_group_name = "cc654ef6-1ec1-11f1-b0af-000c29bb2c79" #组名,此处可拿select uuid()生成
loose-group_replication_local_address = "192.168.133.30:33006" #本节点的IP地址和端口,注意该端口是组内成员之间通信的端口
loose-group_replication_group_seeds = "192.168.133.10:33006,192.168.133.20:33006,192.168.133.30:33006" #种子节点的IP和端口号
loose-group_replication_start_on_boot = off #在mysqld启动时不自动启动组复制
loose-group_replication_bootstrap_group = off #关闭,如果打开会造成脑裂
loose-group_replication_member_weight = 50 #权重选择
[mysqldump]
quick
max_allowed_packet = 32M
[mysqld_safe]
malloc-lib=/usr/local/mysql/lib/jmalloc.so
nice=-19
open-files-limit=65535
5.主节点初始化
# MGR 第一台配置:
# 第一步:创建用于复制的用户
set sql_log_bin=0;
create user 'repuser'@'%' identified by 'szdb_4U';
GRANT REPLICATION_APPLIER, REPLICATION_SLAVE_ADMIN, SELECT ON *.* TO 'repuser'@'%';
GRANT CLONE_ADMIN, BACKUP_ADMIN ON *.* TO 'repuser'@'%';
GRANT CONNECTION_ADMIN ON *.* TO 'repuser'@'%';
GRANT GROUP_REPLICATION_STREAM ON *.* TO 'repuser'@'%';
create user 'repuser'@'127.0.0.1' identified by 'szdb_4U';
GRANT REPLICATION_APPLIER, REPLICATION_SLAVE_ADMIN, SELECT ON *.* TO 'repuser'@'127.0.0.1';
GRANT CLONE_ADMIN, BACKUP_ADMIN ON *.* TO 'repuser'@'127.0.0.1';
GRANT CONNECTION_ADMIN ON *.* TO 'repuser'@'127.0.0.1';
GRANT GROUP_REPLICATION_STREAM ON *.* TO 'repuser'@'127.0.0.1';
create user 'repuser'@'localhost' identified by 'szdb_4U';
GRANT REPLICATION_APPLIER, REPLICATION_SLAVE_ADMIN, SELECT ON *.* TO 'repuser'@'localhost';
GRANT CLONE_ADMIN, BACKUP_ADMIN ON *.* TO 'repuser'@'localhost';
GRANT CONNECTION_ADMIN ON *.* TO 'repuser'@'localhost';
GRANT GROUP_REPLICATION_STREAM ON *.* TO 'repuser'@'localhost';
set sql_log_bin=1;
# 第二步:配置复制所使用的用户
starting in MySQL 8.0.23 (and strictly enforced in MySQL 8.4), MySQL changed its replication terminology from "Master/Slave" to "Source/Replica".
CHANGE REPLICATION SOURCE TO SOURCE_USER='repuser', SOURCE_PASSWORD='szdb_4U' FOR CHANNEL 'group_replication_recovery';
# 第三步:安装mysql group replication这个插件
# 备注:如果在my.cnf里写写入 plugin_load="group_replication=group_replication.so" 这步就可以不用操作
install plugin group_replication soname 'group_replication.so';
# 通过show plugins;查看是否安装成功
show plugins;
# 第四步:初始化复制组
set global group_replication_bootstrap_group=on;
start group_replication;
set global group_replication_bootstrap_group=off;
# 查看状态
mysql> select * from performance_schema.replication_group_members;
+---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+----------------------------+
| CHANNEL_NAME | MEMBER_ID | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE | MEMBER_ROLE | MEMBER_VERSION | MEMBER_COMMUNICATION_STACK |
+---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+----------------------------+
| group_replication_applier | 4b0a34af-1ebe-11f1-8c9b-000c29bb2c79 | sz-mgr-db01 | 3306 | ONLINE | PRIMARY | 8.4.8 | XCom |
+---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+----------------------------+
1 row in set (0.00 sec)
mysql>
6、第二台、第三台配置
#MGR 配置其他从节点
#在所有从主机上的mysql中执行
# 第一步:创建用于复制的用户
set sql_log_bin=0;
create user 'repuser'@'%' identified by 'szdb_4U';
GRANT REPLICATION_APPLIER, REPLICATION_SLAVE_ADMIN, SELECT ON *.* TO 'repuser'@'%';
GRANT CLONE_ADMIN, BACKUP_ADMIN ON *.* TO 'repuser'@'%';
GRANT CONNECTION_ADMIN ON *.* TO 'repuser'@'%';
GRANT GROUP_REPLICATION_STREAM ON *.* TO 'repuser'@'%';
create user 'repuser'@'127.0.0.1' identified by 'szdb_4U';
GRANT REPLICATION_APPLIER, REPLICATION_SLAVE_ADMIN, SELECT ON *.* TO 'repuser'@'127.0.0.1';
GRANT CLONE_ADMIN, BACKUP_ADMIN ON *.* TO 'repuser'@'127.0.0.1';
GRANT CONNECTION_ADMIN ON *.* TO 'repuser'@'127.0.0.1';
GRANT GROUP_REPLICATION_STREAM ON *.* TO 'repuser'@'127.0.0.1';
create user 'repuser'@'localhost' identified by 'szdb_4U';
GRANT REPLICATION_APPLIER, REPLICATION_SLAVE_ADMIN, SELECT ON *.* TO 'repuser'@'localhost';
GRANT CLONE_ADMIN, BACKUP_ADMIN ON *.* TO 'repuser'@'localhost';
GRANT CONNECTION_ADMIN ON *.* TO 'repuser'@'localhost';
GRANT GROUP_REPLICATION_STREAM ON *.* TO 'repuser'@'localhost';
set sql_log_bin=1;
第二步:
CHANGE REPLICATION SOURCE TO SOURCE_USER='repuser', SOURCE_PASSWORD='szdb_4U' FOR CHANNEL 'group_replication_recovery';
# 第三步:安装mysql group replication这个插件
# 备注:如果在my.cnf里写写入 plugin_load="group_replication=group_replication.so" 这步就可以不用操作
install plugin group_replication soname 'group_replication.so';
# 通过show plugins;查看是否安装成功
show plugins;
# 第四步:加入前面创建好的复制组
RESET BINARY LOGS AND GTIDS;
------------------
也可以克隆主库的数据
RESET PERSIST;
SET GLOBAL clone_valid_donor_list = '192.168.133.10:3306';
STOP GROUP_REPLICATION;
执行克隆操作
CLONE INSTANCE FROM 'repuser'@'192.168.133.10':3306 IDENTIFIED BY 'szdb_4U';
-----------------
启动复制
start group_replication;
查看状态
select * from performance_schema.replication_group_members;
7、验证
最后,在主库创建或插入数据,看是否会同步到从库中,成功同步表示验证通过。
create database test;
create table test.emp (empid int primary key,last_name varchar(20));
insert into test.emp values(101,'sztech');
select * from test.emp;
8.把primary 库重启,看是否自动切换到其他节点
|