今天,把公司的服务器从 ubuntu 14.04 升级到了 16.04,在这之前升级了家中的服务器,遇到了一些坑,主要是 MySQL 的问题,分享出来。

首先提醒大家:

  1. 备份重要文件
  2. 备份 MySQL,备份 MySQL,备份 MySQL
  3. 把一些关键软件的配置文件备份一下(比如 nginx),因为升级过程中新版本会覆盖掉一些配置文件

ubuntu 16.04 刚发布的时候,看大家都在升级,大概浏览下没有什么大的坑,于是决定先拿家里的服务器当小白鼠升级试试,公司的稍后再说。

家里服务器中的东西比较少,nginx、Docker、MySQL、MongoDB,升级方法如下:

sudo apt-get update && sudo apt-get upgrade
sudo apt-get dist-upgrade
sudo apt-get install update-manager-core
sudo do-release-upgrade -d

升级过程很轻松,需要操作需要确认,只要要提示根据自己的实际情况选择就好了。

出现问题是在升级 MySQL 的时候,需要重启 MySQL 服务,结果就一直卡在了启动的地方,等了好久无奈 ctrl-c 退出,然后重启机器,启动后查看得知,系统升级成功,MySQL 跪了。折腾了一下无奈放弃,重装了 MySQL。

我以为我遇到的问题是个案。结果,今天升级公司服务器再次跪在了 MySQL 上。

出现的问题跟上次一样,这次就不能卸载重装了,毕竟数据库中有业务数据的,于是 求助 Google。

最后找到答案,我机器上的 MySQL 版本是 5.5,而升级 ubuntu 16.04 会把 MySQL 升级到 5.7,由于 5.7 中 my.cnf 中有些配置项有变化,导致升级后 MySQL 启动失败。具体可以参考这里,具体受影响的是两个配置参数:key_buffer 变为了 key_buffer_size,myisam-recover 变为了 myisam-recover-options,于是去 /etc/mysql/my.cnf 中去替换就好了,MySQL 顺利启动。

公司的服务器上运行着 Seafile 和 Confluence 需要连接 MySQL,升级后发现这两个系统都无法启动,第一个想法还是 MySQl 的问题。

查看 Seafile 的 log 得到如下错误:

OperationalError: (1193, "Unknown system variable 'storage_engine'") 

随后搜索得知,在 MySQL 5.7 中 storage_engine 参数已经改为 default_storage_engine,于是去 /home/sunflower/app/seafile/conf seahub_settings.py 中找到如下行:

'init_command': 'SET storage_engine=INNODB',

修改为:

```‘init_command’: ‘SET default_storage_engine=INNODB’,


保存,启动 Seafile 成功。Confluence 照方抓药,去 /var/atlassian/application-data/confluence/confluence.cfg.xml 中找到 MySQL 连接字符串:

``` java
jdbc:mysql://localhost/confluence?sessionVariables=storage_engine%3DInnoDB&useUnicode=true&characterEncoding=utf8

修改为:

jdbc:mysql://localhost/confluence?sessionVariables=default_storage_engine%3DInnoDB&useUnicode=true&characterEncoding=utf8

Confluence 启动成功。