ホームページ  >  記事  >  データベース  >  MySQL マスター/スレーブ データベースの同期

MySQL マスター/スレーブ データベースの同期

高洛峰
高洛峰オリジナル
2016-12-02 14:13:491219ブラウズ

環境:
メインサーバー: centos 5.2 mysql 5.1.35 ソースIP: 192.168.1.22
スレーブサーバー: centos 5.2 mysql 5.1.35 ソースIP: 192.168.1.33
設定:
1.メインサーバー
1.1を作成します。プリケーションユーザー、レプリケーション スレーブ権限付き。
mysql>*.* のレプリケーション スレーブを 'repl'@'192.168.1.22' に許可します。
1.2. my.cnf ファイルを編集します
vi /etc/my.cnf
Add
server-id=1
そして、log-bin バイナリログファイルを開きます
log-bin=mysql-bin
注: デフォルトのserver-id=1
1.3を削除し、mysqlデータベースを起動する必要があります
mysqld_safe –user=mysql &
1.4を設定します読み取りロック
mysql>読み取りロックでテーブルをフラッシュする;
1.5、binlog ログ ファイル名とオフセットを取得する
mysql>マスター ステータスを表示する;
+——————+————-+————– +———— ——+
| Binlog_Do_DB |
+————–+——————+
| bin.0000010 | |
+——————+————-+————–+——————+
1.6、同期するデータベースをバックアップします
mysqldump テストtest.sql
1.7、unlock
mysql>unlock tables;

2. サーバー
2.1から、my.cnfファイルを編集します
vi /etc/my.cnf
Add
server-id=2
注:デフォルトのserver-id=1
2.2を削除するには、スレーブデータベースを起動します
mysqld_safe –user=mysql &
2.3、それに応じてスレーブデータベースを設定します
mysql> master_host='192.168.1.22'
- > master_user='repl'
-> master_password='repl'
-> master_log_pos=106;
mysql> ;
show processlist コマンドを実行して、次のプロセスを表示します:
mysql>show processlistG
****************************** 2 . 行 *************** ************
ID: 2
ユーザー: システム ユーザー
ホスト:
db: NULL
コマンド: Connect
時刻: 2579
状態: すべてのリレー ログを読み取りました。スレーブ I/O スレッドが更新するのを待機しています
情報: NULL は、スレーブがマスターに接続し、ログの受け入れと実行を開始したことを意味します
2.5、スレーブ スレッドを確認しますstatus
mysql>スレーブステータスを表示;
****************** ****************** 1.行** *************************
Slave_IO_State: マスターがイベントを送信するのを待っています
Master_Host: 192.168.1.22
Master_User: repl
Master_Port: 3306
Connect_Retry : 60
Master_Log_File: mysql-bin.0000010
Read_Master_Log_Pos: 106
Relay_Log_File: centos-relay-bin
Relay_Log_Pos: 529
Relay_Master_Log_File: mysql-bin.0000010
スレーブ_IO_Running: はい
Slave_SQL_Running: はい
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: 106
Relay_ Log_Space: 830
Until_Condition: なし
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:
セット内の 1 行 (0.00 秒)

設定が正しいかどうかを確認してくださいは正しいです
スレーブサーバーで実行します

スレーブステータスGを表示します

マスターがイベントを送信するのを待っています
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
上記の2行が両方ともYesの場合は、構成が成功したことを意味します

テスト
1を作成します。メインサーバーテストデータベースのユーザーテーブル

mysql>use test;

mysql>create table user(id int);
2. スレーブサーバーのユーザーテーブルを表示します
mysql>use test;
mysql> のようなテーブルを表示します';
+————————-+
| Tables_in_test(ユーザー) |
+————————-+
|セット内の 1 行 (0.00 秒)
は、マスターとスレーブのデータ同期が成功したことを示します。

問題?
1. データベースからスレーブのステータスを確認するときに表示されます
レプリケーションが機能するには、マスターとスレーブの ID が異なる必要があるため、スレーブ I/O スレッドが停止します。 -id オプションはスレーブで使用する必要がありますが、これは常に意味があるわけではありません。使用する前にマニュアルを確認してください)
これは、スレーブ サーバーの my.cnf のサーバー ID が同じであることを意味します。

解決策:

my.cnf のサーバー ID を変更し、データベース サービスを再起動します。 my.cnf ファイルにはデフォルトでserver-id=1が設定されています

その他の指示
マスターサーバー my.cnf
#binlog-do-db=バックアップする必要があるデータベースの名前。複数行記述できます
#binlog-ignore-db=バックアップしないデータベースの名前バックアップする必要がある場合は、複数行を記述できます
スレーブ サーバー my .cnf
# replicate-do-db=test バックアップする必要があるデータベースの名前
# replicate-ignore-db=mysql 無視されたデータベース
# master-connect-retry=60 スレーブサーバーがマスターサーバーの切断を検出した場合、再接続間の時間差 (秒)
次の設定は my.cnf 設定ファイルで直接変更することもできます
log-bin=mysql -bin
master-host=192.168.1.22
master-user=repl
master-password=repl
master-port=3306

マスター/スレーブサーバー同期メンテナンス
さまざまな理由により、マスターとスレーブのデータが不整合になっています。負荷が低い場合、手動同期が実行されます。
マスターサーバーで実行

mysql>読み取りロックでテーブルをフラッシュ;
クエリOK、影響を受ける行 (0.01秒)
mysql>マスターステータスを表示;
+———— ——+————-+————–+——————+
| Binlog_Do_DB |
+ ——————+————-+———— —–+——————+
|
+——————+————- +————–+——————+
スレーブサーバー上で実行します
まず現在のマスターサーバーのバイナリファイル名とオフセットを取得し、スレーブサーバーとマスターサーバーを同期するコマンドを実行します
mysql>select master_pos_wait(' mysql-bin.0000011','260 ');
+————————————————–+
| master_pos_wait('mysql-bin.0000011','260') |
+———————— ———————–+
| 0 |
+——————————————–+
セット内1行(0.01秒)
同期完了後、ロック解除を行うメインサーバーで
mysql>テーブルのロックを解除;

マスター/スレーブサーバーを切り替えます

マスターサーバーに障害が発生した場合、スレーブサーバーをマスターサーバーとして使用できます。手順は次のとおりです。
1.リレー ログの更新がスレーブ データベースから実行されました。スレーブ サーバーで
stop スレーブ io_thread を実行して、ステータスが [すべてのリレー ログを読み取りました] かどうかを確認します。これは、更新が完了したことを意味します。スレーブ io_thread;
クエリ OK、0 が影響を受けました (0.00 秒)
mysql>show processlistG;
**************************** 2.行 **** *************************
Id: 2
ユーザー: システム ユーザー
ホスト:
db: NULL
コマンド: 接続
時刻: 4757
状態: すべてのリレー ログを読み取りました。スレーブ I/O スレッドが更新するのを待機しています
情報: NULL
2. スレーブ サーバーでスレーブの停止コマンドとマスター リセット コマンドを実行して、マスター データベースにリセットします
mysql>stop smile;
Query OK ,0 影響あり (0.00 秒)
mysql>reset master;
Query OK,0 影響あり (0.00 秒)
3. 新しいマスターの master.info ファイルとrelay-log.info ファイルを削除します。サーバーデータベースディレクトリ、そうでない場合は次回再起動します。サーバーからも起動されます。


声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。