Mysqlマスター、マスターレプリケーションの詳細


Mysqlマスター、マスターレプリケーションの詳細
一、コピーの紹介
MySQLは一方向、非同期レプリケーションをサポートし、レプリケーション中に1つのサーバがプライマリサーバとして機能し、1つ以上の他のサーバがセカンダリサーバとして機能します.プライマリ・サーバは、バイナリ・ログ・ファイルに書き込まれたインデックスを更新し、ログ・ループを追跡するためにファイルのインデックスを維持します.これらのログは、サーバから送信された更新を記録することができます.サーバからプライマリ・サーバに接続すると、プライマリ・サーバにログから最後に正常に更新された場所を通知します.その時から発生した更新をサーバから受信し、プライマリ・サーバが新しい更新を通知するのをブラックアウトして待機します.レプリケーションを行う場合は、レプリケーション内のテーブルの更新はすべてプライマリ・サーバで行う必要があります.そうでない場合は、プライマリ・サーバ上のテーブルの更新とテーブルの更新との競合を回避するために注意する必要があります.シングル・レプリケーションは、堅牢性、速度、システム管理に役立ちます.lプライマリ・サーバ/サーバ設定から堅牢性が向上します.プライマリ・サーバに問題が発生した場合は、サーバからセクションに切り替えることができます.lプライマリ・コンプライアンス・サーバ間で顧客クエリーを処理する負荷を分割することで、より良い顧客応答時間を得ることができる.SELECTクエリは、プライマリサーバのクエリ処理負荷を低減するためにサーバから送信することができる.ただし、データを変更する文は、プライマリ・サーバとセカンダリ・サーバが同期されるようにプライマリ・サーバに送信する必要があります.このロード・バランシング・ポリシーは、クエリーを主としない場合に有効ですが、一般的にはクエリーを更新します.lレプリケーションを使用するもう一つの利点は、プライマリ・サーバに干渉することなく、サーバからバックアップを実行できることです.プライマリ・サーバは、バックアップ中に更新の処理を続行できます.MySQLはデータベースの同期機能を提供し、これによりデータベースの冗長性、バックアップ、リカバリ、ロード・バランシングなどは、MySQLが3つのスレッドを使用してレプリケーション機能を実行するのに役立ちます.(そのうちの1つはメインサーバにあり、他の2つはスレーブサーバにある.START SLAVEが発行されると、メインサーバに接続してバイナリログを送信するI/Oスレッドがサーバから作成される.メインサーバは、バイナリログの内容をスレーブサーバに送信するスレッドを作成する.メインサーバBinlog Dumpスレッドから送信された内容をサーバI/Oスレッドから読み出し、サーバ・データ・ディレクトリからローカル・ファイル、すなわち中継ログにデータをコピーします.3番目のスレッドはSQLスレッドで、サーバから中継ログを読み込み、ログに含まれる更新を実行します.SHOW PROSCESSLIST文は、プライマリ・サーバ上およびサーバ上で発生したレプリケーションに関する情報を問い合わせることができる.デフォルトの中継ログはhost_を使用しますname-relay-bin.nnnnnn形式のファイル名、host_nameはサーバホスト名、nnnnnnはシリアル番号です.連続シーケンス番号で連続中継ログファイルを作成し、000001から開始します.サーバから中継ログインデックスファイルを追跡して、現在使用されている中継ログを識別します.デフォルトの中継ログインデックスファイル名host_name-relay-bin.index.デフォルトでは、これらのファイルはサーバのデータディレクトリから作成されます.中継ログはバイナリログと同じフォーマットでmysqlbinlogで読み込むことができます.SQLスレッドが中継ログ内のすべてのイベントを実行すると、中継ログは自動的に削除されます.サーバからデータディレクトリに2つのステータスファイル、すなわちmasterを別途作成する.infoとrelay-log.info.ステータスファイルはハードディスク(HDD)に保存され、サーバーがシャットダウンしても失われません.次にサーバから起動すると、これらのファイルを読み込んで、プライマリ・サーバからどれだけのバイナリ・ログが読み込まれたか、および自分の中継ログが処理された程度を決定します.
二、実験環境
仮想マシンオペレーティングシステム:Centos 5.5 64 bit
データベースバージョン:mysql 5.1.49(「Centos 5 yumを使用してMysqlをインストールする」ドキュメント参照)
A:masterコンピュータ名:beijing IPアドレス:192.168.20.101
B:slaveコンピュータ名:shanghai IPアドレス:192.168.20.102
三、mysqlの一方向コピー
注意mysqlデータベースのバージョンは、2つのデータベースのバージョンが同じか、slaveがmasterバージョンより低いことに注意してください.
1.プライマリ・サーバでレプリケーションの接続アカウントを設定します.このアカウントは、REPLICATION SLAVE権限を付与する必要があります.アカウントがレプリケーションにのみ使用される場合(推奨)は、他の権限を付与する必要はありません.
# mysql -uroot -p123456
mysql> GRANT REPLICATION SLAVE ON *.* TO 'replication'@'192.168.20.%'IDENTIFIED BY '123456';

2、             test1

[code="java"]mysql> create database test1;
mysql> use test1;
mysql> create table user(id int(4),name varchar(20));
mysql> insert into user values(1,"mary");
mysql> insert into user values(2,"joe");
//     ,     
mysql>Flush privileges;

3、マスターサーバーのmyを配置する.cof
//mysqlクライアントプログラムは/etc/myで終了しないでください.cnfプロファイルに次の内容を追加
log-bin=mysql-bin #          
server-id=1 #      ID        
log-bin=/var/log/mysql/updatelog #     log   ,       mysql           mysql     。
binlog-do-db=test1 #             
binlog-ignore-db=mysql,test #     mysql    ,        

//更新ログのディレクトリを作成しmysqlユーザーへの権限
# mkdir/var/log/mysql
# chown -R mysql.mysql/var/log/mysql
4、FLUSH TABLES WITH READ LOCK文の実行すべての表とブロック書き込み文をクリアし、ローカルに必要な同期データベースをデータベースにパッケージングコピーする
mysql> FLUSH TABLES WITH READ LOCK;
//                   
# cd /var/lib/mysql/
# tar -cvf /tmp/mysqldb.tar test1/
//             ,                 root  
# scp /tmp/mysqldb.tar [email protected]:/var/lib/mysql
//          
mysql> UNLOCK TABLES
//   mysql  
# /etc/init.d/mysqld restart

5、サーバーからの構成
//slaveサーバの構成/etc/my.cnfファイル、次の内容を追加します.
server-id=2 #     ID ,    ID  
master-host=192.168.20.102 #       IP  
master-user=replication #                   
master-password=123456 #   
master-port=3306 #       
master-connect-retry=60 #         
replicate-ignore-db=mysql #    mysql    
replicate-do-db=test1 #          

6、サーバーからメインサーバーデータベースにインストールする
# cd /var/lib/mysql/
# tar xvf mysqldb.tar
# rm mysqldb.tar
# /etc/init.d/mysqld restart
//         :
# mysql -uroot -p123456
mysql> START SLAVE;

補足:もしあなたのデータベースが完全に同じなら、このステップをする必要はありません.
7、構成の検証
//メインサーバ:
mysql > SHOW MASTER STATUS;
+------------------+----------+---------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+---------------+------------------+
| mysql-bin.000004 | 106 | test1,netseek | mysql,test |
+------------------+----------+---------------+------------------+
//(同期前にプライマリ・スレーブ・データが同期していない疑いがある場合は、リモート・コピーをコールド・バックアップするか、サーバからローを命じることができます.
同期方法)サーバからMySQLコマンドを実行する場合:
mysql> SLAVE STOP; #   slave  
mysql> CHANGE MASTER TO MASTER_LOG_FILE='updatelog.000004',MASTER_LOG_
POS=106;
//          show master status   ,                 ,       。 [color=red]      ,       [/color]
mysql> SLAVE START; #          
//  show slave status\G;            
mysql> SHOW SLAVE STATUS\G;

