MariaDB 启动报错Could not open mysql.plugin table

本文记录了一次MySQL启动失败的问题及解决过程。错误信息包括:等待purge开始、无法打开mysql.plugin表、特权表不存在等。解决方案是使用mysql_install_db.exe进行数据库初始化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

错误如下,搞了我半个钟,很气啊

2019-07-01 22:23:50 0 [Note] InnoDB: Waiting for purge to start
2019-07-01 22:23:50 0 [Note] InnoDB: 10.4.6 started; log sequence number 0; transaction id 7
2019-07-01 22:23:50 0 [Note] Plugin 'FEEDBACK' is disabled.
2019-07-01 22:23:50 0 [ERROR] Could not open mysql.plugin table. Some plugins may be not loaded
2019-07-01 22:23:50 0 [ERROR] Can't open and lock privilege tables: Table 'mysql.servers' doesn't exist
2019-07-01 22:23:50 0 [Note] Server socket created on IP: '::'.
2019-07-01 22:23:50 0 [ERROR] Fatal error: Can't open and lock privilege tables: Table 'mysql.db' doesn't exist
2019-07-01 22:23:50 0 [ERROR] Aborting

解决办法

https://mariadb.com/kb/en/library/mysql_install_dbexe/
先执行
mysql_install_db.exe 进行初始化,在bin目录

初始化完成就可以执行mysqld啦。哈哈。有空还是要多看官方文档啊

<think>好的,用户现在遇到了“不能打开mysql.plugin表”的错误。首先,我需要回忆一下这个错误通常出现在什么情况下。这个错误通常与MySQLMariaDB的系统表损坏或权限问题有关。用户之前在配置多实例,特别是使用不同的端口(比如3307),可能涉及到数据目录的权限或者初始化过程的问题。 用户之前按照指导步骤进行了初始化,可能是在初始化过程中某些步骤没有正确执行,导致系统表如mysql.plugin没有被正确创建或者权限设置不当。可能的错误原因包括: 1. **数据目录权限问题**:MariaDB的运行用户(如_mysql)没有足够的权限访问数据目录,尤其是mysql系统数据库的文件。 2. **初始化不完整**:使用`--initialize-insecure`时,可能初始化过程中断,导致系统表未正确生成。 3. **表损坏**:mysql.plugin表可能因为意外关机或其他问题导致损坏。 4. **配置文件问题**:指定的数据目录或端口配置有误,导致服务器无法正确访问数据文件。 接下来需要思考如何一步步排查问题。首先,检查数据目录的权限是否正确,确保用户和组是_mysql:admin,并且目录权限是750。然后,查看错误日志,通常在数据目录下的.err文件中,具体路径是用户配置的datadir,比如/usr/local/var/mysql_3307/*.err。错误日志可能会给出更详细的信息,比如文件无法访问或表不存在。 如果权限正确,但表仍然无法打开,可能需要重新初始化数据库。但用户之前已经初始化过,可能需要先清理旧的数据目录,再重新执行初始化命令。另外,可能需要检查是否在启动时指定了正确的basedir和datadir,确保服务器使用的是正确的路径。 用户可能在执行初始化后,启动服务时遇到了问题。或者,在连接数据库后尝试安装插件时出现这个错误,因为mysql.plugin表不存在或不可写。这种情况下,可能需要手动创建该表,或者修复系统表。 另外,考虑到用户使用的是Homebrew安装的MariaDB,可能存在路径或版本兼容性问题。需要确认所有命令中的路径是否正确,特别是brew --prefix mariadb@11.4返回的路径是否有效。 最后,可能需要指导用户如何备份数据(如果有的话),然后执行安全的重新初始化步骤,确保系统表正确生成。同时,提醒用户在初始化后设置root密码,并验证服务是否正常启动。</think>遇到`Can't open mysql.plugin table`错误通常与系统表损坏或权限问题相关,以下是分步解决方案: --- **诊断流程图解:** ```mermaid graph TD A[报错信息] --> B{检查错误日志} B -->|查看具体错误| C[表损坏/缺失?] B -->|查看权限问题| D[权限设置不当?] C --> E[修复系统表] D --> F[修正目录权限] ``` **完整解决步骤:** 1. **定位错误日志** ```bash sudo tail -n 50 /usr/local/var/mysql_3307/*.err ``` 关键日志特征: - `Table 'mysql.plugin' doesn't exist` - `Cannot open table ... from the internal data dictionary` 2. **检查数据目录权限** ```bash ls -ld /usr/local/var/mysql_3307/mysql ``` 要求权限设置: ```bash drwxr-x--- 33 _mysql admin 1056 Jun 10 14:30 mysql/ ``` 3. **紧急修复操作** ```bash # 停止服务 brew services stop mariadb@11.4 # 备份现有数据 sudo cp -rp /usr/local/var/mysql_3307 /tmp/mysql_backup_$(date +%s) # 重新初始化(保留数据) sudo $(brew --prefix mariadb@11.4)/bin/mysqld \ --initialize-insecure \ --user=mysql \ --datadir=/usr/local/var/mysql_3307 \ --basedir=$(brew --prefix mariadb@11.4) \ --skip-name-resolve ``` 4. **手动重建系统表(如必要)** ```sql -- 连接数据库后执行 DROP TABLE IF EXISTS mysql.plugin; CREATE TABLE mysql.plugin ( name VARCHAR(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL PRIMARY KEY, dl VARCHAR(128) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL ) ENGINE=Aria STATS_PERSISTENT=0; ``` **关键参数说明:** - `--skip-name-resolve`:加速初始化过程 - `STATS_PERSISTENT=0`:适配MariaDB的Aria存储引擎特性 - `CHARACTER SET utf8 COLLATE utf8_bin`:保持系统表兼容性 **验证修复效果:** ```bash mysql -u root -S/tmp/mysql_3307.sock -e "SHOW PLUGINS;" | grep -i partition ``` 预期应显示`partition | ACTIVE | STORAGE ENGINE`等插件信息 **预防措施:** 1. 增加定期维护任务: ```bash # 每月执行系统表检查 mysqlcheck --all-databases --check-upgrade -u root -p ``` 2. 使用InnoDB替代Aria引擎: ```ini # 在my.cnf添加 [mysqld] default-storage-engine=InnoDB disabled-storage-engines=aria ``` **高级修复方案:** 当常规方法失效时,可尝试从模板重建: ```bash sudo cp -rp $(brew --prefix mariadb@11.4)/share/mysql_system_tables.sql /tmp/ mysql -u root -S/tmp/mysql_3307.sock < /tmp/mysql_system_tables.sql ``` **性能优化建议:** ```ini # 在my.cnf添加预防性配置 [mysqld] innodb_flush_log_at_trx_commit=2 sync_binlog=0 table_open_cache=2000 ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值