mysqldump 不保存用户密码

mysqldump is not saving user password

我正在使用我的sql转储来保存我的数据库,现在想完全重建它,包括数据库、用户和用户权限。

mysqldump --databases my_db mysql -u root -p > mysqldump.sql

这会生成 sql 以创建数据库并在以下 table 中创建用户:

插入 db 值('localhost'、'my_db'、'my_user'、'Y'、'Y'、'Y'、 'Y','Y','Y','N','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y');

但是,用户的密码没有出现在文件中的任何位置,我不清楚在重新创建数据库后如何使用该用户访问数据库。

我不能使用 --all-databases 选项,因为另一个数据库有大量数据,我不想在文件中使用它。

用户名和密码不是数据库的一部分,而是特殊mysql数据库的一部分。如果要复制用户帐户,请转储 mysql 数据库并在另一端恢复它,然后使用 flush privileges 命令刷新数据库中的用户 table。

您正在查看转储中不正确的 table: 看看 table:

CREATE TABLE `user` (
`Host` char(60) COLLATE utf8_bin NOT NULL DEFAULT '',
`User` char(80) COLLATE utf8_bin NOT NULL DEFAULT '',
`Password` char(41) CHARACTER SET latin1 COLLATE latin1_bin NOT NULL Etc

之后的 INSERT 语句包含您的密码

每当您将权限分配给任何用户时,条目都会按照以下方式进行-

如果您在所有数据库上分配权限,例如 .,则条目将仅在用户 table.

中进行

如果您像 mydb 一样明智地分配权限 db。* 那么一个条目将进入用户 table,其中包含具有 'N' 权限的所有权限并保留用户密码和数据库中的第二个条目 table 其中包含适当的权限。

mysql 数据库包含以下用户权限-

具有用户名和密码的全局权限(所有数据库):用户 table db 明智的权利:db table table 明智的权利:tables_priv table 列明智的权利:columns_priv table.

因此您正在检查数据库 table,其中包含数据库权限但不包含密码,因为密码仅存储在用户 table 中。