T:echnologyへMySQLレプリケーション環境によるバックアップ体制の構築コメントを残すTweetTweet我が家で稼働中の自宅サーバーは3年程前に購入したネットブックです。最近は落雷による停電やら何やらでハードディスクの寿命が怪しいと感じている日々です。そこで、「もしも」のためにMySQLのレプリケーションを利用してバックアップを取るようにしてみました。ついでに、ドメインとかVPSとか取得したのでこのブログも引越ししています。※内容に間違いがあり「適当な事言ってるなこいつ」などと感じられた場合、コメントにてお知らせいただけますと幸いです。レプリケーションについてレプリケーション:replication・・・複製(Google翻訳より)MySQLのレプリケーションは、データベースの更新をMaster側となるサーバーからSlave側のサーバーへ逐次送信して同期するものです。Slaveという構成もできるとかできないとか聞いた事がある気がします。興味がある方は調べてみてください。Slaveの構成で構築しました。Master側の準備Master側my.cnf設定Master側となるサーバーでは、my.cnfに次のような記述が必要です。server-id=1まず、「log-bin」は、バイナリログを取得するための設定です。レプリケーションはこいつを使ってほにゃららするため、必須となります。「server-id」は、識別用のIDとして任意の値を設定します。他のサーバー(Slave側)と重複しないように設定します。設定したらmysqldを再起動しておきましょう。Master側レプリケーションユーザー設定レプリケーションに用いるユーザーを設定します。次の例では、「replication」というユーザーを作成し、Slave側IPアドレスが「192.168.123.123」であると仮定します。'password';Master側データベースバックアップとりあえず現時点の場データベースのバックアップを取ります。datadir以下を丸ごと持っていく方法と、mysqldumpで吐き出す方法がありますが、datadirの方法で持っていく場合、Slave側のmysql.sockを殺す可能性があります(実際にやった)ここでは、mysqldumpでバックアップする方法を記載します。バックアップの前に、データベースをロックしてしまいます。ついでに、バイナリログの状態を確認し、メモを取っておきましょう。+-------------------+----------+--------------+------------------+FileとPositionはSlave側設定で用いるので、必ずメモを取ります。mysqlコマンドとは別のシェルを起動して、バックアップを取ります。dump.sqlここまでできたら、データベースのロックを解除してもOKです。TABLES;Slave側の準備データベースの展開Master側で作成したデータベースダンプをSFTPなどの方法でSlave側に転送します。転送したdump.sqlをデータベースに読み込みます。dump.sqlSlave側mysqldの設定Master側でも設定したserver-idを設定します。大体用意ができてきたので、レプリケーションを開始する準備をします。mysqlにrootで接続して、次のように入力します。この例では、Master側IPアドレスを「192.168.123.100」とします。MASTER_PASSWORDにはMaster側設定のユーザー設定で設定したものを指定します。MASTER_LOG_FILE、MASTER_LOG_POSは、メモを取ってあるはずのFileとPosition値を指定します。これで準備が整いました。レプリケーションを開始しましょう。SLAVE;この時点で、Master側でロックを解除した以降のデータベースの変更がSlave側に反映されるようになります。SlaveなのでSlave側を直接変更するといいことはありません。アプリケーションからはMasterを参照するようにするか、SELECTクエリだけSlaveに回して負荷分散というものもありですね。疲れたので今日はこの辺で。コメントをキャンセルメールアドレスが公開されることはありません。