在 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.MYD
、user MYI
和 user.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应该显示现在起来。
我发现我的 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.MYD
、user MYI
和 user.frm
)并将它们复制到损坏的文件夹中.确保用户权限与文件夹的其余部分相同(所有者和组应为 read/write)。
重新启动您的 MySQL 服务,看看您是否可以进入系统(不需要登录信息,但您必须以 root
身份登录 MySQL。可以的话,重新创建相关的用户访问应用程序。如果不行,你还有数据文件夹的备份。
如果它不起作用,并且假设您有最近的备份,请使用 mysql_install_db
完全重新创建数据文件夹(确保您仍然拥有之前创建的文件夹的副本你开始了),创建用户,然后从你最后一个好的备份一个一个地恢复你的个人数据库。不要还原 mysql
数据库和表 - 它们将在您还原其他数据库时构建。
首先在虚拟机上尝试所有这些 - 它会帮助您发现过程中的任何问题
祝你好运
感谢@DaveyBoy 的
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应该显示现在起来。