cronで定期的にmysqldumpし、定期的にバックアップサーバに送る方法(バックアップ鯖が取りに来る)
背景 Mysqlをデータベースにしてサービスを運営している。 しかし現在、Mysqlのバックアップは取っておらず、元データが消えたら全データが消える状況である。 そこで、元サーバで毎日指定された時刻にmysql_dumpをし、バックアップサーバが元サーバからデータを持ってく量なcronジョブ を作りたいと思っている。 注意点としては、本番サーバはグローバルに、バックアップ鯖はローカルネットワークにいるので、グローバルからローカルには送れないってこと。(vpnとか貼ったらいけるけどめんどい)ので、バックアップサーバもcronでscpを動かして定期的に鶏肉という感じ。 AC 毎日元サーバから吐かれたmysqldumpファイルがバックアップサーバに置かれた状態になっている 関連技術 cron 参考 設定ファイル /var/spool/cron/crontabs/<user name> が設定ファイルです。 rootユーザ用のcronを設定する方法は、 sudo vim /var/spool/cron/crontabs/root って感じで開けます。 このファイルに実行したいジョブと実行日時(実行間隔も指定可能)を指定します。 0 * * * * /home/backup.sh 五つの*が何を表すかですが、 「分 時 日 月 曜日」 結構忘れがちなのが、シェルスクリプトのパーミッションでexecuteが入ってなくてエラーになることが多いので気をつけて。(上の/home/backup.sh) ログについて(ubuntu) デフォルトではログが出力されないようになっている。 こちらを参考にログを出力するように設定を変える vi /etc/rsyslog.d/50-default.conf # コメントアウト cron.* /var/log/cron.log # リスタート service rsyslog restart mysqldump 参考文献 こちら 上のによると、特定のユーザが持っているデータベースをダンプする方法は以下のようになるかな。 mysqldump -u hoge -p -B some_database > database.sql ちなみに、パスワードの入力まで自動でやるとするとこんな感じです。 0 21 * * * mysqldump -u -hogehoge --password="hogehoge" --no-tablespaces DB_NAME > /hoge/database.sql 毎日21:01にSCPでとってくるcron jobをしくむ。さらにdbへの流し込みもやってくれると最高だよね〜。 まず、scpでpasswordを打たなくていいように鍵をリモートサーバに登録 sudo vim /etc/ssh/sshd_config # 以下をコメントアウト PubkeyAuthentication yes ssh-keygenで秘密鍵と公開鍵を生成 パスフレーズを入れないのがポイント ...