
2 つのサーバー A と BI が固定データベース DBA と DBB の 2 つのサーバー間でレプリケーションを確立しようとしていますが、機能しません。構成テーブルは更新されません。なぜですか?
Master:(/etc/my.cnf)
server-id=4233865
log-bin=mysqld-bin
log-error=mysql-bin.err
relay-log=mysqld-relay-bin
Slave:(/etc/my.cnf)
symbolic-links=0
server-id=1359390567
relay-log-index = slave-relay-bin.index
relay-log = slave-relay-bin
replicate-do-db=DBA,DBB
スレーブ状態表示
Slave_IO_State Waiting for master to send event
Master_Host 10.0.0.163
Master_User repl
Master_Port 3306
Connect_Retry 60
Master_Log_File mysqld-bin.000007
Read_Master_Log_Pos 770800
Relay_Log_File slave-relay-bin.000017
Relay_Log_Pos 770947
Relay_Master_Log_File mysqld-bin.000007
Slave_IO_Running Yes
Slave_SQL_Running Yes
Replicate_Do_DB DBA,DBB
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 770800
Relay_Log_Space 1134838
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
マスターステータス
mysql> show master status;
+-------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+-------------------+----------+--------------+------------------+
| mysqld-bin.000007 | 608837 | | |
+-------------------+----------+--------------+------------------+
1 row in set (0.00 sec)
マスターによって作成されたレプリケーションユーザーを使用して、スレーブからログインできます。私が与えたユーザーのためにREPLICATION_SLAVE on % PERMISSIONS
。
私は何を逃したことがありませんか?No Error in Logs
修正する
プロセスIDユーザーホストデータベースコマンド時間ステータスSQLクエリ
(キル) (2) (システムユーザー) (なし) (接続) (149410) (ホストがイベントを送信するのを待っている) (---)
Kill 1 System User None Connect -38185 スレーブがすべてのリレーログを読み取り、スレーブ I/O スレッドが更新されるのを待っています。 ---
ご覧のとおり、SQLクエリは常に---なぜですか?
答え1
デバッグ目的でスレーブに対するフルアクセス権を持つユーザーを使用します。コピーが成功したら、コピーユーザー権限をリセットしようとしています。
私が見る主な問題は、スレーブがマスターになると予想するログの場所ですが、770800
マスターの実際の場所はです608837
。奴隷はしなければならないいいえ所有者より先に。
スレーブを停止し、マスターをロックし、マスターをダンプし、スレーブからマスターを復元し、両方でレプリケーションを設定し、スレーブをロック解除してレプリケーション構成プロセスを「再開」する必要があります。私はこれをしなければなりません。毎回複製が中断されました。 :(
アップデート1:
以下は、私がしばらく前にMySQLレプリケーションについて書いたいくつかのメモです。
複製を有効にする:
残念ながら、SLAVEを起動するバイナリログの静的場所を取得するためにMASTERデータベースを完全にロックしないと、MySQLレプリケーション設定を完了できません。
この構成の練習の範囲は、/etc/my.cnfファイルを正しく構成し、MASTERおよびSLAVEサーバーで適切なアカウントを設定した後にMASTERおよびSLAVEを構成することです。
MySQLレプリケーションを設定するには、MASTERで2つのターミナルセッションとSLAVEで1つを開く必要があります。ターミナル1と2は、MASTERで開かれる2つのセッションを意味します。ターミナル 3 は SLAVE セッションを参照します。
第1ターミナル:
- MySQLへの接続所有者コマンドラインクライアントを使用してください。
- クエリの実行
FLUSH TABLES WITH READ LOCK;
- これにより完全にロックされます。所有者。
- MYSQL クライアントを終了しないでください。
第2ターミナル:
mysqldump
コピーするデータベースでaを実行します。- データベースダンプが共有ストレージにあるか、スレーブサーバーにコピーされていることを確認してください。
- MySQLへの接続所有者コマンドラインクライアントを使用してください。
- クエリの実行
SHOW MASTER STATUS;
- 書いて降りる文書そして場所リスト。
第3ターミナル:
- MASTERから取得したデータベースダンプを復元します。
- MySQLへの接続奴隷コマンドラインクライアントを使用してください。
- クエリの実行
CHANGE MASTER TO MASTER_HOST='<master host>', MASTER_USER='<replication user>', MASTER_PASSWORD='<replication password>', MASTER_LOG_FILE='<Filename obtained from Terminal 2>', MASTER_LOG_POS=<Position obtained from Terminal 2>;
- これでレプリケーションを有効にする必要がありますが、ログの場所は増やすべきではありません。
- 複製が正しく開始されない場合は、必ずmysqldログファイルを確認してください。
- 実装する
SHOW SLAVE STATUS;
- 列が一致する
Master_Log_File
ことを確認Read_Master_Log_Pos
文書そして場所第2ターミナルへの列です。
第1ターミナル:
- クエリが入ったら、クエリを実行して
SHOW MASTER STATUS;
メモします。文書そして場所リスト。
- クエリが入ったら、クエリを実行して
第3ターミナル:
HOW MASTER STATUS;
ターミナル1で実行直後に合計列をSHOW SLAVE STATUS;
比較します。Master_Log_File
Read_Master_Log_Pos
文書そして場所それぞれ第1ターミナルに位置しています。
手順4と5を何度も繰り返します。ファイルと場所がうまく一致すると、レプリケーションは正常に有効になります。おめでとうございます。
レプリケーションを無効にする:
レプリケーションの無効化所有者/etc/my.cnf
、その行を編集してコメントする必要があります(該当する行の詳細については、参考資料を参照)。
SLAVEでレプリケーションを無効にするには、クエリを実行する必要がありますSTOP SLAVE;
。
スレーブレプリケーションを再度有効にするには、クエリを実行する必要がありますSTART SLAVE;
。
レプリケーションのトラブルシューティング:
複製が中断される場合があります。これは通常、UPDATEクエリの急増によって引き起こされます。複製が中断されると、マスターサーバーとスレーブサーバーのバイナリログが指数関数的に増加し始めます。クエリの急増の根本原因をすぐに特定して削除しないと、通常MySQLサーバーのディスク容量は10時間以内に完全に使い果たされます。
ストレージが枯渇しないようにする最速の方法は、MASTERでMySQLレプリケーションを完全に無効にし、SLAVEでMySQLを終了することです。
ストレージがいっぱいになったら、マスターとスレーブでレプリケーションを無効にしてから、マスターとスレーブからすべてのmysql-binファイルとmysqld-relay-binファイルを削除します。 RPMベースのMySQLディストリビューションを使用する場合、これらのファイルは通常/var/lib/mysqlにあります。バイナリログファイルの名前はグローバルmy.cnfで設定可能であるため、ファイルが存在しない場合は設定ファイルを確認してください。
破損が発生してレプリケーションが無効になった後にレプリケーションを再度有効にするには、この資料の前半のすべての詳細を完了する必要があります。
引用: