Fork me on GitHub
Suzf  Blog

[译] Percona Server In-Place Upgrading Guide From 5.6 to 5.7

就地升级是使用服务器中的现有数据来完成。 一般来说,就是停止服务器,安装新的服务器版本并使用之前的数据文件启动它。 虽然它可能不适合于高复杂性的环境,但它们可能适用于许多场景。 以下是5.7系列中相关的改变的总结。 强烈建议您阅读以下指南,因为它们包含可能导致自动升级失败的不兼容更改的信息:

  1. Changed in Percona Server 5.7
  2. Upgrading MySQL
  3. Upgrading from MySQL 5.6 to 5.7
注意 在一个崩溃的实例上从5.6升级到5.7是不推荐的。如果这个服务器上的实例已经崩溃了,应该在进行升级前将崩溃的实例恢复。 同时在版本升级完成之后,一定要记得执行 mysql_upgrade 并重新启动服务,否则 Mysql user 表可能会出现兼容问题。因为Mysql 5.7 的表结构做了细微更改。

使用 Percona 的仓库进行升级

如果可能最简单和推荐的方法是使用Percona的仓库。 在系统中启用仓库的说明可以从下面的找到:

  1. Percona APT Repository
  2. Percona YUM Repository

基于DEB发行版本

注意

接下来执行命令需要切换到 root 用户或者是使用 sudo

待完全备份(或是 对数据进行转储)完成之后,停止服务进程:

service mysql stop

之后继续修改你所需要的在配置文件中,正如文章开头所述的那样。

注意 如果你运行的是 Debian / Ubuntu系统,systemd作为默认系统的服务管理器,你可以使用systemctl 代替 service 来调用上面的命令。 目前都是支持的。

接着安装新的服务:

$ apt-get install percona-server-server-5.7

如果您正在使用的是 Percona Server 5.6 与 TokuDB,您还需要指定 TokuDB 包:

$ apt-get install percona-server-server-5.7 percona-server-tokudb-5.7

安装脚本不会像以前的版本一样自动运行 mysql_upgrade。 您需要手动运行该命令,并在完成 更新后重新启动服务。

$ mysql_upgrade

Checking if update is needed.
Checking server version.
Running queries to upgrade MySQL server.
Checking system database.
mysql.columns_priv                                 OK
mysql.db                                           OK
mysql.engine_cost                                  OK
...
Upgrade process completed successfully.
Checking if update is needed.

$ service mysql restart

注意:从MySQL 5.6 或 5.7 升级到 Percona Server 5.7 时,此过程是相同的。

基于RPM发行版本

注意

接下来执行命令需要切换到 root 用户或者是使用 sudo

待完全备份(或是 对数据进行转储)完成之后,停止服务进程:

service mysql stop
注意 如果你运行的是 RHEL / CentOS系统,systemd作为默认系统的服务管理器,你可以使用systemctl 代替 service 来调用上面的命令。 目前都是支持的。

检测你所安装的软件包:

$ rpm -qa | grep Percona-Server
Percona-Server-shared-56-5.6.28-rel76.1.el7.x86_64
Percona-Server-server-56-5.6.28-rel76.1.el7.x86_64
Percona-Server-devel-56-5.6.28-rel76.1.el7.x86_64
Percona-Server-client-56-5.6.28-rel76.1.el7.x86_64
Percona-Server-test-56-5.6.28-rel76.1.el7.x86_64
Percona-Server-56-debuginfo-5.6.28-rel76.1.el7.x86_64

检查之后,接着忽略依赖关系移除它们:

$ rpm -qa | grep Percona-Server | xargs rpm -e --nodeps

这是很重要的删除它的时候忽略依赖关系,因为许多软件包可能依赖这些(因为它们取代mysql),如果省略,将被删除。 注意:从MySQL 5.6 或 5.7 升级到 Percona Server 5.7 时,此过程是相同的。只需要将 Percona-Server 使用 `grep '^mysql-'` 替代 并移除它们。 你将需要安装下面的软件包:

  1. Percona-Server-server-57
$ yum install Percona-Server-server-57

如果您正在使用的是 Percona Server 5.6 与 TokuDB,您还需要指定 TokuDB 包:

$ yum install Percona-Server-server-57 Percona-Server-tokudb-57

