mysql5.7 GTIDマスターコピーモード-新しいslave 1を追加

6926 ワード

実験シーンの説明と目的:
GTIDの主従モードは、現在は一主一従で、もう一つのslaveを加えて一主二従のモードにしたいと思っています.テストのデータベースが大きくないためmysqldumpでデータをバックアップし、データベースが大きい場合は、他のslaveのバックアップで新しいslaveを構築する方法を考えることができます.
1.マスターのバックアップ
mysql> FLUSH TABLE WITH READ LOCK;
Query OK, 0 rows affected (0.01 sec)
[root@qht131 backup]# mysqldump -u root -p --lock-all-tables --master-data=2 --flush-logs --all-databases --triggers --routines --events > full.sql
[root@qht131 backup]# scp full.sql 172.17.61.133:/u01/backup

現在のgtidを記録する:
mysql>  show global variables like 'gtid_%';
+----------------------------------+-------------------------------------------+
| Variable_name                    | Value                                     |
+----------------------------------+-------------------------------------------+
| gtid_executed                    | 8d8746fb-2cc6-11e8-b1b6-000c295c63e0:1-11 |
| gtid_executed_compression_period | 1000                                      |
| gtid_mode                        | ON                                        |
| gtid_owned                       |                                           |
| gtid_purged                      |                                           |
+----------------------------------+-------------------------------------------+
5 rows in set (0.09 sec)

XtrabackupならXtrabackup_binlog_infoファイルにはglobalが含まれています.gtid_purged='XXXXXXX:XXXXX'の情報です.
2.新しいslaveでデータベースを作成し、Masterのバックアップを復元
    2.1.ライブラリ作成方法:https://blog.csdn.net/jolly10/article/details/79566640
    2.2.完全なバックアップを復元するには、次の手順に従います.
[root@qht133 backup]# mysql -uroot -p < full.sql

2.3新しいslaveでの修正/etc/my.cnf,gtidを開く
[root@qht133 backup]# cat /etc/my.cnf
[mysqld]
socket = /usr/local/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
gtid_mode=on #  gtid
enforce_gtid_consistency=on #  gtid   
server-id=10003  #server id
skip_slave_start=1 #              
#log_bin = /u01/mysql/mysql_bin
#skip-grant-tables
#innodb_flush_log_at_trx_commit=1
#sync_binlog=1
relay-log=/u01/mysql/slave_relay_bin
expire_logs_days=10
relay_log_recovery=on
relay_log_info_repository=TABLE

データベースの再起動:
[root@qht133 backup]# service mysql restart
Shutting down MySQL..                                      [  OK  ]
Starting MySQL..                                           [  OK  ]

3.新しいslaveレプリケーションの正確性を検証するために、masterで操作して、slaveが正しく同期できるかどうかを見ます.
mysql> use l5m
Database changed
mysql> select count(*) from test_emp;
+----------+
| count(*) |
+----------+
|  1099000 |
+----------+
1 row in set (0.67 sec)

mysql> delete from test_emp limit 1000;
Query OK, 1000 rows affected (0.08 sec)

mysql> select count(*) from test_emp;
+----------+
| count(*) |
+----------+
|  1098000 |
+----------+
1 row in set (0.18 sec)

mysql> commit;
Query OK, 0 rows affected (0.00 sec)

mysql> show global variables like 'gtid_%';
+----------------------------------+-------------------------------------------+
| Variable_name                    | Value                                     |
+----------------------------------+-------------------------------------------+
| gtid_executed                    | 8d8746fb-2cc6-11e8-b1b6-000c295c63e0:1-12 |
| gtid_executed_compression_period | 1000                                      |
| gtid_mode                        | ON                                        |
| gtid_owned                       |                                           |
| gtid_purged                      |                                           |
+----------------------------------+-------------------------------------------+
5 rows in set (0.01 sec)

4.新しいslaveでレプリケーションを開始します.
まず、現在のgtidを確認します.
mysql>  show global variables like 'gtid_%';
+----------------------------------+-------------------------------------------+
| Variable_name                    | Value                                     |
+----------------------------------+-------------------------------------------+
| gtid_executed                    | 8d8746fb-2cc6-11e8-b1b6-000c295c63e0:1-11 |
| gtid_executed_compression_period | 1000                                      |
| gtid_mode                        | ON                                        |
| gtid_owned                       |                                           |
| gtid_purged                      | 8d8746fb-2cc6-11e8-b1b6-000c295c63e0:1-11 |
+----------------------------------+-------------------------------------------+
5 rows in set (0.00 sec)

新しいslaveライブラリはmasterから復元されましたgtid_purgedは自動的に1-11の値を持ち、手動でreset masterを実行する必要はありません.set global gtid_purged='xxxx',mysql 5.7この方面はまた強化しました!(@@global.gtid_executedが空の場合のみ、@@global.gtid_purgedを動的に設定できます.したがって、@global.gtid_executedはRESET MASTERでクリアできます.)
コピーを直接オンにすればいいです.
mysql> change master to
    -> master_host='172.17.61.131',
    -> master_port=3306,
    -> master_user='repl',
    -> master_password='repl',
    -> master_auto_position=1;
Query OK, 0 rows affected, 2 warnings (0.07 sec)
mysql> start slave;
mysql> show global variables like 'gtid_%';
+----------------------------------+-------------------------------------------+
| Variable_name                    | Value                                     |
+----------------------------------+-------------------------------------------+
| gtid_executed                    | 8d8746fb-2cc6-11e8-b1b6-000c295c63e0:1-12 |
| gtid_executed_compression_period | 1000                                      |
| gtid_mode                        | ON                                        |
| gtid_owned                       |                                           |
| gtid_purged                      | 8d8746fb-2cc6-11e8-b1b6-000c295c63e0:1-12 |
+----------------------------------+-------------------------------------------+
5 rows in set (0.01 sec)

完全に準備した後、masterで変更したデータが同期されているかどうかを確認します.
mysql> use l5m;
Database changed
mysql>  select count(*) from test_emp;
+----------+
| count(*) |
+----------+
|  1098000 |
+----------+
1 row in set (0.40 sec)

問題なく、データは新しいslaveに同期しました.
参照先:
https://www.cnblogs.com/zejin2008/p/7705473.html
http://www.cnblogs.com/luckcs/articles/6295992.html