24
19

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

MySQLにコマンドラインからパスワードを入力せず接続

Posted at

はじめに

この記事は初心者インフラエンジニアが備忘録的に書いたものです。

やりたいこと

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.スクリプトを作成し、変数を使う
結果から言うと意味ないです。

backup.sh
#!/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

隠しファイルにしたい場合はファイル名の先頭に「.(ドット)」をつけます。(てか、隠しファイルにしたほうが安全です。)
設定ファイルの中身は下記のようにします。

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に設定するだけです。

まとめ

・バックアップを自動化する際はパスワードをコマンドラインに入力しない
・設定ファイルを用いたやり方が分かりやすい
・他にいい方法があったら教えてください

24
19
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
24
19

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?