安装后,继续修改配置文件 my.cnf,并在必要时重新安装插件。

注意 如果您使用的是TokuDB存储引擎,您需要在启动服务器之前注释掉配置文件中的所有TokuDB 特定的变量,否则服务器将无法启动。 RHEL / CentOS 7自动将以前的配置文件备份到/etc/my.cnf.rpmsave并安装默认的my.cnf。 在升级/安装过程完成后,您可以移动旧的配置文件(在删除所有不支持的系统变量后)。

现在你可以启动 mysql 服务了:

$ service mysql start

并使用 `mysql_upgrade` 迁移到新的授权表,如果需要的话,它将重建索引并进行所需的修改:

注意 如果你正在使用 TokuDB 存储引擎,你将需要运行下面的命令重新启用存储引擎插件 ps_tokudb_admin --enable # 需要在执行 mysql_upgrade 之前进行,否则你将会得到错误
$ mysql_upgrade
Checking if update is needed.
Checking server version.
Running queries to upgrade MySQL server.
Checking system database.
mysql.columns_priv                                 OK
mysql.db                                           OK
...
pgrade process completed successfully.
Checking if update is needed.

待更新完毕,向往常一样重启服务:

$ service mysql restart

服务成功重新启动后,您就可以使用新的Percona Server 5.7。

使用独立软件包升级

基于DEB发行版本

待完全备份(或是 对数据进行转储)完成之后,停止服务进程:

service mysql stop

移除所安装的软件包含它们的依赖包:

$ sudo apt-get autoremove percona-server-server-56 percona-server-client-56

软件删除之后继续修改你所需要的在配置文件中,正如文章开头所述的那样。 接着, 根据你的系统 结构[x86, x86_64]下载下面的安装包:

  1. percona-server-server-5.7
  2. percona-server-client-5.7
  3. percona-server-common-5.7
  4. libperconaserverclient20

以下示例将为Debian 8.0下载Percona Server 5.7.10-3发行版软件包:

$ wget https://www.percona.com/downloads/Percona-Server-5.7/Percona-Server-5.7.10-3/binary/debian/jessie/x86_64/Percona-Server-5.7.10-3-r63dafaf-jessie-x86_64-bundle.tar

解压缩包之后,您应该看到以下包:

$ ls *.deb
libperconaserverclient20-dev_5.7.10-3-1.jessie_amd64.deb
libperconaserverclient20_5.7.10-3-1.jessie_amd64.deb
percona-server-5.7-dbg_5.7.10-3-1.jessie_amd64.deb
percona-server-client-5.7_5.7.10-3-1.jessie_amd64.deb
percona-server-common-5.7_5.7.10-3-1.jessie_amd64.deb
percona-server-server-5.7_5.7.10-3-1.jessie_amd64.deb
percona-server-source-5.7_5.7.10-3-1.jessie_amd64.deb
percona-server-test-5.7_5.7.10-3-1.jessie_amd64.deb
percona-server-tokudb-5.7_5.7.10-3-1.jessie_amd64.deb

现在你通过下面命令可以安装 Percona Server:

$ sudo dpkg -i *.deb

这将安装软件包中的所有软件包。 另一个选项是仅下载/指定运行Percona Server安装所需的软件包(libperconaserverclient20_5.7.10-3-1.jessie_amd64.deb,percona-server-client-5.7_5.7.10-3-1.jessie_amd64.deb,percona -server-common-5.7_5.7.10-3-1.jessie_amd64.deb和percona-server-server-5.7_5.7.10-3-1.jessie_amd64.deb。如果你想要TokuDB存储引擎,您可以选择安装percona-server-tokudb-5.7_5 .7.10-3-1.jessie_amd64.deb)。

注意

Percona Server 5.7 附带 TokuDB storage engine.  你可以找到更多的信息在TokuDB Installation 手册中关于 `如何安装和启用 TokuDB 存储引擎` 的文章。

 

警告

如果你选择手动安装的的时候,你需要自己解决依赖关系并安装需要的软件包。

这种方式安装脚本不会像以前的版本一样自动运行 mysql_upgrade。 您需要手动运行该命令,并在完成 更新后重新启动服务。

基于RPM发行版本

待完全备份(或是 对数据进行转储)完成之后,停止服务进程:

service mysql stop

检查你所安装的软件:

