本文地址:https://www.askmac.cn/archives/mysql-upgrade.html
我们知道,对于MySQL的新版本开发仍在继续,Oracle现在对MySQL发行版更新也很频繁。新版本中增加了许多新特性且修正了旧版本中发现的问题。然而,你不应该在未深入了解升级所涉及到的问题和困难程度的情况下贸然进行新版本的升级。如果你需要进行升级,请在执行操作前仔细阅读官方的《MySQL参考手册》:
- 总是留意查看升级部分中是否有你所需进行升级时要注意的要点。如果有,请遵照所描述的操作步骤进行升级操作。
- 检查修改注意部分中在你当前安装版本后的所有相关修改信息,由于有些修正并非都是向后兼容的,因此在你进行升级时,你需要对你的已存应用进行一定的改变。
除了那些警告提示外,升级MySQL总体上可以简单使用以下步骤进行操作:
- 备份你的数据库
- 关闭Server
- 在已存版本上安装新版本MySQL
- 启动Server
如果你在原有版本的最顶层目录上覆盖安装了最新版本MySQL数据库,你可能就不需要做太多的重新设定。这是因为MySQL在Windows版本的安装,RPM包安装,和源文件安装中都使用相同的安装目录,且无关MySQL版本。不过,如果你在升级MySQL时使用tar文件安装的话,新发行版本的安装更像是进行基于特定版本的目录安装,而不是按已有的安装目录进行安装。因此,在这种情况下,你就需要在升级安装时进行一些重新设置了。如果你已经建立有一个软链接来指向你的旧有安装目录,你可以删除此链接,重建并指向新的安装目录。之后操作中对此链接的引用将对新安装的文件进行访问。
升级MySQL有时也会给你带来一些新的安全特性。因此请详细阅读官方手册升级部分,以了解准确的操作步骤。
MySQL当前提供的升级不提供跳级升级,因此,如果你当前的MySQL版本为5.1, 那么升级到5.7的流程为:
5.1 -> 5.5 -> 5.6 -> 5.7
3.9.1 mysql_upgrade程序
在每次进行MySQL升级时,你都应该执行mysql_upgrade程序。它会检查是否所有数据库中的表和当前版本的MySQL Server相兼容。如果发现有问题,相应的表会被修正。mysql_uprade也会对系统表进行升级,这样你才能使用到这些新的权限或相应增加的能力。
所有被检查并修正后的表都会以当前升级的MySQL版本号进行标示。这保证了下次你运行mysql_uprade时,程序可以分辨出哪些表需要检查和进行再次修正。
mysql_upgrade也会将MySQL版本号保存在数据目录下的一个mysql_upgrade_info的文件中。这个文件被用于快速查看是否所有表针对升级版本已经做了检查,是否可以跳过表检查。当然,运行mysql_upgrade时,你也可以使用 --force
项来跳过查看此文件。
在MySQL 5.7.5之前,为了检查和修正表并进行系统表升级,mysql_upgrade会调用以下命令:
mysqlcheck --check-upgrade --all-databases --auto-repair mysql_fix_privilege_tables
mysql_upgrade代替了过去mysql_fix_privilege_tables脚本,同时进行表的兼容性检查。在MySQL 5.1.7时,mysql_upgrade仅可在Unix系统上运行的一个shell脚本。在MySQL 5.1.10之后,mysql_upgrade则是一个可用于所有系统的二进制可执行文件。
需要注意的是,从MySQL 5.7.5以后,mysql_upgrade将直接和MySQL Server交互,发送所需的SQL语句来执行升级。
在使用mysql_upgrade前,请先确保数据库正在运行,然后执行命令:
shell> mysql_upgrade [options]
mysql_upgrade会阅读命令行中的选项并从配置文件中读取对应[mysql_upgrade]组中的配置项来进行操作。它支持以下选项:
--help
显示帮助信息--basedir=path
MySQL安装目录定位。注意,此参数在7.2版本后被废弃。--datadir=path
数据目录定位。注意,此参数在7.2版本后被废弃。--force
强制执行mysqlcheck,即便mysql_upgrade已经对当前MySQL版本进行了检查修正。(换句话说,此选项忽略mysql_upgrade_info文件的查看)--user=user_name, -u user_name
MySQL使用此用户名连接数据库服务。默认用户名是--verbose
verbose模式。对程序所做操作输出更多操作细节。
Comment