はじめに
この記事は初心者インフラエンジニアが備忘録的に書いたものです。
やりたいこと
1.MySQLに接続し、バックアップの取得
2.cronを使ってバックアップの自動化
動作環境
$ mysql -V
mysql Ver 14.14 Distrib 5.6.36, for Linux (x86_64) using EditLine wrapper
バックアップ時の問題点
$ mysqldump -u USER_NAME -pPASSWORD -x -A > FILE_NAME
上記のコマンドだとパスワードが丸見えなのでセキュリティ上大問題です。
なので、
$ mysqldump -u USER_NAME -p
$ Enter password:PASSWORD
とするのが普通です。
しかし、自動バックアップとなると後者のコマンドは使用できないため必然的に前者のコマンドになってしまいます。
解決案
####1.スクリプトを作成し、変数を使う
結果から言うと意味ないです。
#!/bin/bash
USER_NAME="root"
PASSWORD="hogehoge"
mysqldump -u $USER_NAME -p$PASSWORD -x -A > FILE_NAME
上記のようにスクリプト内に記述してもcronのログに
[Warning] Using a password on the command line interface can be insecure.
という警告文を吐かれます。
コマンドラインにパスワードを書くなと怒られます。
####2.設定ファイルを読み込ませる
今回はこの方法で解決しました。
適当な場所に設定ファイルを作成します。
$ vi /etc/sql.cnf
隠しファイルにしたい場合はファイル名の先頭に「.(ドット)」をつけます。(てか、隠しファイルにしたほうが安全です。)
設定ファイルの中身は下記のようにします。
[client]
user = root
password = hogehoge
host = localhost
パーミッションを最低限に設定します。
$ chmod 600 /etc/sql.cnf
以下のコマンドで設定ファイルを読み込むことができます。
$ mysqldump --defaults-extra-file=/etc/sql.cnf -x -A > FILE_NAME
これであとはcronに設定するだけです。
まとめ
・バックアップを自動化する際はパスワードをコマンドラインに入力しない
・設定ファイルを用いたやり方が分かりやすい
・他にいい方法があったら教えてください