先日、会社の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圧縮されたダンプファイルが出来上がる。