MySQL5.7.24 開啟Gtid+MGR組複製
MySQL5.7.24 Gtid+MGR
一.伺服器環境說明:
由於伺服器的資源有限,本次測試採用的是1臺機器測試:
一臺硬體物理機器:16G記憶體,一塊120G的ssd盤 系統是CentOS6.9 x86_64最小化安裝
系統核心:
[[email protected] ~]# uname -a
Linux localhost.localdomain 2.6.32-696.el6.x86_64 #1 SMP Tue Mar 21 19:29:05 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
關閉selinux,關閉iptables
服務部署規劃說明:
物理機器上以不同的mysql配置檔案my.cnf來初始化mysql ,並且以三個不同的埠和新增MGR的配置引數來開啟3個MySQL例項
mysql的版本為mysql5.7.24 二進位制安裝
二.配置步驟如下:
第一,物理機器上開啟三個mysql5.7.24 例項:
初始化mysql
下載軟體: wget https://cdn.mysql.com//Downloads/MySQL-5.7/mysql-5.7.24-linux-glibc2.12-x86_64.tar.gz tar xf mysql-5.7.24-linux-glibc2.12-x86_64.tar.gz -C /usr/local mv /usr/local/mysql-5.7.24-linux-glibc2.12 /usr/local/mysql useradd mysql -s /sbin/nologin -M chown -R mysql.mysql /usr/local/mysql yum install numactl -y
建立MySQL初始化資料存放路徑:
mkdir -p /home/mysql3306/{data,binlog,logs}
mkdir -p /home/mysql3307/{data,binlog,logs}
mkdir -p /home/mysql3308/{data,binlog,logs}
chown -R mysql.mysql /home/{mysql3306,mysql3307,mysql3308}
準備初始化mysql的my.cnf的配置檔案:
[[email protected] ~]# ll /opt/my330*
-rw-r--r-- 1 root root 9227 12月 26 18:11 /opt/my3306.cnf
-rw-r--r-- 1 root root 9294 12月 27 18:09 /opt/my3307.cnf
-rw-r--r-- 1 root root 9294 12月 27 18:10 /opt/my3308.cnf
[ [email protected] ~]#
mysql5.7.17開始引入mysql的MGR特性簡單介紹MySQL5.7開啟Gtid+MGR特性的引數說明:
此次演示環境以mysql3306例項作為第一個MGR的啟動例項,
MySQL5.7開啟Gtid+MGR特性my3306cnf配置檔案必須開啟引數如下:
server_id =1
socket =/tmp/mysql3306.sock
##:for binlog
binlog_format =row
log_bin =/home/mysql3306/binlog/mysql-bin
binlog_checksum=NONE
log_slave_updates=ON
##:for gtid
#gtid_executed_compression_period =1000
gtid_mode =on
enforce_gtid_consistency =on
####for group_replication
master_info_repository=TABLE
relay_log_info_repository=TABLE
binlog_checksum=NONE
log_slave_updates=ON
transaction_write_set_extraction=XXHASH64
loose-group_replication_group_name="3db33b36-0e51-409f-a61d-c99756e90155" ##格式要和server-uuid一致,但是不能和機器上mysql例項的uuid重複
loose-group_replication_start_on_boot=off ##禁止在重啟mysql服務時開啟組複製
loose-group_replication_local_address= "192.168.1.233:33061" #####埠隨便指定一個,但是不要和機上其他服務的埠衝突就行,告訴外掛本機使用網路地址192.168.1.233和埠33071與組中的其他成員進行內部通訊。
loose-group_replication_group_seeds= "192.168.1.233:33061,192.168.1.233:33071,192.168.1.233:33081"
loose-group_replication_ip_whitelist="192.168.1.233/24" ##此處必須設定ip白名單,否則在開啟MGR時,會報錯。
loose-group_replication_bootstrap_group= off ##
##loose-group_replication_single_primary_mode=off ##在配置MGR的mutl-master模式時開啟
##loose-group_replication_enforce_update_everywhere_checks=on ##在配置MGR的mutl-master模式時開啟
my3307.cnf配置檔案和my3306.cnf中不同的是把loose-group_replication_local_address修改為 "192.168.1.233:33071"
my3308.cnf配置檔案和my3306.cnf中不同的是把loose-group_replication_local_address修改為 "192.168.1.233:33081"
啟動mysql例項:
/usr/local/mysql/bin/mysqld --defaults-file=/opt/my3306.cnf --initialize
/usr/local/mysql/bin/mysqld --defaults-file=/opt/my3307.cnf --initialize
/usr/local/mysql/bin/mysqld --defaults-file=/opt/my3308.cnf --initialize
為了在配置MGR的過程中防止出錯,在啟動mysql之前把auto.cnf 修改為3個不相同的uuid
[[email protected] ~]# cat /home/mysql3306/data/auto.cnf
[auto]
server-uuid=1ec3ac79-08ed-11e9-8da8-bcaec502b368
[[email protected] ~]# cat /home/mysql3307/data/auto.cnf
[auto]
server-uuid=288e7bbe-08f3-11e9-a605-bcaec502b311
[[email protected] ~]# cat /home/mysql3308/data/auto.cnf
[auto]
server-uuid=883c9421-08f5-11e9-8d47-bcaec502b333
啟動mysql服務:
/usr/local/mysql/bin/mysqld --defaults-file=/opt/my3306.cnf &
/usr/local/mysql/bin/mysqld --defaults-file=/opt/my3307.cnf &
/usr/local/mysql/bin/mysqld --defaults-file=/opt/my3308.cnf &
第二.開啟MGR配置過程:
mysql3306作為第一個節點開啟MGR:
SET SQL_LOG_BIN=0;
CREATE USER [email protected]'%';
GRANT REPLICATION SLAVE ON *.* TO [email protected]'%' IDENTIFIED BY 'Zykjwujianwei';
FLUSH PRIVILEGES;
SET SQL_LOG_BIN=1;
CHANGE MASTER TO MASTER_USER='rpl_user', MASTER_PASSWORD='Zykjwujianwei' FOR CHANNEL 'group_replication_recovery';
install PLUGIN group_replication SONAME 'group_replication.so';
set global group_replication_bootstrap_group=ON;
start group_replication;
select * from performance_schema.replication_group_members;
注意:只有在第一個開啟MGR的mysql3306節點上才執行這個引數set global group_replication_bootstrap_group=ON;
[email protected] [(none)]>select * from performance_schema.replication_group_members;
+---------------------------+--------------------------------------+-----------------------+-------------+--------------+
| CHANNEL_NAME | MEMBER_ID | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE |
+---------------------------+--------------------------------------+-----------------------+-------------+--------------+
| group_replication_applier | 1ec3ac79-08ed-11e9-8da8-bcaec502b368 | localhost.localdomain | 3306 | ONLINE |
+---------------------------+--------------------------------------+-----------------------+-------------+--------------+
3 rows in set (0.00 sec)
[email protected] [(none)]>
節點mysql3307操作:
SET SQL_LOG_BIN=0;
CREATE USER [email protected]'%';
GRANT REPLICATION SLAVE ON *.* TO [email protected]'%' IDENTIFIED BY 'Zykjwujianwei';
FLUSH PRIVILEGES;
SET SQL_LOG_BIN=1;
CHANGE MASTER TO MASTER_USER='rpl_user', MASTER_PASSWORD='Zykjwujianwei' FOR CHANNEL 'group_replication_recovery';
install PLUGIN group_replication SONAME 'group_replication.so';
start group_replication;
select * from performance_schema.replication_group_members;
[email protected] [(none)]>select * from performance_schema.replication_group_members;
+---------------------------+--------------------------------------+-----------------------+-------------+--------------+
| CHANNEL_NAME | MEMBER_ID | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE |
+---------------------------+--------------------------------------+-----------------------+-------------+--------------+
| group_replication_applier | 1ec3ac79-08ed-11e9-8da8-bcaec502b368 | localhost.localdomain | 3306 | ONLINE |
| group_replication_applier | 288e7bbe-08f3-11e9-a605-bcaec502b311 | localhost.localdomain | 3307 | ONLINE |
+---------------------------+--------------------------------------+-----------------------+-------------+--------------+
節點mysql3308操作:
SET SQL_LOG_BIN=0;
CREATE USER [email protected]'%';
GRANT REPLICATION SLAVE ON *.* TO [email protected]'%' IDENTIFIED BY 'Zykjwujianwei';
FLUSH PRIVILEGES;
SET SQL_LOG_BIN=1;
CHANGE MASTER TO MASTER_USER='rpl_user', MASTER_PASSWORD='Zykjwujianwei' FOR CHANNEL 'group_replication_recovery';
install PLUGIN group_replication SONAME 'group_replication.so';
start group_replication;
select * from performance_schema.replication_group_members;
[email protected] [(none)]>select * from performance_schema.replication_group_members;
+---------------------------+--------------------------------------+-----------------------+-------------+--------------+
| CHANNEL_NAME | MEMBER_ID | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE |
+---------------------------+--------------------------------------+-----------------------+-------------+--------------+
| group_replication_applier | 1ec3ac79-08ed-11e9-8da8-bcaec502b368 | localhost.localdomain | 3306 | ONLINE |
| group_replication_applier | 288e7bbe-08f3-11e9-a605-bcaec502b311 | localhost.localdomain | 3307 | ONLINE |
| group_replication_applier | 883c9421-08f5-11e9-8d47-bcaec502b333 | localhost.localdomain | 3308 | ONLINE |
+---------------------------+--------------------------------------+-----------------------+-------------+--------------+
3 rows in set (0.00 sec)
第三.測試效果:
[email protected] [(none)]>select @@port;create database test01;show databases;
+--------+
| @@port |
+--------+
| 3306 |
+--------+
1 row in set (0.00 sec)
Query OK, 1 row affected (0.00 sec)
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
| test01 |
+--------------------+
5 rows in set (0.00 sec)
[email protected] [(none)]>select @@port;create database test02;show databases;
+--------+
| @@port |
+--------+
| 3307 |
+--------+
1 row in set (0.00 sec)
ERROR 1290 (HY000): The MySQL server is running with the --super-read-only option so it cannot execute this statement
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
| test01 |
+--------------------+
5 rows in set (0.00 sec)
[email protected] [(none)]>
[email protected] [(none)]>select @@port;create database test02;show databases;
+--------+
| @@port |
+--------+
| 3308 |
+--------+
1 row in set (0.00 sec)
ERROR 1290 (HY000): The MySQL server is running with the --super-read-only option so it cannot execute this statement
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
| test01 |
+--------------------+
5 rows in set (0.00 sec)
[email protected] [(none)]>
測試說明:
發現mysql3306上建立的test01同步到了其他的2個mysql。然而在MGR組中mysql3307 和mysql3308是隻讀,不能寫入的。
關掉mysql3306服務會發生什麼?? 直接會從mysql3307和mysql3308例項中選擇一個作為mysql主庫,另外一個作為新主庫的slave庫
關掉mysql3306服務一段時間後,有重新開啟mysql3306,並且start group_replication;重新加入到MGR組會發生什麼??
此時mysql3306不會切換為master庫,而是成為了宕機後新主庫的slave庫。
mysql的mult-master多主寫入的模式:
MGR預設的模式也就是咱們演示的single-master模式(單主寫入模式)。那如何開啟mysql的mult-master多主寫入的模式呢??下面簡單介紹下:
首先要先關閉只讀的從庫mysql3307和mysql3308例項最後關閉mysql3306
其次在各自的my.cnf配置檔案中開啟如下引數:
loose-group_replication_single_primary_mode=off ##在配置MGR的mutl-master模式時開啟
loose-group_replication_enforce_update_everywhere_checks=on ##在配置MGR的mutl-master模式時開啟
最後啟動mysql例項,按照配置MGR-single-master的順序步驟來進行配置MGR的multi-master模式
my.cnf配置檔案演示:
mysql3307完整的配置檔案如下:
[[email protected] ~]# cat /opt/my3307.cnf
[client]
port = 3307
[mysql]
auto-rehash
prompt="\[email protected]\h [\d]>"
#pager="less -i -n -S"
#tee=/opt/mysql/query.log
[mysqld]
####: for global
user =mysql
basedir =/usr/local/mysql/
datadir =/home/mysql3307/data
server_id =2
port =3307
character_set_server =utf8
explicit_defaults_for_timestamp =off
log_timestamps =system
socket =/tmp/mysql3307.sock
read_only =0
skip_name_resolve =1
auto_increment_increment =1
auto_increment_offset =1
lower_case_table_names =1
secure_file_priv =
open_files_limit =65536
max_connections =1000
thread_cache_size =64
table_open_cache =81920
table_definition_cache =4096
table_open_cache_instances =64
max_prepared_stmt_count =1048576
####: for binlog
binlog_format =row
log_bin =/home/mysql3307/binlog/mysql-bin
binlog_rows_query_log_events =on
#log_slave_updates =on
expire_logs_days =7
binlog_cache_size =65536
#binlog_checksum =none
sync_binlog =1
slave-preserve-commit-order =ON
####: for error-log
log_error =/home/mysql3307/logs/error.log
general_log =off
general_log_file =/home/mysql3307/logs/general.log
####: for slow query log
slow_query_log =on
slow_query_log_file =/home/mysql3307/logs/slow.log
#log_queries_not_using_indexes =on
long_query_time =1.000000
####: for gtid
#gtid_executed_compression_period =1000
gtid_mode =on
enforce_gtid_consistency =on
####: for replication
skip_slave_start =1
#master_info_repository =table
#relay_log_info_repository =table
slave_parallel_type =logical_clock
slave_parallel_workers =4
#rpl_semi_sync_master_enabled =1
#rpl_semi_sync_slave_enabled =1
#rpl_semi_sync_master_timeout =1000
#plugin_load_add =semisync_master.so
#plugin_load_add =semisync_slave.so
binlog_group_commit_sync_delay =100
binlog_group_commit_sync_no_delay_count = 10
####for group_replication
master_info_repository=TABLE
relay_log_info_repository=TABLE
binlog_checksum=NONE
log_slave_updates=ON
transaction_write_set_extraction=XXHASH64
loose-group_replication_group_name="3db33b36-0e51-409f-a61d-c99756e90155"
loose-group_replication_start_on_boot=off
loose-group_replication_local_address= "192.168.1.233:33071"
loose-group_replication_group_seeds= "192.168.1.233:33061,192.168.1.233:33071,192.168.1.233:33081"
loose-group_replication_ip_whitelist="192.168.1.233/24"
##loose-group_replication_single_primary_mode=off ##在配置MGR的mutl-master模式時開啟
##loose-group_replication_enforce_update_everywhere_checks=on ##在配置MGR的mutl-master模式時開啟
####: for innodb
default_storage_engine =innodb
default_tmp_storage_engine =innodb
innodb_data_file_path =ibdata1:1024M:autoextend
innodb_temp_data_file_path =ibtmp1:12M:autoextend
innodb_buffer_pool_filename =ib_buffer_pool
innodb_log_group_home_dir =/home/mysql3307/data
innodb_log_files_in_group =3
innodb_log_file_size =1024M
innodb_file_per_table =on
innodb_online_alter_log_max_size =128M
innodb_open_files =65535
innodb_page_size =16k
innodb_thread_concurrency =0
innodb_read_io_threads =4
innodb_write_io_threads =4
innodb_purge_threads =4
innodb_page_cleaners =4
# 4(重新整理lru髒頁)
innodb_print_all_deadlocks =on
innodb_deadlock_detect =on
innodb_lock_wait_timeout =20
innodb_spin_wait_delay =128
innodb_autoinc_lock_mode =2
innodb_io_capacity =200
innodb_io_capacity_max =2000
#--------Persistent Optimizer Statistics
innodb_stats_auto_recalc =on
innodb_stats_persistent =on
innodb_stats_persistent_sample_pages =20
innodb_adaptive_hash_index =on
innodb_change_buffering =all
innodb_change_buffer_max_size =25
innodb_flush_neighbors =1
#innodb_flush_method =
innodb_doublewrite =on
innodb_log_buffer_size =128M
innodb_flush_log_at_timeout =1
innodb_flush_log_at_trx_commit =1
innodb_buffer_pool_size =4096M
innodb_buffer_pool_instances =4
autocommit =1
#--------innodb scan resistant
innodb_old_blocks_pct =37
innodb_old_blocks_time =1000
#--------innodb read ahead
innodb_read_ahead_threshold =56
innodb_random_read_ahead =OFF
#--------innodb buffer pool state
innodb_buffer_pool_dump_pct =25
innodb_buffer_pool_dump_at_shutdown =ON
innodb_buffer_pool_load_at_startup =ON
到此處mysql5.7.24的Grid+MGR模式演示完畢