MySQL数据库user库缺失的解决之道,科普数据库用户管理机制,轻松找回或重建user表

文章导读
如果mysql.user表丢失了,可以用以下方法重建:停止MySQL服务,删除ibdata1和ib_logfile*文件,重启MySQL会自动重建系统表,包括user表。然后用root密码登录,重新创建用户。
📋 目录
  1. A 方法一:重建数据文件
  2. B mysql.user表丢失解决
  3. C 数据库用户管理机制科普
  4. D 找回丢失user表
  5. E 重建user表的简单方式
  6. F 用户权限机制详解
  7. G 实际操作案例
A A

如果mysql.user表丢失了,可以用以下方法重建:停止MySQL服务,删除ibdata1和ib_logfile*文件,重启MySQL会自动重建系统表,包括user表。然后用root密码登录,重新创建用户。

方法一:重建数据文件

1. 停止mysql服务。2. 备份数据目录。3. 删除/var/lib/mysql中的ibdata1、ib_logfile0、ib_logfile1。4. 重启mysql服务,系统会自动重建空系统表。5. 登录mysql,执行mysql_secure_installation重新设置root密码和用户。

mysql.user表丢失解决

mysql.user表缺失时,直接用mysqld --skip-grant-tables启动,忽略权限,然后登录mysql,use mysql; drop table user;然后从其他正常mysql复制user表结构和数据,或者用create table重建。重建SQL:CREATE TABLE `user` ( `Host` char(60) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL DEFAULT '', `User` char(80) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL DEFAULT '', ... ) ENGINE=MyISAM DEFAULT CHARSET=utf8;

数据库用户管理机制科普

MySQL用户管理基于mysql.user表存储主机、用户名、密码、权限等。权限检查顺序:user表全局权限 -> db表数据库权限 -> tables_priv表表权限 -> columns_priv列权限。GRANT命令更新这些表,FLUSH PRIVILEGES刷新权限缓存。

找回丢失user表

用mysqld_safe --skip-grant-tables & 启动,连接mysql -u root,use mysql,然后source /usr/share/mysql/mysql_system_tables.sql 这会重建所有系统表包括user。之后重启正常模式,设置密码:UPDATE user SET Password=PASSWORD('newpass') WHERE User='root'; FLUSH PRIVILEGES;

MySQL数据库user库缺失的解决之道,科普数据库用户管理机制,轻松找回或重建user表

重建user表的简单方式

如果有备份,直接恢复mysql数据库。如果没有,停止服务,mv /var/lib/mysql/mysql /var/lib/mysql/mysql.bak,创建新mysql目录,重启,mysql_install_db --user=mysql初始化系统表,然后从bak复制数据文件如果需要。

用户权限机制详解

MySQL不直接用user表验证密码,而是用mysql.user的authentication_string字段,通过插件如mysql_native_password验证。用户可以有多个Host,如localhost和%。超级用户root有所有权限,其他用户通过GRANT指定。

实际操作案例

我遇到user表坏了,用init文件方式:停服务,在my.cnf加skip-grant-tables,重启,登录后重建user表:从网上下载mysql.user.sql执行。重建后normal重启,ALTER USER 'root'@'localhost' IDENTIFIED BY 'password';

FAQ
Q: user表删了还能登录吗?
A: 用--skip-grant-tables启动就能无密码登录。
Q: 重建后权限没了怎么恢复?
A: 重新GRANT ALL PRIVILEGES ON *.* TO 'user'@'host'; FLUSH PRIVILEGES;
Q: 为什么user表在mysql库?
A: mysql库是系统库,存所有元数据如用户、表结构。
Q: InnoDB还是MyISAM?
A: 新版MySQL 5.7+ user表是InnoDB,旧版MyISAM。