mysqlデータベースの双方向同期


プロジェクトは2台のデータベース・サーバを申請し、データの同期を維持するために、データの同期を行い、後続の使用に備えて文書を記録した.
 
まず、次のことを宣言します.
サーバオペレーティングシステムはCentOS 6である.1、mysqlバージョン番号が一致し、他の問題が発生する可能性を減らすために、この環境の組み合わせをします.
データベースサーバA,ipアドレス:192.168.6.108
データベースサーバB,ipアドレス:192.168.6.200
 
もちろん、まず最新のデータベースをバックアップし、同期が完了したら同じデータに復元します.
 
まずB同期Aデータベースのデータ機能を行う:
一時的にAをホストMaster、BをスレーブSlaveと呼ぶ
 
AホストMaster
 
1、mysqlデータベースconfファイルを修正し、/etc/myを修正する.conf
 
にある
# Replication Master Server (default)
# binary logging is required for replication
その後増加
 
 
server-id       = 1            #               my.conf   
binlog-do-db=mydb_name #          
binlog-ignore-db=mysql    #         

 
 
2、mysqlを再起動する
(CentOSはserice mysqld restart他のシステムの自己再起動ですグーグル、度娘をお願いします)
 
3、MySQLアカウントを同期専用に作成する
rootユーザーでmysqlにログイン
 
mysql> grant replication slave,reload,super on *.* to [email protected] identified by 'backup';
mysql> flush privileges;
 
 
ps:ここではbackupユーザーパスワードとbackupのmysqlデータベースユーザーを作成しました.同期用です.@このアカウントにリモートログインが許可されているip、すなわちBスレーブのipアドレスを後で指定します
 
 
BスレーブSlave
 
1、同じようにmysqlデータベースconfファイルを修正し、/etc/myを修正する.conf
 
にある
# Replication Master Server (default)
# binary logging is required for replication
その後増加
 
 
server-id       = 2		        #               my.conf   
master-host=192.168.5.108	#          ip      A   ip
master-user=backup		#        
master-password=backup      #          
master-port=3306		#              3306
replicate-ignore-db=mysql	#         
replicate-do-db=mydb_name  #          

 
 
 
同期の開始
 
メインサーバAでmysqlコマンド下(rootユーザがmysqにログイン)
mysql> show master status;
 
eg:
+一一一一一一+一一一一+一一一一一+一一一一+一一一一
| File                     | Position     | Binlog_Do_DB   | Binlog_Ignore_DB  |
+一一一一一一+一一一一+一一一一一+一一一一+一一一一
| mysql-bin.000012  |      106    | mydb_name     | mysql                  |
+一一一一一一+一一一一+一一一一一+一一一一+一一一一
 
 
 
サーバBからmysqlコマンド下(同じくrootユーザでmysqにログイン)
mysql> slave stop;
mysql> change master to master_log_file='mysql-bin.000012',master_log_pos=106;
mysql> slave start;
 
ps:
     master_log_fileはメインサーバmysqlの下でshow master statusです.表示されるFile列の値
     master_log_posはメインサーバmysqlの下でshow master statusです.表示されるPosition列の値
 
それともサーバーBのmysqlコマンドから
 
show slave statusG;サーバーからの同期状況を見てみましょう
 
mysql>show slave status\G;
 
次の2つの値がYESで同期していることを示します
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
 
 
そうでなければ同期に失敗します.もちろん、失敗の原因はN種類あります.自分でゆっくりグーグル、度娘、ここでは自分の操作手順だけを記録します.
 
 
MySQL双方向同期の設定
 
 
 
実は双方向の同期を設定するのは上のステップを繰り返して、ただAとBサーバーの操作が逆になって、Aはサーバー、Bからメインサーバーになります!
 
1、Bサーバーのmyを修正する.conf,追加
 
 
binlog-do-db=mydb_name #          
binlog-ignore-db=mysql    #         

 
 
2、Bサーバーのmysql(service mysqld restart)を再起動する
 
3、mysqlにログインし、
mysql> grant replication slave,reload,super on *.* to [email protected] identified by 'backup';
mysql> flush privileges;
 
ps:backupユーザーを作成します.パスワードもbackupのmysqlデータベースユーザーで、同期に使用します.@このアカウントにリモートログインが許可されているip、すなわちAスレーブのipアドレスを後で指定します.
 
 
4、Aサーバーのmyを修正する.cnf,追加
 
 
 
master-host=192.168.5.200	#          ip      A   ip
master-user=backup		#        
master-password=backup      #          
master-port=3306		#              3306
replicate-ignore-db=mysql	#         
replicate-do-db=mydb_name  #          

 
 
5、Aサーバーのmysql(service mysqld restart)を再起動する
 
6、メインサーバーB MySQLコマンドの下:
mysql> show master status;
eg:
+一一一一一一+一一一一+一一一一一+一一一一+一一一一
 
| File                     | Position     | Binlog_Do_DB   | Binlog_Ignore_DB  |
+一一一一一一+一一一一+一一一一一+一一一一+一一一一
| mysql-bin.000014  |      188     | mydb_name     | mysql                  |
+一一一一一一+一一一一+一一一一一+一一一一+一一一一
 
7、サーバーA MySQLコマンドの下:
 
mysql> slave stop;
mysql> change master to master_log_file='mysql-bin.000014',master_log_pos=188;
mysql> slave start;
 
 
8、サーバーAのmysqlコマンドから
show slave statusG;サーバーからの同期状況を見てみましょう
 
mysql>show slave status\G;
 
次の2つの値がYESで同期していることを示します
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
 
その後、最新のデータベースにデータを復元します.
これで双方向同期構成が完了しました.
 
ps:操作ログベースのバックアップなので、同期を設定する前にデータベースをバックアップしてから、バックアップでデータベースを復元してください.その後、データは一致します.