首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >设置MySQL错误:表'mysql.plugin‘不存在

问设置MySQL错误:表'mysql.plugin‘不存在
EN

Stack Overflow用户
提问于 2017-11-02 12:34:01
回答 5查看 45.9K关注 0票数 12

我在Ubuntu 16上运行了一个MySQL 5.7实例,没有问题,但是当我试图安装任何其他软件包或尝试通过apt更新现有软件包时,我会得到以下错误:

代码语言:javascript
复制
# apt-get upgrade

Setting up mysql-server-5.7 (5.7.20-0ubuntu0.16.04.1) ...
Checking if update is needed.
Checking server version.
Running queries to upgrade MySQL server.
mysql_upgrade: [ERROR] 1146: Table 'mysql.plugin' doesn't exist
mysql_upgrade failed with exit status 5
 dpkg: error processing package mysql-server-5.7 (--configure):
  subprocess installed post-installation script returned error exit status 1
No apport report written because the error message indicates its a followup error from a previous failure.
dpkg: dependency problems prevent configuration of mysql-server:
mysql-server depends on mysql-server-5.7; however:
Package mysql-server-5.7 is not configured yet.

dpkg: error processing package mysql-server (--configure):
 dependency problems - leaving unconfigured
Errors were encountered while processing:
 mysql-server-5.7
 mysql-server

如果我运行一个mysqlcheck,看起来有些系统表是存在的,但另一些表却丢失了:

代码语言:javascript
复制
mysql.columns_priv                                 OK
mysql.db                                           OK
mysql.engine_cost
Error    : Table 'mysql.engine_cost' doesn't exist
status   : Operation failed
mysql.event                                        OK
mysql.func                                         OK
mysql.general_log                                  OK
mysql.gtid_executed
Error    : Table 'mysql.gtid_executed' doesn't exist
status   : Operation failed
mysql.help_category
Error    : Table 'mysql.help_category' doesn't exist
status   : Operation failed
mysql.help_keyword
Error    : Table 'mysql.help_keyword' doesn't exist
status   : Operation failed
mysql.help_relation
Error    : Table 'mysql.help_relation' doesn't exist
status   : Operation failed
mysql.help_topic
Error    : Table 'mysql.help_topic' doesn't exist
status   : Operation failed
mysql.innodb_index_stats
Error    : Table 'mysql.innodb_index_stats' doesn't exist
status   : Operation failed
mysql.innodb_table_stats
Error    : Table 'mysql.innodb_table_stats' doesn't exist
status   : Operation failed
mysql.ndb_binlog_index                             OK
mysql.plugin
Error    : Table 'mysql.plugin' doesn't exist
status   : Operation failed
mysql.proc                                         OK
mysql.procs_priv                                   OK
mysql.proxies_priv                                 OK
mysql.server_cost
Error    : Table 'mysql.server_cost' doesn't exist
status   : Operation failed
mysql.servers
Error    : Table 'mysql.servers' doesn't exist
status   : Operation failed
mysql.slave_master_info
Error    : Table 'mysql.slave_master_info' doesn't exist
status   : Operation failed
mysql.slave_relay_log_info
Error    : Table 'mysql.slave_relay_log_info' doesn't exist
status   : Operation failed
mysql.slave_worker_info
Error    : Table 'mysql.slave_worker_info' doesn't exist
status   : Operation failed
mysql.slow_log                                     OK
mysql.tables_priv                                  OK
mysql.time_zone
Error    : Table 'mysql.time_zone' doesn't exist
status   : Operation failed
mysql.time_zone_leap_second
Error    : Table 'mysql.time_zone_leap_second' doesn't exist
status   : Operation failed
mysql.time_zone_name
Error    : Table 'mysql.time_zone_name' doesn't exist
status   : Operation failed
mysql.time_zone_transition
Error    : Table 'mysql.time_zone_transition' doesn't exist
status   : Operation failed
mysql.time_zone_transition_type
Error    : Table 'mysql.time_zone_transition_type' doesn't exist
status   : Operation failed
mysql.user                                         OK
sys.sys_config
Error    : Table 'sys.sys_config' doesn't exist
status   : Operation failed

但是,数据库正在正确运行,如果我手动检查一个SQL,它看起来就像是表存在.。

