先日、会社のLinuxサーバーにインストールされているMySQLの定期バックアップをおこなおうと、mysqldumpコマンドを実行するシェルスクリプトを書いていたら、以下のエラーに遭遇した。
mysqldump: [Warning] Using a password on the command line interface can be insecure.
どうやらこれは、シェルファイルに直接MySQLのパスワードを記述した際に発生するエラー(Warning)のようだ。
今回はこれを回避する、正しいシェルスクリプトの書き方を紹介する。
MySQLの接続情報は別ファイルに持たせる
まず、事前準備としてMySQLの接続情報を記述した以下のファイルを用意する。
※ファイル名は「.mysql.cnf」とした。
[client]
user = dbuser
password = password
host = localhost
そして、バックアップ処理をおこなうシェルスクリプトがこちら。
#!/bin/sh
dirpath='/var/www/bk'
filename=`date +%Y%m%d`
mysqldump --defaults-extra-file=/var/www/dump/.mysql.cnf --single-transaction dbname | gzip > $dirpath/$filename.sql.gz
ポイントは5行目の--defaults-extra-file
オプション。
ここで先ほど作成した設定ファイルを指定することで、外部ファイルからMySQLの接続情報を読み込むことができる。
今回紹介したシェルファイルを実行すると、/var/www/bk
配下に年月日をファイル名としてgzip圧縮されたダンプファイルが出来上がる。