MySQLにはレプリケーションという複製機能があります。つまり稼働している本サーバと同じ複製を、別な場所に作成し、リアルタイムで同期させる技術です。複製という点ではバックアップと同じように考えられますが、バックアップではファイルの形で保存され、復元する手順が必要になります。 その点、レプリケーションではもう一つ同じサーバを作成している点が大きく違います。
レプリケーションでは本サーバをマスターといい、子(複製)サーバをスレーブといいます。
マスターでは新規登録、更新、削除などの動作が常に行われていますが、レプリケーション機能によりスレーブ側にも同様の動作が伝わり、ほぼリアルタイムでその変更が反映されます。
レプリケーションが起動すると、スレーブ側は一定のサイクルでマスター側のログを確認しに行きます。そして差分を見つけるとマスター側と同じクエリーをスレーブ側でも実行します。このようにしてマスターとスレーブが同期します。
MySQLでレプリケーションを起動するためには、まずマスター側のconfファイルにサーバIDとバイナリログの取得設定を設定します。
[mysqld] ・・・・・・・・ log-bin server-id=番号
confファイルの設定が完了したら再起動を行います。
レプリケーション先のスレーブ側DBを用意し、スレーブ用のアカウントを作成します。
マスター側のDBをダンプしますが、この時マスター側のDBにはロックをかけます。
mysql> flush tables with read lock;
次にバイナリログを確認します。
mysql> show master status; ・・・・・・・・・・ File: bin.000001 Position: 1001 ・・・・・・・・・・
DBをダンプした後ロックを解除します。
confファイルにサーバIDとログの取得設定を設定しますが、マスターとスレーブが重ならないようにマスターとは別な番号を振ります。設定した後は再起動を行います。
マスターのダンプデータをスレーブにコピーします。
mysql> change master to -> master_host= Master DBサーバのホスト名/IPアドレス -> master_user= Master DBサーバへ接続するユーザ名 -> master_password= 接続するユーザ名のパスワード -> master_log_file= バイナリログのファイル名 -> master_log_pos= バイナリログの現在位置
mysql> start slave;
これでマスター側の変更がスレーブに伝わります。上手く行かない場合はエラーが表示されます。
これでレプリケーションによってマスターのDBとスレーブのDBが常時同期されることになります。定期的なバックアップはスレーブを利用しましょう。
mysqldumpコマンドでダンプをとる場合、サーバに負荷がかかります。その間DBの登録や更新を行えば動作が不安定、もしくは遅延を起こしかねません。それはサービスにとって機会損失に繋がります。
そこで、定期的なバックアップはスレーブ側で行うのです。バックアップを実行するスクリプトを用意し、cronで定期的に実行するようにしましょう。
ここではレプリケーションの概略とバックアップについての説明を行いましたが、実際のレプリケーションはもう少し複雑な構成になっている場合が多いです。例えばマスター1に対してスレーブが複数とか、マスターが複数であるとか、さまざまなケースが考えられます。
ソフトエイジェンシー関連製品URL
https://www.softagency.co.jp/products/mysql
製品・サービスに関するご質問、お見積もり、お問い合わせなど、お気軽にご連絡ください。