MySQL 5.7下主従レプリケーション遅延ソリューション

3864 ワード

MySQLでのプライマリ・スレーブのレプリケーションの遅延問題は、業界内で大きな問題となっています.プライマリ・スレーブの遅延は、ネットワーク・ディスクなどの要因によって影響されますが、その最も主要な影響は、masterの多忙な書き込みでslaveがrelayから有効にならないことです.logでは最新の関連レコードが読み出され、データのリアルタイム性が高い業務にとってslaveのデータは最新の遅延ではなく、このとき主従の読み書き分離を使用すると少し目立つようになり、slaveでは最新のリアルタイムデータを調べることができず、slaveではリアルタイムデータに対する要求がそれほど高くないデータクエリーを行うことが多い.
MySQLの5.6バージョンになると、マルチスレッドの主従レプリケーションのメカニズムが導入され始め、MySQLの動作方式が単一プロセスマルチスレッドであることが知られているが、スレッドの多寡はMySQLの効率に大きく影響し、初期のMySQLの主従はすべて単一スレッドによって行われ、受賞者がレプリケーションに関連する客観的な要素のほかに自分の影響を受けるようになった.しかしMySQL 5.6ではマルチスレッドマスターレプリケーションはかなり完璧ではありません.MySQL 5.6でマスターレプリケーションのマルチスレッドは1つのスレッドで1つのマスターレプリケーションを処理し、ほとんどの生産環境では1つのデータベースで大量の操作を行うことが多いためです.では、MySQLのマルチスレッドマスターコピーは、以前のバージョンと同様に単一スレッドのマスターコピーであり、あまり実用的な意味はありません.このためMySQLの5.7バージョンではマルチスレッドマスターレプリケーションがさらに改善され、MySQL 5.7では論理クロック(CPUのような処理メカニズム)に従ってマルチスレッドが処理され、さらには半同期レプリケーションsemisyncでもPerformance Schemaテーブルを使用してレプリケーションスレッドを監視するため、MySQL 5.7でマスターレプリケーションはMySQL自身による遅延が大幅に低減された.構成も簡単です.salveで次のように構成します.
mysql> show global variables like 'slave_parallel_workers';#   0,    
+------------------------+-------+
| Variable_name          | Value |
+------------------------+-------+
| slave_parallel_workers | 0     |
+------------------------+-------+
1 row in set (0.01 sec)
mysql> set global slave_parallel_workers = 4;#                     
1 row in set (0.01 sec)
mysql> show global variables like '%slave_parallel_type%';#                  
+---------------------+----------+
| Variable_name       | Value    |
+---------------------+----------+
| slave_parallel_type | DATABASE |
+---------------------+----------+
1 row in set (0.01 sec)
mysql> stop slave;#               slave
Query OK, 0 rows affected (0.21 sec)
mysql> set global slave_parallel_type='logical_clock';
1 row in set (0.01 sec)
mysql> start slave;    
Query OK, 0 rows affected (0.08 sec)

このとき、実際の状況に応じて、プライマリ・セカンダリ・レプリケーション用にどのスレッドを開くかを決定します.slave上のスレッドのリストを見てください.
mysql> show full processlist;
+----+-------------+-----------+------+---------+------+--------------------------------------------------------+-----------------------+
| Id | User        | Host      | db   | Command | Time | State                                                  | Info                  |
+----+-------------+-----------+------+---------+------+--------------------------------------------------------+-----------------------+
| 16 | root        | localhost | NULL | Query   |    0 | starting                                               | show full processlist |
| 29 | system user |           | NULL | Connect |    3 | Waiting for master to send event                       | NULL                  |
| 30 | system user |           | NULL | Connect |    3 | Slave has read all relay log; waiting for more updates | NULL                  |
| 31 | system user |           | NULL | Connect |    3 | Waiting for an event from Coordinator                  | NULL                  |
| 32 | system user |           | NULL | Connect |    3 | Waiting for an event from Coordinator                  | NULL                  |
| 33 | system user |           | NULL | Connect |    3 | Waiting for an event from Coordinator                  | NULL                  |
| 34 | system user |           | NULL | Connect |    3 | Waiting for an event from Coordinator                  | NULL                  |
+----+-------------+-----------+------+---------+------+--------------------------------------------------------+-----------------------+
7 rows in set (0.00 sec)

これでMySQLの5.7バージョンのマルチスレッドマスターコピーが正常にオープンし、構成が完了するとslaveのdatadirディレクトリの下にslave_parallel_workersが設定したスレッドの数が同じスレッドファイル:
最後に配置した変数パラメータをmyに書き込む.cnfは、次の再起動を有効にします.
slave_parallel_workers = 4
slave_parallel_type= logical_clock

転載先:https://blog.51cto.com/jim123/1961241