对于一些小型数据库来说,“正在从 MySQL 5.7 升级数据字典”需要很长时间

对于一些小型数据库来说,“正在从 MySQL 5.7 升级数据字典”需要很长时间

我最近将版本从 18.04 更新到了 20.04。更新后 SQL 不起作用。检查状态后,systemctl status mysql.service我得到了以下信息:

● mysql.service - MySQL Community Server
     Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: enabled)
     Active: activating (start) since Mon 2021-04-26 00:09:58 CEST; 3s ago
    Process: 115994 ExecStartPre=/usr/share/mysql/mysql-systemd-start pre (code=exited, status=0/SUCCESS)
   Main PID: 116002 (mysqld)
     Status: "Data Dictionary upgrade from MySQL 5.7 in progress"
      Tasks: 29 (limit: 9450)
     Memory: 382.6M
     CGroup: /system.slice/mysql.service
             └─116002 /usr/sbin/mysqld

它最终会恢复吗?我看到 mysql 进程占用了大量 CPU(例如 30%),但 4 个小时过去了,好像什么都没发生。它坏了吗?

顺便说一句,我的数据库中有重要数据。我唯一的备份只是复制了 /var/lib/mysql 目录。但我想恢复起来并不容易吧?

我在该服务器上的数据库非常小,因此我很惊讶它需要这么长时间。

答案1

我通过删除 mysql 解决了这个问题

$ apt 删除 mysql-*

然后按照本指南重新安装 mysql 5.7

https://www.claudiokuenzler.com/blog/991/install-mysql-5.7-on-ubuntu-20.04-focal-avoid-8.0-packages

我很高兴我找回了我的数据,而不需要恢复备份

我确实认为兼容版本损坏的自动升级是一个错误;)

答案2

事实证明,这确实是我的一个数据库中的错误,存储过程不兼容。我/var/log/mysql/error.log按照上面的评论中的建议,通过查看文件找到了确切的错误。

然而,MySQL 服务器完全没有响应,一直占用大约 30% 的服务器 CPU。我试图终止该进程,它立即重新启动了。

甚至sudo apt remove mysql-server mysql-server-8.0沒有幫助。

我尝试了所有方法,只是正常启动服务器而不转换或导入数据,但没有任何效果。

以下是我恢复数据并重新开始的步骤:

我创建了一个新的虚拟机,在其上安装了 Ubuntu Server 18.04 LTS,安装了 MySQL,将所有备份的 MySQL 数据文件复制到其上,将所有者更改为mysql用户,启动服务器,然后我就可以使用mysqldump它将我的所有数据库导出到“正确的”sql 文件。

然后我清除了所有 MySQL 服务器包,sudo apt purge mysql-*然后重新安装了新的 MySQL 服务器。然后从 sql 文件导入我的数据。当然,正如我所料 - 由于上述不兼容,其中一个数据库无法导入,但我修复了有问题的代码并导入了剩余的数据。

一切正常。顺便说一句,我学到了如何正确引用字段和表名的艰难方法,因为一些常用词可能会成为 MySQL 未来版本的关键字。因此,即使看起来没有必要,也请始终使用反引号引用名称。

答案3

让您的服务器再次顺利运行且不丢失数据的最简单解决方案:

sudo apt purge mysql-* (但不要删除mysql数据文件夹)

然后安装 mariadb sudo apt install mariadb-server

我这样做了,使用 mysql-5.7 数据文件夹一切都再次顺利运行。

相关内容