MySQL は、レプリケーション プロセス中に、一方向レプリケーションと非同期レプリケーションをサポートします。サーバーはマスター サーバーとして機能し、1 つ以上の他のサーバーはスレーブ サーバーとして機能します。マスター サーバーは、バイナリ ログ ファイルに更新を書き込み、ログのローテーションを追跡するためにログ ファイルのインデックスを維持します。スレーブはマスターに接続すると、スレーブがログから読み取った最後に成功した更新の場所をマスターに通知します。スレーブ サーバーは、それ以降に発生した更新を受信し、ブロックしてマスター サーバーが次の更新を通知するのを待ちます。
マスター/スレーブ レプリケーションを使用する理由は何ですか?
1. マスターサーバー/スレーブサーバーの設定により堅牢性が向上します。マスターサーバーに問題が発生した場合は、バックアップとしてスレーブサーバーに切り替えることができます。
2. 顧客のクエリの処理負荷をマスター サーバーとスレーブ サーバーに分散することで、顧客の応答時間を短縮できます。ただし、競合が発生する可能性があるため、マスター サーバーとスレーブ サーバーを同時に更新しないでください。
3. レプリケーションを使用するもう 1 つの利点は、マスター サーバーに影響を与えることなく、スレーブ サーバーを使用してバックアップを実行できることです。マスターサーバーは、バックアッププロセス中に更新の処理を続行できます。
MySQL は 3 つのスレッドを使用してレプリケーション機能を実行します (マスター サーバーで 1 つ、スレーブ サーバーで 2 つです。START SLAVE が発行されると、スレーブ サーバーはマスター サーバーに接続するための I/O スレッドを作成し、マスター サーバーにバイナリを送信させます)マスター サーバーは、バイナリ ログの内容をスレーブ サーバーに送信するスレッドを作成します。スレーブ サーバーの I/O スレッドは、マスター サーバーの Binlog Dump スレッドによって送信された内容を読み取り、データをスレーブのローカル ファイルにコピーします。サーバー データ ディレクトリ、つまりリレー ログ。スレーブ サーバーはこのスレッドを使用してリレー ログを読み取り、ログに含まれる更新を実行して、マスター サーバーで発生したレプリケーションをクエリします。情報。
デフォルトのリレー ログは、host_name-relay-bin.nnnnnn という形式のファイル名を使用します。ここで、host_name はスレーブ サーバーのホスト名、nnnnnn はシーケンス番号で始まります。リレー ログ インデックス ファイルを追跡して、現在使用されているリレー ログを特定します。デフォルトでは、これらのファイルはスレーブ サーバーのデータ ディレクトリに作成されます。 SQL スレッドがリレー ログ内のすべてのイベントを実行すると、リレー ログは
サーバーから自動的に削除され、データ ディレクトリに 2 つの追加のステータス ファイルが作成されます
。--master.info およびリレーログ.info ステータス ファイルはハードディスクに保存され、次回スレーブ サーバーが起動するときにこれらのファイルが読み取られてバイナリの数が決定されます。マスター サーバーから読み取ったログ、および独自のリレー ログを処理する範囲。
マスター/スレーブ レプリケーションを設定するには、次の手順を実行します。
1. マスター サーバーとスレーブ サーバーにインストールされている MySQL のバージョンが同じであることを確認します。
レプリケーションでは、接続アカウントに REPLICATION SLAVE 権限を付与する必要があります (推奨)。他の権限を付与する必要はありませ
ん
。 GRANT REPLICATION SLAVE ON *.*
-> TO 'replication'. @'%.yourdomain.com' IDENTIFIED BY 'slavepass';
3.
FLUSH TABLES WITH READ LOCK ステートメントを実行して、すべてのテーブルとブロック書き込みステートメントをクリアします。
読み取りロックのあるテーブル;
mysql クライアント プログラムが終了しないようにします。ターミナルはメイン サーバー データ ディレクトリのスナップショットを取得します。
シェル> cd /usr/local/mysql/
シェル> tar -cvf /tmp/mysql-snapshot.tar ./data
スレーブサーバーのユーザーアカウントがマスターサーバーのユーザーアカウントと異なる場合は、 mysqlデータベース。この場合、データベースをアーカイブから除外する必要があります。また、ログ ファイル、master.info ファイル、relay-log.info ファイルをアーカイブに含める必要もありません。
FLUSH TABLES WITH READ LOCK によって設定された読み取りロックが有効な場合 (つまり、mysql クライアント プログラムが終了しない場合)、メイン サーバー上の現在のバイナリ ログ名とオフセット値を読み取ります。
mysql >SHOW
MASTER STATUS;
--- --------+----------+--------------+--------------- --- ----+
ファイルの位置 |
+--------------+----------+----- --- ------+------+
| マニュアル、mysql
| --- -------+----------+--------------+--------------- --- ---+
[ファイル] 列にはログ名が表示され、[位置] にはオフセットが表示されます。この例では、バイナリ ログ値はオフセット 73 の mysql-bin.003 です。この値を記録します。これらの値は、後でスレーブ サーバーを設定するときに必要になります。これらは、スレーブがマスターからの新しい更新を開始するレプリケーション座標を表します。
マスターサーバーの実行時に --logs-bin が有効になっていない場合、SHOW MASTER STATUS で表示されるログ名と場所の値は空になります。この場合、今後ログ ファイルとスレーブ サーバーの場所を指定するときに使用する必要がある値は、空の文字列 ('') と 4 です。
スナップショットを取得し、ログ名とオフセットを記録した後、戻り値を返します。書き込みアクティビティを有効にします:
mysql> UNLOCK TABLES;
4. マスターサーバーホスト上の my.cnf ファイルの [mysqld] セクションに log-bin オプションが含まれていることを確認します。このセクションには、server-id=Master_id オプションも必要です。master_id は、1 ~ 232–1 の正の整数値である必要があります。例:
[mysqld]
log-bin
server-id=1
これらのオプションが提供されていない場合は、オプションを追加してサーバーを再起動する必要があります。
5. スレーブ サーバー上の mysqld サービスを停止し、my.cnf ファイルに次の行を追加します。
[mysqld]
server-id=2
smile_id 値は Master_id 値と同じであり、1 ~ 232 の正の整数である必要があります。 –1の値。また、スレーブ サーバーの ID はマスター サーバーの ID とは異なる必要があります。
6. データをバックアップ ディレクトリに保存します。これらのファイルとディレクトリの権限が正しいことを確認してください。 MySQL サーバーを実行しているユーザーは、メインサーバーと同様に、ファイルの読み取りと書き込みができる必要があります。
Shell> chown -R mysql:mysql /usr/local/mysql/data
7. スレーブサーバーを起動します。スレーブ サーバーで次のステートメントを実行し、オプションの値をシステムの実際の値に置き換えます:
mysql> CHANGE MASTER TO
-> MASTER_HOST='master_host_name',
-> MASTER_USER='replication_user_name',
-> MASTER_PASSWORD='replication_password',
-> MASTER_LOG_FILE='recorded_log_file_name',
-> MASTER_LOG_POS=recorded_log_position;
8.
これら
の手順を実行した後、スレーブ サーバーはマスター サーバーに接続し、スナップショット以降に発生した更新。
9. レプリケーションエラーが発生した場合、スレーブサーバーのエラーログ(HOSTNAME.err)にもエラーメッセージが表示されます。
10. サーバーからコピーすると、ファイル master.info および HOSTNAME-relay-log.info がデータ ディレクトリに見つかります。スレーブはこれら 2 つのファイルを使用して、マスターのバイナリ ログがどの程度処理されたかを追跡します。何をしようとしているのかを正確に理解し、その重要性を完全に理解していない限り、これらのファイルを削除または編集しないでください。それでも、CHANGE MASTER TO ステートメントを使用することをお勧めします。