この記事では主にMySQLマスタースレーブレプリケーションの実践 - ログポイントに基づくレプリケーションについて詳しく紹介します。興味のある方は参考にしてください。
ログポイントに基づくレプリケーション
1. メインデータベースとスレーブデータベースに専用のレプリケーションアカウントを作成します
MariaDB [employees]> create user 'repl'@'172.%' identified by '123456';
本番環境のパスワードは、特定のパスワード強度を達成するために関連する仕様に準拠する必要があり、スレーブで指定されることに注意してください。データベース メイン ライブラリは特定のネットワーク セグメントでのみアクセスできます
2. メイン ライブラリとスレーブ ライブラリにコピー権限を付与します
3. メイン ライブラリを設定します
バイナリ ログを有効にするには、サービスと server_id を再起動する必要があることに注意してください。は動的パラメーターです。コマンドラインと構成ファイルを組み合わせて、再起動せずに永続的な構成を実現できます。server_id はクラスター内で一意であることに注意してください。
MariaDB [employees]> grant replication slave on *.* to 'repl'@'172.%';
注: ログとデータを分離することは良い習慣です。それらを別のデータ パーティションに置くのが最善です
4. スレーブ ライブラリを設定します
オプション log_slave_update は、リンク レプリケーションが設定されている場合、このオプションが必要であることに注意してください。 server_id がクラスター内で一意であることを確認します。
[mysqld] log_bin = /var/log/mysql/mariadb-bin log_bin_index = /var/log/mysql/mariadb-bin.index binlog_format = row server_id = 101
5. スレーブ データベースからデータを初期化します
ここでは、メイン データベースのバックアップに Mysqldump を使用します。ロックフリーのホット バックアップには xtrabackup を使用することをお勧めします。 (innodb エンジンに基づく)。
メイン データベース上の従業員データベースをバックアップします。データ
コードは次のとおりです:
[mysqld] # replication log_bin = /var/log/mysql/mariadb-bin log_bin_index = /var/log/mysql/mariadb-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 log_slave_updates = ON read_only
scp または docker ボリュームを介してバックアップ ファイルbackup.sql をスレーブ サーバーにマウントし、インポートします。それをスレーブ ライブラリに追加します
mysqldump --single-transaction --master-data=1 --triggers --routines --databases employees -u root -p >> backup.sql
6. 既存のマスター@172.20 .0.2 とスレーブ @172.20.0.3 のレプリケーション リンクを開始します。データは mysqldump を通じてスレーブ データベース スレーブに同期されています。スレーブ サーバー スレーブ
mysql -u root -p < backup.sql
スレーブ データベースでレプリケーション リンクを開始します
MariaDB [(none)]> CHANGE MASTER TO MASTER_HOST='master', MASTER_USER='repl', MASTER_PASSWORD='123456', MASTER_LOG_FILE='mariadb-bin.000029', MASTER_LOG_POS=516; Query OK, 0 rows affected (0.02 sec)
7. スレーブ データベースで、ライブラリのスレーブ ステータスを確認します
Slave_IO_Running および Slave_SQL_Running が YES である必要があります。エラーが発生した場合は、プロンプト情報を読む必要があります。 Last_IO_Error または Last_SQL_Error の詳細
MariaDB [(none)]> start slave; Query OK, 0 rows affected (0.01 sec)
8. メイン ライブラリのダンプ スレッドを確認します
ビンログ ダンプ スレッドが正しく開始されているかどうかを確認します
MariaDB [(none)]> show slave status\G *************************** 1. row *************************** Slave_IO_State: Waiting for master to send event Master_Host: master Master_User: repl Master_Port: 3306 Connect_Retry: 60 Master_Log_File: mariadb-bin.000029 Read_Master_Log_Pos: 516 Relay_Log_File: relay-bin.000002 Relay_Log_Pos: 539 Relay_Master_Log_File: mariadb-bin.000029 Slave_IO_Running: Yes Slave_SQL_Running: Yes Replicate_Do_DB: Replicate_Ignore_DB: Replicate_Do_Table: Replicate_Ignore_Table: Replicate_Wild_Do_Table: Replicate_Wild_Ignore_Table: Last_Errno: 0 Last_Error: Skip_Counter: 0 Exec_Master_Log_Pos: 516 Relay_Log_Space: 831 Until_Condition: None Until_Log_File: Until_Log_Pos: 0 Master_SSL_Allowed: No Master_SSL_CA_File: Master_SSL_CA_Path: Master_SSL_Cert: Master_SSL_Cipher: Master_SSL_Key: Seconds_Behind_Master: 0 Master_SSL_Verify_Server_Cert: No Last_IO_Errno: 0 Last_IO_Error: Last_SQL_Errno: 0 Last_SQL_Error: Replicate_Ignore_Server_Ids: Master_Server_Id: 101 Master_SSL_Crl: Master_SSL_Crlpath: Using_Gtid: No Gtid_IO_Pos: Replicate_Do_Domain_Ids: Replicate_Ignore_Domain_Ids: Parallel_Mode: conservative 1 row in set (0.00 sec)
バイナリ ダンプのコマンドが行 2 で開始されていることがわかります。レプリケーション スレッドが正常に開始されたことを証明します
9. 概要利点
フェイルオーバー中に新しいプライマリのログ オフセットを再取得することがより困難になります
ワンマスターでは、マルチスレーブ環境では、古いマスターがダウンし、クラスター内で新しいマスターが選択された場合、他のスレーブ ライブラリは新しいマスターを再同期する必要があります。これは、各 DB のバイナリログが独立して存在するため、それを見つけるのが困難です。同期が開始されたログポイント
以上がMySQL マスター/スレーブ レプリケーションの実践 - ログ ポイントに基づくレプリケーション コード例の詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。