MySQLのDB名を自動で取得して個々にバックアップ(DUMP)する

MySQLのDB名を自動で取得して個々にバックアップ(DUMP)する

DB名を勝手に取得して、DUMPを取れないだろうか・・・・・お客様にまた貸ししているサーバを運用していてバックアップの壁にぶち当たりました。(サーバ管理者向け)

MySQLのデータをバックアップするには、MySQL付属のコマンドでDUMPが有ります。これを使うには、条件があります。

■DBを指定してDUMPをとる
⇒欠点
・各ユーザにとってもらわないといけない。SSHが開放できない場合はphpMyAdminで手動で取る。(有料ソフトを使わない場合)
・エンジニアがいない制作会社やお客様には少々敷居が高い。
・シェルで1つ1つDB名を書いていけばDUMPをとれるが、これは半手動なものであり、しかも漏れる可能性が多い。

■DBをまるまる1つのDUMPにroot権限で取る。
⇒欠点
1つのデータに収納するため、個別のDBをDUMPで戻すときがメンドクサイ。データが大きくなれば、切り出すのが非常に困難。

DUMPのコマンドオプションで相当探しましたが、上記2つ以外のDUMPコマンド単体で取る方法はなさそうです。

そこで、AWS(アマゾンのクラウドではありません^^)と組み合わせてシェルで可能なことがわかりました。

■今回のやりたいこと
・シェルで全自動化したい

・データベースごとのDUMPを個別に取りたい。

■シェルの内容(DUMPのオプションは個々の環境に合わせてください)

—————————————————–

#!/bin/bash

_wdate=`date +"%Y%m%d%H%M%S"`

_backupdir="xxxx/"

_backupfilepath="${_backupdir}"

_dbuserid=xxxx

_dbpasswd=xxxx ←MySQLrootのパスワードになります


# スキーマ名のみを、awkで抽出して抽出したスキーマ分のmysqldumpを実行する

for n in `mysql -N -u ${_dbuserid} -p${_dbpasswd} -e "show databases"

| awk '{ print $0 }'`; do  echo "BackupDirectory >> ${_backupfilepath}/${HOSTNAME}.${n}.${_wdate}.${HOSTNAME}.dump"

mysqldump -u ${_dbuserid} -p${_dbpasswd} ${n} >

${_backupfilepath}/${HOSTNAME}.${n}.`date +%y%m%d`.dump;

done

exit 0
—————————————————–

といった感じで、意外にも簡単にできました。

あとは、これに.shの拡張子をつけてファイルを保存。実行権限を与えてあげてcronで実行するという形です。cronの設定については、ネット上に沢山情報があるので割愛します。

 

 

MySQLカテゴリの最新記事