如何在 Plesk CentOS 7 上用 Percona 替换 MySQL

本文概述了替换预装在任何典型 Plesk Onyx 11 CentOS 7 服务器上的本机 MySQL®️ 或 MariaDB®️ 服务的过程。 该过程概述了现有 MySQL 相关二进制文件的删除,并用适当版本的 Percona 二进制文件替换它们。 一旦这些 Percona 二进制文件就位,就会处理典型的多阶段 MySQL 增量版本升级,以将现有数据库和 Percona 二进制文件升级到所需的 Percona 5.7 版本。

维护预期:长度和停机时间

建议的维护时间: 90 分钟
最小预期停机时间: ~ 30 分钟的服务摆动

此过程的预期 MySQL 服务停机时间少于 30 分钟 MySQL 服务可用性反复上下波动(震荡)。 这个数字假设一切顺利并且没有遇到不可预见的错误。 建议的维护时间允许在出现错误时进行故障排除,以及在需要恢复所有更改并且中止维护计划的不太可能发生的情况下额外的 30 分钟。

维护阶段概述

该计划分为准备任务和阶段。 准备任务应在维护时段开始之前完成。 阶段在整个维护事件窗口中进行,并遍历完成大纲的每个重要阶段的整个过程。

准备 – 维护前任务

这两项重要任务必须在维护时段的预定开始时间之前完成:

  • 复制现有的 MySQL 配置文件
  • MySQL数据库数据的阶段备份

我们在此计划中使用零阶段来帮助加快 MySQL 数据的备份过程。 由于 MySQL 将保存的每个服务器的数据量差异很大,因此在维护事件窗口之前运行增量备份解决方案(如 rsync)是一个好习惯。 Rsync 将在 MySQL 仍在运行时备份大部分静态数据,然后在 MySQL 关闭以进行维护时备份增量差异。

复制现有的 MySQL 配置文件:
1) 制作现有自己的配置文件的备份副本。

cp -pv /etc/my.cnf{,.pre-percona.bak}

MySQL数据库数据的阶段备份:

2) 运行以下 rsync 以克隆 MySQL 数据。 [IMPORTANT: trailing slash required]

rsync -vaH /var/lib/mysql{,.pre-percona}/

注意:非常大的数据库需要相当长的时间才能完成,因此请相应地进行计划。

3) 等待第 1 步完成,然后再开始第 1 阶段。

第 1 阶段 – 关闭 MySQL 并重新运行 Rsync 最终同步

第一阶段的目的是确保在继续之前对 MySQL 数据进行原始备份。 为此,必须完全停止 MySQL 服务,以便写入所有缓冲区,并且不会向数据库写入额外的更改。 停止后,再次执行 rsync 以复制现在停止的原始数据和目标备份数据之间的差异。

1) 关闭 MySQL/MariaDB 服务

systemctl stop mysql

2) 重新运行以下 rsync 以完成克隆数据。 [IMPORTANT: trailing slash required]

rsync -vaH /var/lib/mysql{,.pre-percona}/

3) 等待 rsync 完成,然后再进入第 3 阶段。

第 2 阶段——用 Percona 5.5 替换 MariaDB 5.5 二进制文件

注意:MariaDB 5.5 是随 Onyx 11 CentOS 7 安装的版本,所以这是起点。

替换现有的二进制文件涉及使用 RPM 命令行工具而不是 yum 从系统中删除必要的二进制包。 这允许在不触及链接到其他系统包的任何依赖项的情况下删除包。 由于 Percona 和 MariaDB 一样,是 MySQL 的替代品,一旦新的二进制文件到位,链接的依赖项就不会知道其中的区别,并且会正常运行。

1) 删除没有依赖关系的 MariaDB 包:

rpm -e --nodeps mariadb mariadb-libs mariadb-server

2) 删除 mariadb-devel 包(作为一个单独的命令从上面执行,以避免删除失败对丢失的包执行)

rpm -e --nodeps mariadb-devel

3) 安装 Percona 存储库:

yum install https://www.percona.com/redir/downloads/percona-release/redhat/percona-release-0.1-4.noarch.rpm

4) 安装 Percona 数据库服务器:

yum install Percona-Server-client-55 Percona-Server-server-55 Percona-Server-shared-55

5) 执行以下命令(允许 InnoDB 插件正确加载)