Slave_IO_Running: Yes
Slave_SQL_Running: Yes
すべてyesであれば、同期中であることを意味します.
8、テスト
//プライマリ・サーバにテーブルを作成する
mysql> use test1;
mysql> create table name(id int(4),name varchar(20));
mysql> show tables;
+-----------------+
| Tables_in_test1 |
+-----------------+
| name |
| user |
+-----------------+
2 rows in set (0.01 sec)
//サーバからの問い合わせ
mysql> use test1;
mysql> show tables;
+-----------------+
| Tables_in_test1 |
+-----------------+
| name |
| user |
+-----------------+
2 rows in set (0.00 sec)
単項複製試験に成功!!!
四、双方向同期配置
1、元のslaveサーバーの構成を修正する
192.168.20.102
//元のslaveサーバの構成/etc/my.cnfファイル、赤字の内容を追加:
server-id=2 #     ID ,    ID  
master-host=192.168.20.101 #       IP  
master-user=replication #                   
master-password=123456 #   
master-port=3306 #       
master-connect-retry=60 #         
replicate-ignore-db=mysql #    mysql    
replicate-do-db=test1 #          
log-bin=/var/log/mysql/updatelog #     log   
binlog-do-db=test1 #         
binlog-ignore-db=mysql #     mysql    ,        

2、更新ログのディレクトリを作成しmysqlユーザーに与える権限
# mkdir /var/log/mysql
# chown -R mysql.mysql /var/log/mysql

3、mysqlサービスを再起動し、同期専用アカウントを作成する
# service mysqld restart
//        replication     
# mysql -uroot -p123456
mysql> GRANT REPLICATION SLAVE ON *.* TO
'replication'@'192.168.20.%'IDENTIFIED BY '123456';
//    ,     
mysql>Flush privileges;

4、元のマスタープロファイルを修正する
192.168.20.101
//    master  /etc/my.cnf  ,       :
log-bin=mysql-bin #          
server-id=1 #      ID     
log-bin=/var/log/mysql/updatelog #     log   ,       mysql
           mysql     。
