web-dev-qa-db-ja.com

Mysqldumpがcronとパスワードセキュリティによって起動されました

次のコマンドを使用して、MySQLデータベースをバックアップするスクリプトを作成しました。

mysqldump --opt --all-databases -u user -pmypassword > myDump.sql

Cronはそれを毎晩起動し、その結果を別のサーバーにscpします。 mypasswordは私のスクリプトに平文で表示され、誰でも適切な権限でそれを見ることができます。/cmdの問題についても言われました(cmdの実行を確認できる場所)。

MySQLのドキュメントは言う:

コマンドラインでパスワードを指定することは安全ではないと考えるべきです。 7.6項「パスワードの保護」を参照してください。

私はこの魔法の7.6セクションをどこにも見つけていません。

Mysqldumpとパスワードの自動セキュリティに対処するための良い方法は何ですか?

48
kheraud

MySQLドキュメントの引用( http://dev.mysql.com/doc/refman/5.1/en/password-security-user.html ):

パスワードをオプションファイルに保存します。たとえば、Unixでは、ホームディレクトリの.my.cnfファイルの[client]セクションにパスワードをリストできます。

[client]
password=your_pass

パスワードを安全に保つために、自分以外の誰もがファイルにアクセスできないようにする必要があります。これを確実にするには、ファイルアクセスモードを400または600に設定します。次に例を示します。

Shell> chmod 600 .my.cnf

コマンドラインからパスワードを含む特定のオプションファイルに名前を付けるには、--defaults-file=file_nameオプション、ここでfile_nameはファイルへの絶対パス名です。

56
Sahil Muthoo

上記のSahilの回答に追加するには、--defaults-extra-fileを使用します

--defaults-extra-fileは、標準のオプションファイルに加えて、単一の特定のオプションファイルを読み取るようにプログラムに指示するために使用されます。

一方、デフォルトのmy.cnfファイルの代わりに--defaults-fileが読み取られます。

23
troseman

受け入れられた回答は、パスワードをプレーンテキストファイルに保存します。このファイルは、管理(ルート)アクセス権を持つユーザーなら誰でも読み取ることができます。データベースが共有ホスティング環境にある場合、これは望ましくありません。

より良いオプションは、mysql_config_editorを使用して、mysqldumpという名前の暗号化されたログインパスを作成することです。 MySQLドキュメント によると:

mysql_config_editorは.mylogin.cnfファイルを暗号化するため、クリアテキストとして読み取ることができず、クライアントプログラムによって復号化されたときの内容はメモリ内でのみ使用されます。このようにして、パスワードを非クリアテキスト形式でファイルに保存し、コマンドラインや環境変数で公開する必要なく、後で使用することができます。

次のコマンドは、mysqldumpログインパスを作成します。

mysql_config_editor set --login-path=mysqldump --Host=your_hostname --user=your_username --password

パスワードの入力を求められ、作成したログインパスは暗号化された形式で保存されます。 mysqldumpは、--login-pathコマンドラインオプションで別のログインパスを指定しない限り、今後このログインパスを呼び出すときに自動的に使用します。

暗号化されたログインパスを作成した後、mysqldumpを呼び出す方法を次に示します。

mysqldump database_name > output_file
5
blendenzo

ここでのすべての回答はバラバラなので、共有完全なコマンドこれは必須であり、データベースのサイズが大きい場合に使用する必要があります--single-transactionおよび--lock-tablesはここで非常に重要です

mysqldump --defaults-extra-file=/home/dangi/.my.cnf -u root --single-transaction --quick --lock-tables=false --all-databases (or) DATABASE | gzip > OUTPUT.gz;

注:回答はAvibodhaとsahilの回答に追加されたものであり、彼らはすでに要点を述べています。私はimportant measure should be taken at time of backing up live database

4
Kuldeep Dangi

良い答えは パスワードを安全に保つ をチェックしてください。パスワードをmy.cnfファイルに保存して、そのファイルの権限を変更し、パスワードを安全に保つことができます。

このページの最後のコメントも確認できます。

MYSQL_PWD = "tinkerbell" mysqldump -ubackup --all-databases> dump.sql

2
Jesse

MySQLの2つのバージョンがインストールされていて、mysqldumpを実行するときにどのmy.iniが使用されているかわからない場合、Windowsマシンで次の方法を使用できます。これも役立ちます。

1、C:\ ProgramData\MySQL\MySQL Server 5.6\my.ini、細かい[クライアント]、次のように置き換えます:

[client]
user=my_user
password=my_password

2、次のコマンドを使用します:

C:\ Program Files\MySQL Server 5.6\bin> mysqldump --default-extra-file = "C:\ ProgramData\MySQL\MySQL Server 5.6\my.ini" -u my_user db_to_export> db_to_export.sql

1
Zinan Xing