升级到 MySQL 5.7.15 在 Ubuntu 16.04 上崩溃

升级到 MySQL 5.7.15 在 Ubuntu 16.04 上崩溃

昨晚我尝试升级我的 Ubuntu 操作系统,MySQL 5.7.15 是其中一个变化。升级似乎成功了,因为 mysql 工作正常,但安装过程停止工作并显示以下消息:

This installation of MySQL is already upgraded to 5.7.15, 
use --force if you still need to run mysql_upgrade

我无法以常规方式取消安装过程,只能终止它。因此,它可能会导致一些问题,并且对于(将来的)其他每个安装,它都会尝试再次执行此操作。

如何阻止这次升级或者解决它?

答案1

这个解决方案解决了我的问题:

  1. 使用以下权限备份数据库文件:

    sudo cp -avt /your/backup/directory /var/lib/mysql /etc/mysql/my.cnf
    
  2. 删除mysql文件:

    sudo rm -rv /etc/mysql 
    
  3. 通过运行以下命令彻底删除 MySQL:

    sudo apt purge mysql-server mysql-server-5.7 mysql-server-core-5.7 mysql-client-5.7 mysql-client-core-5.7
    

    用于突触被推荐。

  4. 创建以下文件夹:

    sudo mkdir -p /etc/mysql/conf.d
    

    mysql 安装没有自动执行此操作,我不知道为什么。

  5. 再次安装 MySQL

    sudo apt install mysql-server
    

    我过去sudo apt install lamp-server^常常安装其他 PHP 开发依赖项。

  6. 停止 MySQL:

    sudo service mysql stop 
    
  7. 恢复数据库和文件:

    sudo cp -a /your/backup/directory/mysql /var/lib   
    sudo cp /your/backup/directory/my.cnf /etc/mysql 
    
  8. 重新启动 MySQL:

    sudo service mysql start 
    

答案2

一个简单的解决方案是sudo killall mysqld在 apt-get 操作运行时。

此后,apt 操作一直运行,没有任何错误(!)

答案3

我设法解决了这个问题,而不必清除所有内容。问题似乎是 sys 架构数据库从未创建过,所以解决方案如下:

  1. 克隆https://github.com/mysql/mysql-sys然后将 cd 进入克隆的文件夹。
  2. 在终端中,运行 mysql -u root -p < ./sys_57.sql(或 sys_56.sql,取决于您的版本)

再次享受 mysql_upgrade 的运行吧。我猜这可能是升级脚本出了问题。

答案4

我也遇到过这个问题。每次我启动 apt get 并安装时,该过程都会在数据库更新后或更新期间挂起。这里的其他解决方案都不起作用。

最后我清除了

sudo apt purge mysql-server mysql-server-5.7

并按照 mysql 的说明进行手动安装这里

然后我用旧数据覆盖了数据目录

sudo cp -Rfv /var/lib/mysql /usr/local/mysql/data

最后添加了一个像这样的 systemd 服务

/lib/systemd/system/mysql.service

[Unit]
Description=MySQL Server
After=syslog.target
After=network.target

[Service]
Type=simple
PermissionsStartOnly=true
ExecStartPre=/bin/mkdir -p /var/run/mysqld
ExecStartPre=/bin/chown mysql:mysql -R /var/run/mysqld
ExecStart=/usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --plugin-dir=/usr/lib/mysql/plugin --log-error=/var/log/mysql/error.log --pid-file=/var/run/mysqld/mysqld.pid --socket=/var/run/mysqld/mysqld.sock --port=3306
TimeoutSec=300
PrivateTmp=true
User=mysql
Group=mysql
WorkingDirectory=/usr

[Install]
WantedBy=multi-user.target

然后跑了

# systemctl daemon-reload
# systemctl enable mysql
# systemctl start mysql

然后一切似乎都像以前一样工作,mysql 也没有破坏系统更新

当然,缺点是我以后需要手动更新。

相关内容