-1

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

4

2 回答 2

2

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

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

mysql cli select * from mysql.user中,表mysql.user现在应该出现。

于 2017-11-20T04:42:11.267 回答
2

注意我从未尝试过,所以我不知道它是否会起作用。你被警告了!!

在执行任何操作之前,请关闭 MySQL 服务并备份数据文件夹(将其复制到其他位置)。

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

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

重启你的 MySQL 服务,看看你是否可以进入系统(不需要登录信息,但你必须以root.数据文件夹的备份。

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

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

祝你好运

于 2017-11-19T16:54:28.083 回答