装完mysql启动报错:“Table ‘mysql.plugin’ doesn’t exist” 解决方法

本文将详细解释并解决在安装MySQL后遇到启动失败问题时,错误日志中提示Table ‘mysql.plugin’ doesn’t exist的情况。主要分为两种原因:一种是未运行初始化MySQL系统数据库的脚本;另一种是在编译安装MySQL时未指定innodb存储引擎。文章提供了解决这两种问题的具体步骤和方法。

装完mysql后启动mysql发现启动不了,错误日志里面会提示Table ‘mysql.plugin’ doesn’t exist,出现此错误的原因有两种。

一种是装完mysql之后没有运行初始化mysql系统数据库的脚本,如果是这种情况,要先做脚本的初始化,方法如下:

/usr/local/mysql/scripts/mysql_install_db \
--defaults-file=/var/mysql/my.cnf \
--basedir=/usr/local/mysql \
--datadir=/var/mysql/data \
--user=mysql

上面脚本中的/usr/local/mysql/要修改成你安装mysql的路径。

另外一种情况是在编译安装mysql时,没有指定innodb存储引擎,对于这种情况,需要重新指定选项编译安装:

脚本如下:

cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DMYSQL_UNIX_ADDR=/tmp/mysql.sock \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DWITH_EXTRA_CHARSETS=all \
-DWITH_MYISAM_STORAGE_ENGINE=1 \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_MEMORY_STORAGE_ENGINE=1 \
-DWITH_READLINE=1 \
-DENABLED_LOCAL_INFILE=1 \
-DMYSQL_DATADIR=/var/mysql/data \
-DMYSQL_USER=mysql

make
make install

装完mysql后启动mysql发现启动不了,错误日志里面会提示Table ‘mysql.plugin’ doesn’t exist,出现此错误的原因有两种。

一种是装完mysql之后没有运行初始化mysql系统数据库的脚本,如果是这种情况,要先做脚本的初始化,方法如下:

/usr/local/mysql/scripts/mysql_install_db \
--defaults-file=/var/mysql/my.cnf \
--basedir=/usr/local/mysql \
--datadir=/var/mysql/data \
--user=mysql

上面脚本中的/usr/local/mysql/要修改成你安装mysql的路径。

另外一种情况是在编译安装mysql时,没有指定innodb存储引擎,对于这种情况,需要重新指定选项编译安装:

脚本如下:

cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DMYSQL_UNIX_ADDR=/tmp/mysql.sock \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DWITH_EXTRA_CHARSETS=all \
-DWITH_MYISAM_STORAGE_ENGINE=1 \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_MEMORY_STORAGE_ENGINE=1 \
-DWITH_READLINE=1 \
-DENABLED_LOCAL_INFILE=1 \
-DMYSQL_DATADIR=/var/mysql/data \
-DMYSQL_USER=mysql

make

make install

在上面

-DMYSQL_UNIX_ADDR=/tmp/mysql.sock \
-DMYSQL_DATADIR=/var/mysql/data \
-DMYSQL_USER=mysql
可以不要,写到配置文件my.cnf就可以了,对于Ubuntu时需要像上面那样cmake,centos可以不需要

<think>根据用户需求,用户需要解决MySQL启动报错"mysqld: Table 'mysql.plugin' doesn't exist"的问题。 结合引用[1]的内容,其中提到了一种解决方法:重新初始化MySQL实例,使用`mysqld --initialize-insecure`命令。 但是,这个错误通常发生在MySQL数据目录未初始化或初始化不完整的情况下。'mysql.plugin'表是系统数据库'mysql'中的一张表,如果缺失说明系统表不完整。 因此,解决步骤应该是: 1. 确保数据目录为空(如果是新实例)或已备份(如果是旧实例需要恢复)。 2. 使用`mysqld --initialize`或`mysqld --initialize-insecure`初始化数据目录。 3. 启动MySQL服务。 注意:`--initialize`会生成一个随机root密码,而`--initialize-insecure`则不会设置root密码(即空密码)。在生产环境中建议使用`--initialize`并妥善保存密码。 此外,还需要注意: - 确保命令中的`--datadir`指向正确的数据目录。 - 确保`--basedir`指向MySQL的安装目录(如果不在默认位置)。 - 确保运行命令的用户(如mysql)对数据目录有读写权限。 如果用户之前已经存在数据,重新初始化会清除原有数据,所以需要先备份。 下面给出具体步骤: </think> ### 解决MySQL启动报错'mysqld: Table 'mysql.plugin' doesn't exist'的方法 该错误通常发生在**MySQL数据目录未正确初始化**或**系统表缺失**时。以下是具体解决步骤: #### 1. **停止MySQL服务** ```bash systemctl stop mysql # 或使用 mysqld_safe --shutdown-timeout=0 ``` #### 2. **备份原有数据(重要!)** ```bash mv /var/lib/mysql /var/lib/mysql_backup # 默认路径,按实际调整 ``` #### 3. **重新初始化数据目录** 使用以下命令初始化(根据需求选择): ```bash # 安全初始化(生成随机root密码) mysqld --initialize --user=mysql --datadir=/var/lib/mysql # 无密码初始化(开发环境) mysqld --initialize-insecure --user=mysql --datadir=/var/lib/mysql ``` > **关键参数说明**: > - `--datadir`:必须与my.cnf中的配置一致 > - `--basedir`:若MySQL安装路径非默认需指定(如`--basedir=/usr/bin/mysql`) > - `--user`:指定运行MySQL的系统用户 #### 4. **修复目录权限** ```bash chown -R mysql:mysql /var/lib/mysql chmod 750 /var/lib/mysql ``` #### 5. **启动MySQL服务** ```bash systemctl start mysql ``` #### 6. **登录并重置密码(若使用--initialize)** 从日志获取临时密码: ```bash grep 'temporary password' /var/log/mysqld.log ``` 登录修改密码: ```sql ALTER USER 'root'@'localhost' IDENTIFIED BY 'YourNewPassword'; ``` ### 常见原因分析 1. **首次安装未初始化**:新安装MySQL后未执行初始化[^1] 2. **数据目录被误删**:`mysql`系统数据库文件丢失 3. **权限错误**:数据目录属主非mysql用户 4. **升级失败**:版本升级过程中系统表损坏 ### 预防措施 ```bash # 首次安装时务必执行 mysqld --initialize --user=mysql # 使用RPM包安装时自动初始化 yum install mysql-server ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值