在 mysql 中重新创建一个 `mysql.user` table

Recreate a `mysql.user` table in mysql

我发现我的 mysql.user table 搞砸了,用 drop table if exists mysql.user 删除它,我怎样才能手动创建这个特殊的 table 并将我的新帐户添加到它。

NB 我从来没有尝试过这个所以我不知道它是否会起作用。您已收到警告!!

在你做任何事情之前,关闭 MySQL 服务并备份数据文件夹(将其复制到其他地方)。

接下来,要么尝试创建一个新的数据目录和 运行 mysql_install_db(从 MySQL 安装目录,scripts/mysql_install_db --datadir=<new data directory>),要么使用虚拟机并执行相同。无论您做什么,都不要 安装到原始文件夹中。 使用相同版本的MySQL来完成这个

无论您使用哪种方法,从 <mysql data folder>/data 中获取结果文件(它们应该被称为 user.MYDuser MYIuser.frm)并将它们复制到损坏的文件夹中.确保用户权限与文件夹的其余部分相同(所有者和组应为 read/write)。

重新启动您的 MySQL 服务,看看您是否可以进入系统(不需要登录信息,但您必须以 root 身份登录 MySQL。可以的话,重新创建相关的用户访问应用程序。如果不行,你还有数据文件夹的备份。

如果它不起作用,并且假设您有最近的备份,请使用 mysql_install_db 完全重新创建数据文件夹(确保您仍然拥有之前创建的文件夹的副本你开始了),创建用户,然后从你最后一个好的备份一个一个地恢复你的个人数据库。不要还原 mysql 数据库和表 - 它们将在您还原其他数据库时构建。

首先在虚拟机上尝试所有这些 - 它会帮助您发现过程中的任何问题

祝你好运

感谢@DaveyBoy 的 。我在ubuntu 16.04,mysql 5.7.20上进行了如下操作,得到了mysql.usertable返回:

sudo mysqld --initialize --datadir=~/data_tmp

sudo cp ~/data_tmp/mysql/user.frm /var/lib/mysql/mysql
sudo cp ~/data_tmp/mysql/user.MYD /var/lib/mysql/mysql
sudo cp ~/data_tmp/mysql/user.MYI /var/lib/mysql/mysql

sudo chown mysql:mysql /var/lib/mysql/mysql/user.frm
sudo chown mysql:mysql /var/lib/mysql/mysql/user.MYD
sudo chown mysql:mysql /var/lib/mysql/mysql/user.MYI

mysqlcliselect * from mysql.user,tablemysql.user应该显示现在起来。