代码语言:javascript
复制
mysql> SHOW TABLES;
+---------------------------+
| Tables_in_mysql           |
+---------------------------+
| columns_priv              |
| db                        |
| engine_cost               |
| event                     |
| func                      |
| general_log               |
| gtid_executed             |
| help_category             |
| help_keyword              |
| help_relation             |
| help_topic                |
| innodb_index_stats        |
| innodb_table_stats        |
| ndb_binlog_index          |
| plugin                    |
| proc                      |
| procs_priv                |
| proxies_priv              |
| server_cost               |
| servers                   |
| slave_master_info         |
| slave_relay_log_info      |
| slave_worker_info         |
| slow_log                  |
| tables_priv               |
| time_zone                 |
| time_zone_leap_second     |
| time_zone_name            |
| time_zone_transition      |
| time_zone_transition_type |
| user                      |
+---------------------------+

我使用innodb_file_per_table=1设置,/var/lib/mysql目录的所有者被正确地设置为mysql用户。

我想在不丢弃现有数据的情况下解决这个问题,但是我的想法已经没有了。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2017-11-07 16:35:50

最后,解决问题的唯一方法是清除和重新安装mysql库,备份数据库,并在所有过程之后恢复数据库:

代码语言:javascript
复制
# Backup database
time mysqldump -u root -p database > /var/backups/restore_backup.sql

# Backup config and data
mv /var/lib/mysql /tmp/backups/mysql-lib.bak
cp /etc/mysql/my.cnf /tmp/backups/my.cnf.bak

# Purge library
sudo apt-get remove --purge mysql-server mysql-client mysql-common
sudo apt-get autoremove
sudo apt-get autoclean

# Reinstall
sudo apt-get update
sudo apt-get install mysql-server

# Restore config
cp /tmp/backups/my.cnf.bak /etc/mysql/my.cnf
sudo service mysql restart

# Create database
mysql -u root -p
mysql> CREATE DATABASE database;

# Restore backup
time mysql -u root -p database < /var/backups/restore_backup.sql
票数 5
EN

Stack Overflow用户

发布于 2018-02-07 16:14:27

我今天也遇到了同样的问题,我成功地解决了这个问题,而没有备份-重新安装-恢复步骤。(虽然我有后援,但每个人都应该这么做!)

在我的例子中,在plugin.ibd目录中有一个/var/lib/mysql/mysql/文件,其他缺少的表也在那里有文件,但可能由于某种原因它们是不完整的。

我做了以下工作:

  1. 将mysql.plugin表的文件移到另一个目录,例如:mv /var/lib/mysql/mysql/plugin.* /other/place/
  2. 运行apt-get upgrade -y来查看发生了什么。升级脚本正确地重新创建了mysql.plugin表,并抱怨了另一个表。
  3. 我用升级脚本告诉我的表名重复了上面的步骤,在以这种方式重新创建了19个表之后,升级成功地完成了。

当然,我所做的所有步骤都是基于以下几点:

代码语言:javascript
复制
cd /var/lib/mysql/mysql
mkdir temp
mv engine_cost.*               temp/
mv gtid_executed.*             temp/
mv help_category.*             temp/
mv help_keyword.*              temp/
mv help_relation.*             temp/
mv help_topic.*                temp/
mv innodb_index_stats.*        temp/
mv innodb_table_stats.*        temp/
mv plugin.*                    temp/
mv server_cost.*               temp/
mv servers.*                   temp/
mv slave_master_info.*         temp/
mv slave_relay_log_info.*      temp/
mv slave_worker_info.*         temp/
mv time_zone.*                 temp/
mv time_zone_leap_second.*     temp/
mv time_zone_name.*            temp/
mv time_zone_transition.*      temp/
mv time_zone_transition_type.* temp/
apt-get upgrade -y

我希望它能帮到别人。

票数 13
EN

Stack Overflow用户

发布于 2021-10-28 05:46:53

试着跑:

代码语言:javascript
复制
bash-4.2# mysql_install_db --user=mysql --ldata=/var/lib/mysql/
Installing MariaDB/MySQL system tables in '/var/lib/mysql/' ...
OK

这应该会将系统表安装在数据目录中。然后重新启动mysql/mariadb服务。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47075429

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档