原文地址:https://www.jeremyjone.com/847/, 转载请注明。
这几天需要升级 MySQL,又折腾了半天,这个升级之路还是有一点曲折的。
升级之前
在升级之前需要做几件事情:
做好备份
-
备份
/var/lib/mysql
路径下的所有文件cp -r /var/lib/mysql /var/lib/mysql_backup
-
备份
/etc/my.cnf
文件cp /etc/my.cnf /etc/my_backup.cnf
-
备份整个数据库
mysqldump -u<username> -p --add-drop-table --routines --events --all-databases --force > data-for-upgrade.sql
确认更新内容
除了备份,还需要注意断档更新内容。主要是8.0的更新内容,详细内容可以参看 官方文档。
关闭数据库
当然还需要将数据库关闭,这是在升级之前的最后步骤。
1、关闭服务
systemctl stop mysqld
2、停止数据库
mysql -u<username> -p --execute="SET GLOBAL innodb_fast_shutdown=0"
mysqladmin -u<username> -p shutdown
从 5.6 升级到 5.7
MySQL的每一次升级都很曲折,它不支持跨版本升级,需要一级一级的升,这就很麻烦。这也是因为每次升级都有断档的内容,所以需要格外谨慎,必须做好备份。
5.6
到 5.7
其实还算稳定,做好备份之后,直接升级即可。
1、下载 rpm
cd ~
wget https://repo.mysql.com/mysql57-community-release-el7.rpm
2、移除 5.6 版本
yum remove mysql-community-release
如果在后面安装 5.7 版本时提示存在冲突错误,可以使用 mysql-community-*
直接删除所有相关内容。
3、下载安装包
rpm -ivh mysql57-community-release-e17.rpm
4、更新
yum update mysql
5、启动
systemctl start mysqld
如果成功,继续向下。如果失败,可以检查一下错误。启动失败,通常报这样的一句话:
Job for mysqld.service failed because the control process exited with error code. See "systemctl status mysqld.service" and "journalctl -xe" for details.
此时通过 systemctl status mysqld
可以查看服务的状态和基本错误信息。
通常,如果有以下错误的:
[ERROR] Plugin 'InnoDB' init function returned error.
[ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
[ERROR] Failed to initialize builtin plugins.
[ERROR] Aborting
可以通过删除 /var/lib/mysql/
文件夹中的以 ib_data
为前缀的文件修复。
如果有以下错误的:
[ERROR] Can‘t start server: Bind on TCP/IP port: Address already in use
[ERROR] Do you already have another mysqld server running on port: 3306 ?
[ERROR] Aborting