怎样在 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) 在进入第 3 阶段之前等待 rsync 完成。

第 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 社区版本。 为了方便升级和降级 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 并且可以被应用程序完全访问。 在此阶段,应测试使用数据库的任何站点或应用程序并调查所有错误。