我最近将版本从 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 数据文件夹一切都再次顺利运行。