共計 5605 個字符,預計需要花費 15 分鐘才能閱讀完成。
本篇內容介紹了“Mysql 怎么增加節點”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓丸趣 TV 小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
我們知道,一組優秀的集群環境有一個很必要的特性,那就是可拓展性。Group Replication 的拓展性怎么樣呢?我們設定如下幾個場景,來看看 Group Replicaiton 是否方便拓展:
總執行的事務量較少,而且所有的 binlog 都保留完整。
總事務量較少,binlog 只保留部分。
總事務量很大,binlog 保留完整。
總事務量很大,binlog 只保留部分。
我們在對以上幾種場景進行分析
總事務量較少,binlog 保留完整。那么我們可以直接應用所有 binlog,來創建一個和現有環境相同的實例。
總事務量較少,binlog 保留部分。此場景中 binlog 丟失,無法應用所有 binlog 來創建一個和現有環境相同的實例。那么我們要得到一個和現有環境相同的實例,只有復制一個現有環境中的實例,然后再將這個實例添加到集群。復制的方法我能想到的有如下幾種:
mysqldump
xtrabackup
總事務量較多,binlog 保留完整。我們可以和第一種環境一樣,應用所有 binlog 來創建新實例。但是事務較多應用 binlog 需要非常多的時間。為了提高效率,我們還是采用復制實例的方式來創建新實例。
總事務較多,binlog 只保留部分。這個場景和第二個場景差不多,我們也只能采用復制實例的方式來創建新的實例。
所以,除了第一個場景外,其它的最好還是備份前的的數據后,恢復到新的 server 上再開啟同步,下面就做一下這個試驗:
機器名 IP 角色
qht131 172.17.61.131 primary
qht132 172.17.61.132 secdnode1
qht133 172.17.61.133 secdnode2
qht134 172.17.61.134 secdnode3
1. 檢查當前 mgr 的狀態:
mysql select * from performance_schema.replication_group_members ;
±————————–±————————————-±————±————±————-+
| CHANNEL_NAME | MEMBER_ID | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE |
±————————–±————————————-±————±————±————-+
| group_replication_applier | bb0dea82-58ed-11e8-94e5-000c29e8e89b | qht131 | 3306 | ONLINE |
| group_replication_applier | bb0dea82-58ed-11e8-94e5-000c29e8e90b | qht132 | 3306 | ONLINE |
| group_replication_applier | bb0dea82-58ed-11e8-94e5-000c29e8e91b | qht133 | 3306 | ONLINE |
±————————–±————————————-±————±————±————-+
1
建立一個表做測試數據:
mysql drop table test_mgr;
Query OK, 0 rows affected (0.05 sec)
mysql create table test_mgr (c1 int(11) primary key);
Query OK, 0 rows affected (0.07 sec)
mysql insert into test_mgr values(1);
Query OK, 1 row affected (0.01 sec)
1
將全庫備份一下復制到目標新庫:
[root@qht131 backup]# mysqldump -uroot -p –all-databases –triggers –routines –events –master-data=2 dbdump.db
[root@qht131 backup]# scp dbdump.db 172.17.61.134:/u01/backup
1
備份之后再對數據庫做一些操作:
mysql insert into test_mgr values(2);
Query OK, 1 row affected (0.00 sec)
mysql insert into test_mgr values(3);
Query OK, 1 row affected (0.03 sec)
mysql select * from test_mgr;
±—+
| c1 |
±—+
| 1 |
| 2 |
| 3 |
±—+
1
2.qht134 安裝好數據庫,將備份恢復過來:
[root@qht134 backup]# mysql -uroot -p dbdump.db
3. 配置 my.cnf,配置文件注意 server_id 以及 loose-group_replication_local_address 和 loose-group_replication_local_address。
[root@qht134 backup]# cat /etc/my.cnf
[client]
port = 3306
socket = /u01/mysql/mysql.sock
[mysql]
no-auto-rehash
[mysqld]
socket = /u01/mysql/mysql.sock
character_set_server= utf8
init_connect=‘SET NAMES utf8’
basedir= /usr/local/mysql
datadir= /u01/mysql
socket = /u01/mysql/mysql.sock
log-error= /u01/log/mysql/mysql_3306.err
pid-file= /u01/mysql/mysqld.pid
lower_case_table_names = 1
sql_mode= STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
secure-file-priv = /u01/backup
server-id=10004
log_bin = /u01/mysql/mysql_bin
#skip-grant-tables
#innodb_flush_log_at_trx_commit=1
#sync_binlog=1
#expire_logs_days=10
#max_binlog_size=1073741824
#autocommit=off
#long_query_time=15
#slow_query_log=on
log_slave_updates = ON
relay_log_info_repository = TABLE
master_info_repository = TABLE
transaction_write_set_extraction = XXHASH64
binlog_format = ROW
binlog_checksum = NONE
enforce_gtid_consistency = ON
gtid_mode = ON
loose-group_replication_group_name= aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa
loose-group_replication_start_on_boot=off
loose-group_replication_local_address= 172.17.61.134:33060
loose-group_replication_group_seeds= 172.17.61.131:33060,172.17.61.132:33060,172.17.61.133:33060,172.17.61.134:33060
loose-group_replication_bootstrap_group= off
1
重啟數據庫
1
[root@qht134 mysql]# service mysql start
Starting MySQL… [ OK ]
1
4. 修改原有節點的 memeber 信息:
在 qht131,qht132,qht133 以分別執行:
mysql set global group_replication_group_seeds=‘172.17.61.131:33060,172.17.61.132:33060,172.17.61.133:33060,172.17.61.134:33060’;
Query OK, 0 rows affected (0.02 sec)
1
5. 在新節點上建立復制用戶
mysql set sql_log_bin=0;
Query OK, 0 rows affected (0.00 sec)
mysql create user mgruser@’%’identified by‘mgruser’;
ERROR 1396 (HY000): Operation CREATE USER failed for‘mgruser’@’%
1
mysql set sql_log_bin=1;
Query OK, 0 rows affected (0.00 sec)
1
對了,復制用戶的信息都已經從 mysqldump 中恢復了過來,所以就不用重新建立了。
如果新節點不是備份恢復過來的,則需要重新建立復制用戶。
6. 安裝復制插件以及啟動新的復制節點
mysql install plugin group_replication soname‘group_replication.so’; #先 show plugins; 檢查一下有沒有安裝好復制插件,如已安裝好的話則跳過此步驟
mysql change master to
– master_user=‘mgruser’,
– master_password=‘mgruser’
– for channel‘group_replication_recovery’;
Query OK, 0 rows affected, 2 warnings (0.04 sec)
mysql start group_replication;
Query OK, 0 rows affected (3.40 sec)
1
7. 查詢點節狀態:
mysql select * from performance_schema.replication_group_members ;
±————————–±————————————-±————±————±————-+
| CHANNEL_NAME | MEMBER_ID | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE |
±————————–±————————————-±————±————±————-+
| group_replication_applier | bb0dea82-58ed-11e8-94e5-000c29e8e89b | qht131 | 3306 | ONLINE |
| group_replication_applier | bb0dea82-58ed-11e8-94e5-000c29e8e89c | qht134 | 3306 | ONLINE |
| group_replication_applier | bb0dea82-58ed-11e8-94e5-000c29e8e90b | qht132 | 3306 | ONLINE |
| group_replication_applier | bb0dea82-58ed-11e8-94e5-000c29e8e91b | qht133 | 3306 | ONLINE |
±————————–±————————————-±————±————±————-+
4 rows in set (0.04 sec)
1
發現 qht134 已成功加入了復制群組。
mysql select * from test_mgr;
±—+
| c1 |
±—+
| 1 |
| 2 |
| 3 |
±—+
3 rows in set (0.00 sec)
1
數據也同步到了最新的狀態。
8. 后續操作
為了下次 qht131,qht132,qht133 重啟后的 gr 配置仍然有效,需要修改 my.cnf 的配置:
oose-group_replication_group_seeds= 172.17.61.131:33060,172.17.61.132:33060,172.17.61.133:33060,172.17.61.134:33060
1
這樣保證在重啟數據庫后,GR 的配置是最新的。
“Mysql 怎么增加節點”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注丸趣 TV 網站,丸趣 TV 小編將為大家輸出更多高質量的實用文章!