背景
ファーストサーバ等ではmysqldumpが提供されていないので、MySQLデータベースのバックアップを取ろうとすると、バイナリファイルをそのまま落とすか、もしくはphpMyAdminでエクスポートする、といった方法しかない。
バイナリの場合はサービスをいったん停めないといけないし、汎用性を考えるとSQLファイルとしてダウンロードしたいが、phpMyAdmin をブラウザで開いて、という方法だと手動になってしまい、CRON 等で自動的にバックアップしたりできない。
phpMyAdmin経由でSQLファイルをダウンロードするPythonスクリプト
furyutei/load_sqldump · GitHub
ダウンロード:phpMyAdmin経由でSQLファイルをダウンロードするPythonスクリプト
動作した環境・注意点など
当然ながら無保証なので、自己責任で使用すること。使用した結果については当方は一切関知しない。
- 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オプションで書いておく。
いずれも、ダウンロードされたものは"
その他のオプションについてはヘルプ参照。
python load_sqldump.py --help
参考
骨組みがほぼ出来たところで、
この記事を見つけてしまった…もっと早い時点で知っていれば…。
なお、MySQLサーバ番号については気が付いていなかったので、オプションに追加。
ちなみに、以前悩んでいた現象
INSERT 文とかの日本語はきちんと変換されているのだけれど、テーブル定義で
`fruit` set('林檎','蜜柑','苺') DEFAULT NULL,みたいに日本語を含む SET 型を使って使っている箇所だけが化けてしまう。
mysqldumpではまる - 風柳メモ
については、このスクリプトを使えば解消できる。
もともとphpMyAdminからエクスポートしたものは化けていなかったし。