mysql Can‘t open and lock privilege tables: Table ‘.\mysql\db‘ is marked as crashed .. repair failed

本文详细记录了在遇到XAMPP的MySQL服务因数据表错误而报错的情况下,如何使用MariaDB的aria_chk工具进行修复。通过检查、分析和优化命令,成功修复了损坏的数据库,并最终重启MySQL服务恢复正常运行。

今日xampp的mysql报错
Fatal error: Can't open and lock privilege tables: Table '.\mysql\db' is marked as crashed and last (automatic?) repair failed

经过查询 貌似是 数据表发生了错误导致的,可以使用
myisamchk来修复
myisamchk -f -o tablename.MYI
但是我使用的是MariaDB,所以里面没有MYI文件
再次查询
https://mariadb.com/kb/en/aria_chk/
发现需要使用 aria_chk 来修复
入股MYSQL正在运行,首先关闭MYSQL服务
然后
The following commands, run in the MariaDB data directory, check all your tables and repairs only those that have an error:

aria_chk --check --sort_order --force --sort_buffer_size=1G */*.MAI

If you want to optimize all your tables: (The --zerofill is used here to fill up empty space with \0 which can speed up compressed backups).

aria_chk --analyze --sort-index --page_buffer_size=1G --zerofill */*.MAI

In case you have a serious problem and have to use --safe-recover:

aria_chk --safe-recover --zerofill --page_buffer_size=2G */*.MAI

根据以上说明 我运行了以下命令
aria_chk --safe-recover --zerofill --page_buffer_size=2G db.MAI

,然后重启mysql 搞定

MySQL启动时出现错误 `Fatal error: Can't open and lock privilege tables: Table 'mysql.user' doesn't exist` 通常表明 MySQL 的系统权限表未正确初始化或在启动时无法访问。以下是详细的解决方法: ### 1. 检查数据目录是否完整 确保 MySQL 的数据目录(通常为 `/var/lib/mysql`)中包含 `mysql` 数据库,特别是 `user` 表文件 `user.MYD` 和 `user.frm`。如果这些文件缺失,可能是由于数据目录未正确初始化或被意外删除。 ### 2. 初始化 MySQL 数据目录 如果数据目录中缺少系统表,可以通过以下命令重新初始化 MySQL 数据目录: ```bash mysqld --initialize ``` 该命令会生成一个新的 `root` 用户临时密码,并创建所有必要的系统表,包括 `mysql.user` 表。 ### 3. 检查 MySQL 配置文件 确保 MySQL 的配置文件(如 `/etc/my.cnf` 或 `/etc/mysql/my.cnf`)中指定的数据目录路径与实际路径一致。例如: ```ini [mysqld] datadir=/var/lib/mysql ``` ### 4. 修复权限问题 如果数据目录存在但 MySQL 无法访问,需确保 MySQL 服务对数据目录具有读写权限。可以使用以下命令修改权限: ```bash chown -R mysql:mysql /var/lib/mysql ``` ### 5. 启动 MySQL 服务 完成上述步骤后,尝试重新启动 MySQL 服务: ```bash systemctl start mysqld ``` ### 6. 检查日志文件 如果问题仍未解决,查看 MySQL 的错误日志文件(通常位于 `/var/log/mysqld.log` 或 `/var/log/mysql/error.log`),以获取更详细的错误信息。 ### 7. 从备份恢复系统表 如果系统表(如 `mysql.user`)已损坏,可以从其他正常运行的 MySQL 实例中复制 `mysql` 数据库的文件。注意,源和目标 MySQL 的版本必须一致或兼容。复制完成后,确保修改文件权限: ```bash chown mysql:mysql user.* ``` ### 8. 使用已知有效账户登录并修复权限 如果 MySQL 已成功启动但无法远程访问,可以尝试使用本地账户登录并执行权限修复命令: ```sql GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'your_password' WITH GRANT OPTION; FLUSH PRIVILEGES; ``` ### 9. 验证 MySQL 服务状态 最后,验证 MySQL 服务是否正常运行: ```bash systemctl status mysqld ``` 通过以上步骤,应能解决 MySQL 启动时提示 `Can't open and lock privilege tables: Table 'mysql.user' doesn't exist` 的问题。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值