$ rpm -qa | grep Percona-Server

Percona-Server-shared-56-5.6.28-rel76.1.el6.x86_64
Percona-Server-server-56-5.6.28-rel76.1.el6.x86_64
Percona-Server-client-56-5.6.28-rel76.1.el6.x86_64
Percona-Server-tokudb-56-5.6.28-rel76.1.el6.x86_64

您可能有一个shared-compat 包,这是为了兼容性目的。 检查完之后,进行忽略依赖管理移除软件:

$ rpm -qa | grep Percona-Server | xargs rpm -e --nodeps

这是很重要的删除它的时候忽略依赖关系,因为许多软件包可能依赖这些(因为它们取代mysql),如果省略,将被删除。 注意:从MySQL 5.6 或 5.7 升级到 Percona Server 5.7 时,此过程是相同的。只需要将 Percona-Server 使用 `grep '^mysql-'` 替代 并移除它们。 在 download page 中根据你系统的结构下载需要的系列。最简单的方法是下载包含所有包的包。 以下示例将为CentOS 7下载Percona Server 5.7.10-3发行包:

$ wget https://www.percona.com/downloads/Percona-Server-5.7/Percona-Server-5.7.10-3/binary/redhat/7/x86_64/Percona-Server-5.7.10-3-r63dafaf-el7-x86_64-bundle.tar

你应该解压包已获得软件包:

$ tar xvf Percona-Server-5.7.10-3-r63dafaf-el7-x86_64-bundle.tar

解压之后你将看到下面的软件包:

$ ls *.rpm
Percona-Server-57-debuginfo-5.7.10-3.1.el7.x86_64.rpm
Percona-Server-client-57-5.7.10-3.1.el7.x86_64.rpm
Percona-Server-devel-57-5.7.10-3.1.el7.x86_64.rpm
Percona-Server-server-57-5.7.10-3.1.el7.x86_64.rpm
Percona-Server-shared-57-5.7.10-3.1.el7.x86_64.rpm
Percona-Server-shared-compat-57-5.7.10-3.1.el7.x86_64.rpm
Percona-Server-test-57-5.7.10-3.1.el7.x86_64.rpm
Percona-Server-tokudb-57-5.7.10-3.1.el7.x86_64.rpm

现在,你可以安装 Percona Server 5.7,通过下面的操作:

rpm -ivh Percona-Server-server-57-5.7.10-3.1.el7.x86_64.rpm \
Percona-Server-client-57-5.7.10-3.1.el7.x86_64.rpm \
Percona-Server-shared-57-5.7.10-3.1.el7.x86_64.rpm

这种方式将只安装 Percona Server 5.7 所需要的包. (可选) 你可以安装 TokuDB storage engine 通过添加 Percona-Server-tokudb-57-5.7.10-3.1.el7.x86_64.rpm 到上面的命令中. 你可以在 TokuDB Installation 中找到更多的信息关于如何安装和启用 TokuDB 存储引擎。 安装所有的软件包(为了测试、调试、等等),你应该运行:

$ rpm -ivh *.rpm

注意

如果你选择手动安装的的时候,你需要自己解决依赖关系并安装需要的软件包。

安装后,继续修改配置文件 - my.cnf,如果需要的话安装所需的插件。 如果您使用的是TokuDB存储引擎,您需要在启动服务器之前注释掉配置文件中的所有TokuDB特定变量,否则服务器将无法启动。 RHEL / CentOS 7自动将以前的配置文件备份到/etc/my.cnf.rpmsave并安装默认的my.cnf。 在升级/安装过程完成后,您可以移动旧的配置文件(在删除所有不支持的系统变量后)。 由于授权表的模式已更改,服务器必须在不读取它们的情况下启动:

$ service mysql start

并使用 `mysql_upgrade` 迁移到新的授权表,如果需要的话,它将重建索引并进行所需的修改:

注意 如果你正在使用 TokuDB 存储引擎,你将需要运行下面的命令重新启用存储引擎插件 ps_tokudb_admin --enable # 需要在执行 mysql_upgrade 之前进行,否则你将会得到错误
$ mysql_upgrade

当更新完之后,向往常一样重启服务:

$ service mysql restart

Percona Server 5.7

源文:Percona Server In-Place Upgrading Guide: From 5.6 to 5.7