mv /var/lib/mysql/ibdata1 /var/lib/mysql/ibdata1.bak
cp -a /var/lib/mysql/ibdata1.bak /var/lib/mysql/ibdata1
mv /var/lib/mysql/ib_logfile0 /var/lib/mysql/ib_logfile0.bak
cp -a /var/lib/mysql/ib_logfile0.bak /var/lib/mysql/ib_logfile0
mv /var/lib/mysql/ib_logfile1 /var/lib/mysql/ib_logfile1.bak
cp -a /var/lib/mysql/ib_logfile1.bak /var/lib/mysql/ib_logfile1

6) 确保没有进程在侦听端口 3306,如果有,则终止该进程。

netstat -tulpn | grep 3306

7) 启动 MySQL(现在是 Percona 5.5)

service mysql start

8) 运行 mysql_upgrade 脚本

mysql_upgrade -uadmin -p`cat /etc/psa/.psa.shadow`

9) [Optional] 从 Percona Toolkit 启用 Percona XtraDB Cluster UDF:

plesk db -e "CREATE FUNCTION fnv1a_64 RETURNS INTEGER SONAME 'libfnv1a_udf.so'"
plesk db -e "CREATE FUNCTION fnv_64 RETURNS INTEGER SONAME 'libfnv_udf.so'"
plesk db -e "CREATE FUNCTION murmur_hash RETURNS INTEGER SONAME 'libmurmur_udf.so'"

10) 重启 MySQL 以完成升级过程

systemctl start mysql

第 3 阶段 – 将 Plesk MySQL 包切换到 Plesk MySQL 社区包

在 Plesk 上运行 Percona 是不受支持的配置。 出于这个原因,为了满足 Plesk MySQL 包和新 Percona 二进制文件之间的依赖关系,有必要将 Plesk MySQL 版本切换为使用 Plesk MySQL Community 版本。 该更改对于促进升级和降级 Percona 版本是必要的。

1) 创建必要的 repo 配置文件:

printf '[PLESK_17_8_11-dist] %snname=PLESK_17_5_3 dist %snbaseurl=https://autoinstall.plesk.com/PSA_17.8.11/dist-rpm-CentOS-7-x86_64/ %snenabled=1 %sngpgcheck=1 %sn' > /etc/yum.repos.d/plesk178.repo

2) 从新存储库安装“plesk-mysql-server-community”包:

yum install plesk-mysql-server-community

3) 禁用 /etc/yum.repos.d/plesk178.repo 文件,因为它不再需要:

mv /etc/yum.repos.d/plesk178.repo{,.disabled}

4) 删除“plesk-mysql-server”包而不触及依赖项。

rpm -e --nodeps plesk-mysql-server

Percona 现在应该已安装并在基本 5.5 版本上运行。 接下来的阶段与升级二进制文件的典型 MySQL 升级过程相同,然后使用 mysql_upgrade 工具手动进行模式更新。

将 Percona 5.5 升级到 5.6

1) 停止 MySQL 服务:

service mysql stop

2) 删除没有依赖关系的 Percona 55 包:

rpm -e --nodeps Percona-Server-shared-55 Percona-Server-client-55 Percona-Server-server-55

3) 安装 Percona 56 包

yum install Percona-Server-shared-56 Percona-Server-client-56 Percona-Server-server-56

4) 确保没有进程在侦听端口 3306,如果有,则终止该进程。

netstat -tulpn | grep 3306

5) 启动 MySQL 服务:

service mysql start

6) 升级 MySQL 表:

mysql_upgrade -uadmin -p`cat /etc/psa/.psa.shadow`

第 4 阶段 – 将 Percona 5.6 升级到 5.7

1) 停止 MySQL 服务:

service mysql stop

2) 删除没有依赖关系的 Percona 56 包:

rpm -e --nodeps Percona-Server-shared-56 Percona-Server-client-56 Percona-Server-server-56

3) 安装 Percona 57 包

yum install Percona-Server-shared-57 Percona-Server-client-57 Percona-Server-server-57

4) 确保没有进程在侦听端口 3306,如果有,则终止该进程。

netstat -tulpn | grep 3306

5) 启动 MySQL 服务:

service mysql start

6) 升级 MySQL 表:

mysql_upgrade -uadmin -p`cat /etc/psa/.psa.shadow`

阶段 5 – 完成升级

系统现在应该运行 Percona 5.7 并且可以被应用程序完全访问。 在此阶段,应测试使用数据库的任何站点或应用程序并调查任何错误。