この記事では、MySQL実践的なマスター/スレーブ レプリケーション - GTID ベースのレプリケーションを主に紹介します。GTID ベースのレプリケーションは、MySQL 5.6 以降の新しいレプリケーション方法です。興味のある方は詳細をご覧ください。
GTID ベースのレプリケーション
はじめに
GTID ベースのレプリケーションは、MySQL 5.6 以降の新しいレプリケーション方法です。
GTID (グローバル トランザクション識別子) はグローバル トランザクション ID であり、すべてのトランザクションがメインデータベース 送信されたトランザクションはクラスター内で一意の ID を持ちます。
元のログベースのレプリケーションでは、指定されたエラーが指定されている場合、スレーブ ライブラリはどのオフセットからデータを同期するかをマスター ライブラリに伝える必要があります。
GTID ベースのレプリケーションでは、スレーブ ライブラリは実行されたトランザクションの GTID 値をマスター ライブラリに通知し、マスター ライブラリはすべてのトランザクションの GTID のリストを返します。未実行のトランザクションをスレーブ ライブラリに送信し、同じトランザクションが指定されたスレーブ データベースで 1 回だけ実行されるようにすることができます
1. マスター データベースにレプリケーション アカウントを作成し、権限を付与します。 GTID に基づくレプリケーションでは、スレーブ データベースで実行されていないデータが自動的にコピーされます。 トランザクション リプレイが行われるため、他のスレーブ ライブラリに同じアカウントを作成しないでください。同じアカウントを作成すると、レプリケーション リンク エラーが発生する可能性があります。本番環境のパスワードは、特定のパスワード強度を達成するために関連仕様に準拠する必要があり、メイン ライブラリはスレーブ ライブラリの特定のネットワーク セグメントでのみアクセスできることが規定されています。
mysql> create user 'repl'@'172.%' identified by '123456';
mysql> grant replication slave on *.* to 'repl'@'172.%';
mysql> select user, host from mysql.user; +-----------+-----------+ | user | host | +-----------+-----------+ | prontera | % | | root | % | | mysql.sys | localhost | | root | localhost | +-----------+-----------+ 4 rows in set (0.00 sec)
2. メイン ライブラリ サーバーを構成します
mysql> show grants for repl@'172.%'; +--------------------------------------------------+ | Grants for repl@172.% | +--------------------------------------------------+ | GRANT REPLICATION SLAVE ON *.* TO 'repl'@'172.%' | +--------------------------------------------------+ 1 row in set (0.00 sec)
GTID の一貫性を有効にすると、次のコマンドは使用できなくなりましたcreate table...select...
[mysqld] log_bin = /var/log/mysql/mysql-bin log_bin_index = /var/log/mysql/mysql-bin.index binlog_format = row server_id = 101 gtid_mode = ON enforce_gtid_consistency = ON #log_slave_updates = ON
実際には 2 つの独立した
event
mysql> create table dept select * from departments; ERROR 1786 (HY000): Statement violates GTID consistency: CREATE TABLE ... SELECT.
create temporary table
update
トランザクションテーブルと非トランザクションテーブル(MyISAM)mysql> begin; Query OK, 0 rows affected (0.00 sec) mysql> create temporary table dept(id int); ERROR 1787 (HY000): Statement violates GTID consistency: CREATE TEMPORARY TABLE and DROP TEMPORARY TABLE can only be executed outside transactional context. These statements are also not allowed in a function or trigger because functions and triggers are also considered to be multi-statement transactions.
mysql> CREATE TABLE `dept_innodb` (id INT(11) UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT); Query OK, 0 rows affected (0.04 sec) mysql> CREATE TABLE `dept_myisam` (id INT(11) UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT) ENGINE = `MyISAM`; Query OK, 0 rows affected (0.03 sec) mysql> begin; Query OK, 0 rows affected (0.00 sec) mysql> insert into dept_innodb(id) value(1); Query OK, 1 row affected (0.00 sec) mysql> insert into dept_myisam(id) value(1); ERROR 1785 (HY000): Statement violates GTID consistency: Updates to non-transactional tables can only be done in either autocommitted statements or single-statement transactions, and never in the same statement as updates to transactional tables.
4. スレーブ データベース データの初期化 - [オプション]
最初にマスター ライブラリのデータをバックアップします。コードは次のとおりです:[mysqld] log_bin = /var/log/mysql/mysql-bin log_bin_index = /var/log/mysql/mysql-bin.index server_id = 102 # slaves relay_log = /var/log/mysql/relay-bin relay_log_index = /var/log/mysql/relay-bin.index relay_log_info_file = /var/log/mysql/relay-bin.info enforce_gtid_consistency = ON log_slave_updates = ON read_only = ON master_info_repository = TABLE relay_log_info_repository = TABLE
一般的なエラー
ライブラリから SQL をインポートするときに発生します コードは次のとおりです :
mysqldump --single-transaction --master-data=2 --triggers --routines --all-databases --events -u root -p > backup.sql
5 を使用して、GTID ベースのレプリケーションを開始します
既存の master@172.20.0.2 と smile@172.20.0.3 を実行し、mysqldump Synchronize を渡します。データをスレーブデータベーススレーブに設定しますERROR 1840 (HY000) at line 24: @@GLOBAL.GTID_PURGED can only be set when @@GLOBAL.GTID_EXECUTED is empty.
mysql> change master to master_host='master', master_user='repl', master_password='123456', master_auto_position=1; Query OK, 0 rows affected, 2 warnings (0.06 sec)
ステータス
mysql> start slave;
6. 利点
ログ オフセットを手動で設定する必要がないため、エラーが発生します。転送は簡単に実行できます log_slave_updatesが有効になっている場合、スレーブライブラリはメインライブラリの変更を失いません
欠点
実行されるSQLには特定の制限があります
MySQL 5.6 以降のバージョンのみをサポートしており、以前の 5.6 バージョンの使用は推奨されません
以上がMySQL マスター/スレーブ レプリケーションの実践 - GTID ベースのレプリケーション コード共有の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。