[Server & Network General] MySQL: コマンドをプロンプトなしでセキュアに利用するには
MySQLバックアップを Cron を利用して自動化したく、mysqldump で定期バックアップする方法を調べてみました。
Contents
コマンドラインで –password=your_pass をつかってはいけない
コマンドラインやスクリプト内から、こんな形式でmysqlをつかってはいけない。
$ mysql -u <ユーザ名> -p<パスワード> <db名>
例えば共用サーバなどでpsコマンドを使うと、他のユーザにパスワードが見えてしまう可能性がある。
$ ps ax | grep mysql
使用しているLinuxカーネルがプロセスの隠蔽をサポートしていない場合、コマンドラインでパスワードを指定すると、他のプロセスから丸見えになってしまう。
cronなどで利用したい場合、MySQLのオプションファイルを利用する。
オプションファイルの作成
.my.cnf の作成
.my.cnf ファイルを作成し、パーミッションを自分以外がアクセスできないように 600 に設定する。
$ touch ~/.my.cnf
$ chmod 600 ~/.my.cnf
–defaults-group-suffix=str
カスタムの接尾辞を付けた設定をつかってみることにする。
.my.cnf 内にオプショングループと設定を書くと、実行時に解読される。
実行時に str を指定すると、そのオプショングループの設定が利用される。
[client_host1]
user=myuser
password="mypass"
database=dbname
host=server.location.com
このような形式で利用できる。
$ mysql --defaults-group-suffix=_host1
mysqldump
[mysqldump] というオプショングループに設定する。
[mysqldump]
user=myuser
password=mypass
例えば全てのデータベースをdumpする。
$ mysqldump --opt --all-databases | bzip2 -c > alldb.bak.sql.bz2
–opt でデータベースへの書き込みをロックする。
mysqldumpの中には他オプションをグループ化した略記法となっているものがあります。–optや–compactはこれに分類されるものです。例えば、–optを使用することは–add-drop-table –add-locks –create-options –disable-keys –extended-insert –lock-tables –quick –set-charsetを指定したのと同じことです。MySQL 5.1以降、–optが表すオプションは全てデフォルトで有効化されています。これは、–optがデフォルトで有効なためです。
suffix は使えなかったのですが、 –defaults-file=~/.my_www.cnf のような形で、設定ファイルを切り替えることができそうな気もするので、いつか試す。
補遺
InnoDB or MyISAM
もしあなたがサーバのバックアップをしていて、かつテーブルがすべてMyISAMテーブルの場合、代わりにmysqlhotcopyの使用をお勧めします。
mysql > show engines\G
mysql > show table status\G
MySQLプロンプトをカスタマイズして、接続ユーザー名とホスト、現在使用しているデータベースを表示させる
[mysql]
prompt=mysql (\u@\h)::\d >\_
login -> use db_name 後、こんなプロンプト表示になる。
mysql (user_name@localhost)::db_name >
設定の確認 my_print_defaults
my_print_defaults コマンドを使うと、上記の設定を確認することができる。
$ my_print_defaults _host1 mysql
--default-character-set=utf8
--prompt=mysql (\u@\h)::\d >\_