Fatal error: Can't open and lock privilege tables: Table 'mysql.user' doesn't exist
1033人浏览 / 0人评论
参考
说明
我本地的 MySQL 版本是 8.0.29,某次电脑重启后报了这个错,结果就是 MySQL 完全无法启动,期间尝试过如下方案都不太行:
- 重新初始化
data
文件夹然后复制库文件夹和ibdata1
文件; - 解析
.ibd
文件,提取建表语句,然后通过ALTER TABLE xxx IMPORT TABLESPACE;
命令导入;
也想过重建系统表,但是查到的那些命令都不能用,最终决定通过版本升级来重新生成系统表。
过程
1、停止 MySQL,删除 MySQL 服务。
net stop mysql
sc delete mysql 或者 mysqld --remove mysql
2、备份 data
文件夹。
3、下载比当前高一个小版本的 MySQL。
下载地址:https://downloads.mysql.com/archives/community/
4、复制 my.ini
文件和 data
文件夹到新版 MySQL。
5、修改环境变量。
6、添加到服务。
mysqld --install 或 ./mysqld --install
7、启动。
net start mysql
MySQL 启动正常但没有 root 用户
1、停止 MySQL:
net stop mysql
# 跳过登录验证
mysqld --console --skip-grant-tables --shared-memory
2、控制台启动 MySQL 并跳过登录验证:
mysqld --console --skip-grant-tables --shared-memory
3、另外打开一个 CMD 窗口,输入:
mysql -u root -p
## 输入任意密码登录后,按步骤执行后续操作。
4、创建 root 用户:
create user 'root'@'localhost' identified by '123456';
此步骤可能会报以下错误(没报错的跳第5步):
ERROR 1290 (HY000): The MySQL server is running with the --skip-grant-tables option so it cannot execute this statement
报错的输入:
flush privileges;
再次执行:
create user 'root'@'localhost' identified by '123456';
再次报错,这步没报错的也是直接跳第5步,报错的执行以下操作:
drop user 'root'@'localhost';
然后再次执行:
create user 'root'@'localhost' identified by '123456';
结果没有再报错,root 用户创建成功。
5、为 root 用户授权:
GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION;
flush privileges;
exit;
6、返回 mysqld --console --skip-grant-tables --shared-memory
命令执行的窗口,Ctrl + C
结束运行,然后使用 net start mysql
命令正常启动MySQL。
全部评论