follow me

MySQL5.1でDB単位でのレプリケーション

Linux-HA環境を作ったので、次はMySQLのレプリケーションを試してみた。
DRBDでMySQLのデータを丸ごと同期でもいいのですが、MySQLは待機系で別アプリも動かしたかったので、DB単位でのレプリケーションにしてみました。
MySQLのレプリケーションは、非同期で実施可能なので深く考えなくても気軽に試せます。
待機系が死んでても稼動系では問題なくコミットされてくれるので、ほんと気軽です。
今回試した環境は、Slackware 13.1、MySQL 5.1になります。

(1)Master側設定
Slave側がアクセスするためのレプリケーションユーザーを作成し権限を設定します。
ここでは、replユーザを作成しています。ユーザ名はなんでも良い。
mysql> grant file on *.* to repl;
Slace側のIPアドレスからアクセスするユーザに権限「file」と「replication slave」を与え、パスワードを設定します。
mysql> grant file,replication slave on *.* to repl@192.168.1.100 IDENTIFIED BY 'p@ssw0rd';
ログを作成する様に設定ファイル(/etc/my.cnf)を変更します。
server-idは他のサーバとかぶらない様に設定する必要があります。
server-id=1001
log-bin=mysql-bin

(2)Slave側設定
設定ファイル(/etc/my.cnf)にレプリケーションの設定を追加。
レプリケーション対象をテーブル単位にするなど指定も出来るので、使うアプリによって設定を変えてみると良い。
[mysqld]
server-id=1002
master-host=MasterのIPアドレス
master-user=レプリケーション・ユーザー名
master-password=レプリケーション・ユーザーのパスワード
replicate-do-db=レプリケーションを行うデータベース名
レプリケーション開始前の状態のデータベースをMasterからコピー。
データベース丸ごとコピーしてくれば問題ない。
項目 内容
master-host MasterのIPアドレスやホスト名
master-port MasterのPort
master-user Replicationユーザ名
master-password Replicationユーザのパスワード
replicate-do-db 対象となるデータベース名
replicate-ignore-db 対象外となるデータベース名
replicate-do-table 対象となるテーブル名 指定方法:データベース名.テーブル名
replicate-ignore-table 対象外となるテーブル名

(3)起動スクリプト修正
Slackware13.1で試していた僕は、始め悩んでしまいました。
Masterの3306ポートに繋がらないと思ったら、そもそもLISTENしてませんでした。
よくよく見てみると起動スクリプトに「--skip-networking」オプションが仕込まれてました。
これを外すのをお忘れなく。(Master側だけで問題ありません、Firewallで必要なIPに対してだけ開けましょう。)

(4)確認
知っておけばいいコマンドはこの程度だろうか。
Slaveの確認は、「show slave status¥G」とした方が見やすいですが。。。
コマンド 機能
SLAVE START レプリケーションの開始/再開
SLAVE STOP レプリケーションの停止
RESET SLAVE Slaveの状態をリセット
SHOW MASTER STATUS Masterの状態表示
SHOW SLAVE STATUS Slaveの状態表示
MySQL5.1でDB単位でのレプリケーション | 0 件のコメント | アカウント登録
サイト管理者はコメントに関する責任を負いません。