風柳メモ

ソフトウェア・プログラミング関連の覚書が中心

mysqldumpが無いレンタルサーバ等のMySQLデータベースをphpMyAdmin経由でバックアップするPythonスクリプト

背景

ファーストサーバ等ではmysqldumpが提供されていないので、MySQLデータベースのバックアップを取ろうとすると、バイナリファイルをそのまま落とすか、もしくはphpMyAdminでエクスポートする、といった方法しかない。
バイナリの場合はサービスをいったん停めないといけないし、汎用性を考えるとSQLファイルとしてダウンロードしたいが、phpMyAdmin をブラウザで開いて、という方法だと手動になってしまい、CRON 等で自動的にバックアップしたりできない。

phpMyAdmin経由でSQLファイルをダウンロードするPythonスクリプト

ダウンロード:phpMyAdmin経由でSQLファイルをダウンロードするPythonスクリプト
ダウンロード:phpMyAdmin経由でSQLファイルをダウンロードするPythonスクリプト

furyutei/load_sqldump · GitHub
動作した環境・注意点など

当然ながら無保証なので、自己責任で使用すること。使用した結果については当方は一切関知しない。

  • Python 2.7 がインストール済みで正常動作する Linux(CentOS 6.5) / Windows 7。
  • サーバ側の phpMyAdmin のバージョンは 3.5.0 (ファーストサーバ上のもの)。*1
  • phpMyAdmin からのエクスポート用オプションはかなり決め打ちしている上に過不足もあるので、各自で調整を求む。
    調整してベターなパラメータが見つかったらぜひ教えてほしい(笑)。
  • Linuxではパスワード等をコマンドラインで直接指定すると ps コマンド等で他の人が見ることが出来るので望ましくない。しかるべきパーミッションを設定したオプションファイルを用意し、-f オプションで指定する方がよい。*2
  • コマンドラインに $ が混じっていると bash 等では変数とみなして展開してしまうので、\$ のようにエスケープするのを忘れないこと*3(オプションファイル中ではエスケープの必要はない)。

使用例

BASIC認証が必要な場合
python load_sqldump.py -u <BASIC認証ユーザ名> -p <BASIC認証パスワード> "<phpMyAdminのURL>" <DB名>
phpMyAdminへのログインが必要な場合
python load_sqldump.py -n <phpMyAdminユーザ名> -w <phpMyAdminパスワード> "<phpMyAdminのURL>" <DB名>
オプションファイルを指定する場合

認証用のオプション(-u, -p または -n, -w)等を記述したファイルを別途用意して読み込ませる。

python load_sqldump.py -f <オプションファイル名> "<phpMyAdminのURL>" <DB名>

ファイルの中身は、

-n <phpMyAdminユーザ名>
-w <phpMyAdminパスワード>

という感じで、1行1オプションで書いておく。

いずれも、ダウンロードされたものは".sql" というファイル名で保存される。
その他のオプションについてはヘルプ参照。

python load_sqldump.py --help

参考

骨組みがほぼ出来たところで、

チカッパのphpMyAdminからDBをダンプするBashスクリプト

この記事を見つけてしまった…もっと早い時点で知っていれば…。
なお、MySQLサーバ番号については気が付いていなかったので、オプションに追加。


ちなみに、以前悩んでいた現象

INSERT 文とかの日本語はきちんと変換されているのだけれど、テーブル定義で

`fruit` set('林檎','蜜柑','苺') DEFAULT NULL,

みたいに日本語を含む SET 型を使って使っている箇所だけが化けてしまう。

mysqldumpではまる - 風柳メモ

については、このスクリプトを使えば解消できる。
もともとphpMyAdminからエクスポートしたものは化けていなかったし。

*1:3.x.x、4.x.xなら動く可能性があるかも

*2:Windowsではどうなのかは知らない

*3:特定のログイン名・パスワードの組み合わせでだけ何故かダウンロードできなくて随分悩んでしまった…