回答:
Ubuntuを使用しているため、ホームディレクトリにファイルを追加するだけで、mysqldumpパスワードプロンプトが無効になります。これは、ファイルを作成することによって行われます~/.my.cnf(権限は600である必要があります)。
これを.my.cnfファイルに追加します
[mysqldump]
user=mysqluser
password=secret
これにより、実際にパスワードを入力しなくてもパスワードを要求するMySQLユーザーとして接続できます。-pや--passwordも必要ありません。
mysqlおよびmysqldumpコマンドのスクリプト作成に非常に便利です。
これを達成するための手順は、このリンクにあります。
または、次のコマンドを使用することもできます。
mysqldump -u [user name] -p[password] [database name] > [dump file]
ただし、簡単なps axコマンドを使用して、ダンプの実行中にシステム全体の他のユーザーがコマンド全体(パスワードを含む)を表示できるため、本質的に安全ではないことに注意してください。
--defaults-file。mysqldump --defaults-ファイル= my_other.cnf --print-defaults` `のような
~/.my.cnf。stackoverflow.com/a/14653239/470749を参照してください。MySqlはにいると予想していましたc:\wamp\bin\mysql\mysql5.5.24\my.cnf。そこでファイルを作成しました。Mysqlを再起動する必要はありませんでした。それは私の次のmysqldumpですぐに機能しました。
GRANT LOCK TABLES, SELECT ON *.* TO 'BACKUPUSER'@'%' IDENTIFIED BY 'PASSWORD';
@フランクラインの答えに追加:
構成ファイルでパスワードを使用するには、-pオプションをコマンドから除外する必要があります。
正しい:
mysqldump –u my_username my_db > my_db.sql
違う:
mysqldump –u my_username -p my_db > my_db.sql
.my.cnf ユーザー名は省略できます。
[mysqldump]
password=my_password
あなたの場合.my.cnf、ファイルがされていないデフォルトの場所とmysqldump、それを見ていない、使用して指定します--defaults-file。
mysqldump --defaults-file=/path-to-file/.my.cnf –u my_username my_db > my_db.sql
いくつかの回答は、構成ファイルにパスワードを入れることについて述べています。
または、スクリプトから次のこともできexport MYSQL_PWD=yourverysecretpasswordます。
構成ファイルを使用するこの方法の利点は、スクリプトとの同期を維持するために個別の構成ファイルを必要としないことです。維持する必要があるのはスクリプトのみです。
この方法には欠点はありません。
パスワードは、システム上の他のユーザーには表示されません(コマンドラインにある場合は表示されます)。環境変数は、mysqlコマンドを実行しているユーザーとrootにのみ表示されます。
パスワードは、スクリプト自体を読み取ることができるすべてのユーザーにも表示されるため、スクリプト自体が保護されていることを確認してください。これは、構成ファイルを保護することとまったく同じです。(export MYSQL_PWD=$(cat /root/mysql_password)たとえば)スクリプトを公開して読み取り可能にする場合は、別のファイルからパスワードを入手できます。構成ファイルを作成するよりも、変数をエクスポートする方が簡単です。
例えば、
$ export MYSQL_PWD=$(>&2 read -s -p "Input password (will not echo): "; echo "$REPLY")
$ mysqldump -u root mysql | head
-- MySQL dump 10.13 Distrib 5.6.23, for Linux (x86_64)
--
-- Host: localhost Database: mysql
-- ------------------------------------------------------
-- Server version 5.6.23
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
$ mysqldump -u root mysql | head
-- MySQL dump 10.13 Distrib 5.6.23, for Linux (x86_64)
--
-- Host: localhost Database: mysql
-- ------------------------------------------------------
-- Server version 5.6.23
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
export MYSQL_PWD=...んではないプロセスリストに表示されます。一瞬でもです。これは、exportコマンドがシェル組み込みである(そしてそうでなければならない)ためです。したがって、シェルで実行した場合、シェルはコマンドの引数を持つプロセスをfork / execしません。
OS内の任意の場所にあるファイルを使用するには、--defaults-extra-fileたとえば以下を使用します。
mysqldump --defaults-extra-file=/path/.sqlpwd [database] > [desiredoutput].sql
注:.sqlpwdは単なるファイル名の例です。好きなように使えます。
注:MySQLは、~/.my.cnf代わりに使用できるものを自動的にチェックします--defaults-extra-file
私のようなCRONを使用している場合は、これを試してください!
mysqldump --defaults-extra-file=/path/.sqlpwd [database] > "$(date '+%F').sql"
必要な権限と推奨される所有権
sudo chmod 600 /path/.sqlpwd && sudo chown $USER:nogroup /path/.sqlpwd
.sqlpwd 内容:
[mysqldump]
user=username
password=password
渡す他の例.cnfまたは.sqlpwd
[mysql]
user=username
password=password
[mysqldiff]
user=username
password=password
[client]
user=username
password=password
データベースに自動的にログインする場合は[mysql]、たとえば、エントリが必要になります。
これで、DBに自動接続するエイリアスを作成できます
alias whateveryouwant="mysql --defaults-extra-file=/path/.sqlpwd [database]"
また、内部にパスワードを入れ.sqlpwdて、スクリプト/ cliを介してユーザー名を渡すこともできます。これによりセキュリティが向上するかどうかはわかりませんが、それは全体として別の質問になります。
完全を期すために、私はあなたが次のことを行うことができると述べますが、非常に安全ではなく、本番環境では使用しないでください。
mysqldump -u [user_name] -p[password] [database] > [desiredoutput].sql
注:-pとパスワードの間にスペースはありません。
たとえば、-pPassWordが正しくない間は正しい-p Passwordです。
うん、それはちょうどに....非常に簡単ではありません1つの魔法のコマンドラインこれ以上
mysqldump --user='myusername' --password='mypassword' -h MyUrlOrIPAddress databasename > myfile.sql
そして完了:)
私にとっては、MariaDBを使用してこれを行う必要がありました:ファイル~/.my.cnfを追加し、を実行してアクセス許可を変更しますchmod 600 ~/.my.cnf。次に、資格情報をファイルに追加します。私が見逃していた魔法のかけらは、パスワードがクライアントブロック(ref:docs)の下にある必要があるということです。
[client]
password = "my_password"
[mysqldump]
user = root
host = localhost
MariaDBでmysqldumpを実行する方法を探してここに来た場合。[client]ブロックの下にパスワードを配置し、次に[mysqldump]ブロックの下にユーザーを配置します。
[mysqldump]。セクションの下にパスワードを入力するだけで、問題なく動作しました。Ubuntu 18.04 LTS
以下は、スクリプト/ bin / sh内のDockerのソリューションです。
docker exec [MYSQL_CONTAINER_NAME] sh -c 'exec echo "[client]" > /root/mysql-credentials.cnf'
docker exec [MYSQL_CONTAINER_NAME] sh -c 'exec echo "user=root" >> /root/mysql-credentials.cnf'
docker exec [MYSQL_CONTAINER_NAME] sh -c 'exec echo "password=$MYSQL_ROOT_PASSWORD" >> /root/mysql-credentials.cnf'
docker exec [MYSQL_CONTAINER_NAME] sh -c 'exec mysqldump --defaults-extra-file=/root/mysql-credentials.cnf --all-databases'
置き換え[MYSQL_CONTAINER_NAME]て、環境変数MYSQL_ROOT_PASSWORDがコンテナーに設定されていることを確認してください。
それが私を助けることができるようにそれがあなたを助けることを願っています!
確かに、クレデンシャルを使用して、完全なcmd行をルートのcrontabに配置する方が安全です。少なくともcrontabの編集は、すでにパスワードを知っている人に制限(読み取り)できるので、プレーンテキストで表示する心配はありません...
単純なmysqldumpよりも必要な場合... credentailsをパラメーターとして受け入れ、内部ですべての機能を実行するbashスクリプトを配置するだけです...
シンプルなbasファイル
#!/bin/bash
mysqldump -u$1 -p$2 yourdbname > /your/path/save.sql
Crontabで:
0 0 * * * bash /path/to/above/bash/file.sh root secretpwd 2>&1 /var/log/mycustomMysqlDump.log
次のようにコマンドラインでパスワードを指定できます。
mysqldump -h <host> -u <user> -p<password> dumpfile
mysqldumpのオプションでは大文字と小文字が区別されます。
mysqldump -u root -pmypassword