私は、アプリケーションデータベースで使用されるすべてを単一のスクリプトに作成するためにmysqldumpに必要なすべてのオプションをアセンブルしようとしています。これには、データベース自体とすべてのデータベースユーザー/パスワード/特権が含まれます。
ユーザーの部分を除いてすべて把握しました...現在使用しているのは次のとおりです:
mysqldump -h Host -u root -p \
--add-drop-database --routines -B database_name > backup.sql
だから、私は何が欠けていますか?
データベースのユーザー/パスワード/特権はmysql
データベースに保存されており、dumpコマンドでダンプされません。ダンプするデータベースのリストにもそのデータベースを追加する必要があります。
mysqldump ... --routines --databases database_name mysql > backup.sql
または単にすべてをダンプします:
mysqldump ... --routines --all-databases > backup.sql
Mysqlデータベースをダンプするときは、忘れないでください:
--flush-privileges Emit a FLUSH PRIVILEGES statement after dumping the mysql
database. This option should be used any time the dump
contains the mysql database and any other database that
depends on the data in the mysql database for proper
restore.
だから、根本的な誤解がありました。ユーザーはデータベースに固有ではなく、サーバーレベルで作成されます。
次のクエリを使用して、既存のすべてのユーザーを表示できます。
SELECT * FROM mysql.user;
これを知っていれば、mysqldumpがユーザーに対して何もしてはいけないことは明らかです。ただし、ユーザーと権限のエクスポート/インポートへの回答が必要な場合は、次の記事を確認することをお勧めします-それは私を助けてくれました。
http://pento.net/2009/03/12/backing-up-permissions-for-individual-databases/
ボード上のノイズについては謝罪しますが、他の誰かが同じ誤解を持っている場合に備えて、投稿を残すことにしました。
あるMac OS X開発環境から新しい環境に移行するときの完全なプロセス。
誤ってMySQL 8をインストールしたため、古いMacBookよりも新しいため、削除する必要がありました。
# Remove binaries
$ brew uninstall mysql
# Remove data/config that is leftover
$ rm -r /usr/local/var/mysql/
# Install version that matched old MacBook
$ brew install [email protected]
# Because it is an old version, you have to do a special configuration step
$ echo 'export PATH="/usr/local/opt/[email protected]/bin:$PATH"' >> ~/.bash_profile
$ source ~/.bash_profile
# Start server
$ mysql.server start
$ mysqldump -uroot --flush-privileges --routines --all-databases > complete_dump.sql
$ mysql -p -uroot < complete_dump.sql