MySQLダンプからバックアップ転送までをスクリプトで

1日1回、MySQL のDBスキーマ単位でダンプしてバックアップを行い
別サーバに転送して展開させるのを自動で行うケース、

メモしておくと良いと思ったので、ここに書いておく。

自動でダンプしたファイルを別サーバに転送するので、scp 、ssh を実行できる環境からの手順である。

(1)scp、ssh 実行の為に公開鍵、秘密鍵を作成
    ssh-keygen -t rsa を実行、最後まで、Enterキーだけを押し続ける。

# ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
・・・
#

/root/.ssh を確認すると、 id_rsa と id_rsa.pub が作られている筈。

(2)鍵をバックアップ先へ配布

# cat /root/.ssh/id_rsa.pub | ssh 相手先IPアドレス "cat >>.ssh/authorized_keys && chmod 600 .ssh/authorized_keys"

これで、パスワードを打ち込まなくても scp が実行できるようになる。

(3)MySQL スキーマ名=uranus をストアドルーチンを除いてテーブルをダンプしてscpで
   バックアップ先サーバに送るシェルを用意する。


#!/bin/bash

# DB root user のパスワード
export DBPWD='passpword '

# ダンプファイル名を日付+"_1.dmp" で準備
export DUMPFILE=uranus_`date +%Y%m%d`_1.dmp

# 保持する期間=日数
export keep=12

# 削除するダンプファイル名を準備
export DELETEFILE=uranus_`date +%Y%m%d --date "$keep day ago"`_1.dmp.gz

# dump → gzip → 古いダンプを消す
mysqldump --skip-lock-tables --skip-triggers -u root --password=$DBPWD uranus > /root/$DUMPFILE

gzip /root/$DUMPFILE

scp -p /root/$DUMPFILE.gz root@バックアップ先 :~/dbbackup/

/bin/rm -r /root/$DELETEFILE

   このスクリプトを1日1回、cronで動かせばバックアップできる。


(4)バックアップで受信したファイルからDBに展開させるスクリプト

#!/bin/bash

# DB root user のパスワード
export DBPWD='passpword '

# gunzip 実行して展開されるファイル名
export DUMPFILE=uranus_`date +%Y%m%d`_1.dmp

gunzip /root/$DUMPFILE.gz

mysql -u root --password=$DBPWD uranus < /root/$DUMPFILE