binlog-do-db=test1 #             
binlog-ignore-db=mysql,test #     mysql    ,        
master-host=192.168.20.102 #     slave       
master-user=replication #     
master-password=123456 #   
master-port=3306 #   
replicate-do-db=test1 #       
//   mysql  
# service mysqld restart

//Bサーバで問い合わせる
192.168.20.102
# mysql -uroot -p123456
mysql> SHOW MASTER STATUS;
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| updatelog.000001 | 106 | test1 | mysql |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)
//Aサーバで問い合わせる
192.168.20.101
# mysql -uroot -p123456
mysql> SHOW MASTER STATUS;
//    slave  
mysql> SLAVE STOP;
mysql> CHANGE MASTER TO MASTER_HOST='192.168.20.128',MASTER_USER='replication',MASTER_PASSWORD='123456',MASTER_PORT=3306,MASTER_LOG_FILE='updatelog.000001',MASTER_LOG_POS=106;
//          show master status   ,                 ,       。 [color=red](        ,       [/color])
//   B       
192.168.20.102
mysql> SLAVE START;

5、構成の検証
//Aサーバでmysqlコマンドラインに入る
192.168.20.101
mysql> SHOW SLAVE STATUS\G;
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
ここでSlave_IO_Running ,Slave_SQL_Runningはすべてyesであるべきで、ライブラリからのI/Oを表して、Slave_SQLスレッドが正しくオンになっています.データベースが同期中であることを示します.
//Bサーバでmysqlコマンドラインに入る
192.168.20.102
mysql> SHOW SLAVE STATUS\G;
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
ここでSlave_IO_Running ,Slave_SQL_Runningはすべてyesであるべきで、ライブラリからのI/Oを表して、Slave_SQLスレッドが正しくオンになっています.データベースが同期中であることを示します.
6、テスト
//Aサーバにテーブルを作成する
192.168.20.101
mysql> use test1;
mysql> create table test1(id int(4),name varchar(20));
mysql> show tables;
+-----------------+
| Tables_in_test1 |
+-----------------+
| name |
| test1 |
| user |
+-----------------+
3 rows in set (0.00 sec)
//Bサーバで問い合わせる
192.168.20.102
mysql> use test1;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql> show tables;
+-----------------+
| Tables_in_test1 |
+-----------------+
| name |
| test1 |
| user |
+-----------------+
3 rows in set (0.00 sec)
//Bサーバにテーブルを作成する
192.168.20.102
mysql> create table test2(id int(4),name varchar(20));
mysql> show tables;
+-----------------+
| Tables_in_test1 |
+-----------------+
| name |
| test1 |
| test2 |
| user |
+-----------------+
4 rows in set (0.00 sec)| user |
+-----------------+
3 rows in set (0.00 sec)
//Aサーバで問い合わせる
192.168.20.101
mysql> show tables;
+-----------------+
| Tables_in_test1 |
| name |
| test1 |
| test2 |
| user |
+-----------------+
4 rows in set (0.00 sec)
双方向レプリケーションテストに成功!!!
------------------------------------------------------
最終構成
mysql1: 192.168.1.141
mysql1: 192.168.1.151
1) mysql1: 192.168.1.141
# vi/etc/my.cnf
mysqldで追加:
#master config
log-bin=mysql-bin
server-id=1
log-bin=/var/log/mysql/updatelog
binlog-do-db=css_cn
binlog-ignore-db=mysql
#
#master bisynchronous config
master-host=192.168.1.151
master-user=replication
master-password=replication
master-port=3306
replicate-do-db=css_cn
#master-connect-retry=60
#replicate-ignore-db=mysql

linuxの下でディレクトリと権限を追加
# mkdir /var/log/mysql
# chown -R mysql.mysql /var/log/mysql

mysqlで認証アカウントを作成する
GRANT REPLICATION SLAVE ON *.* TO 'replication'@'192.168.%'IDENTIFIED BY 'replication';
FLUSH PRIVILEGES;

mysqlで同期を設定する
CHANGE MASTER TO MASTER_HOST='192.168.1.151',MASTER_USER='replication',MASTER_PASSWORD='replication',MASTER_PORT=3306

2) mysql1: 192.168.1.151
# vi/etc/my.cnf
mysqldで追加:

#slave config
server-id=2
master-host=192.168.1.141
master-user=replication
master-password=replication
master-port=3306
master-connect-retry=60
replicate-ignore-db=mysql
replicate-do-db=css_cn
#
#slave bisynchronous config
log-bin=/var/log/mysql/updatelog
binlog-do-db=css_cn
binlog-ignore-db=mysql

linuxの下でディレクトリと権限を追加
# mkdir /var/log/mysql
# chown -R mysql.mysql /var/log/mysql

mysqlで認証アカウントを作成する
GRANT REPLICATION SLAVE ON *.* TO 'replication'@'192.168.%'IDENTIFIED BY 'replication';
FLUSH PRIVILEGES;

mysqlで同期を設定する
CHANGE MASTER TO MASTER_HOST='192.168.1.141',MASTER_USER='replication',MASTER_PASSWORD='replication',MASTER_PORT=3306