说明:使用mydumper从CentOS7的x86架构MySQL5.7.42迁移到KylinV10[Red Hat Enterprise Linux (RHEL) 8 64位]Aarch架构MySQL8.0.42
准备:有网络的CentOS 7服务器,有网络的RHEL 8 64位服务器(kylinV10 Aarch架构服务器的替代品)
为什么主机是windows的只能安装Kylin-Server-V10-SP3-2403-Release-20240426-X86_64.iso的虚拟机,安装Kylin-Server-V10-SP3-2403-Release-20240426-arm64.iso架构的虚拟机时提示操作系统未找到
Windows 主机只能启动 x86_64 的麒麟镜像,而无法启动 arm64 (aarch64) 镜像,这其实是CPU 架构不兼容导致的
一、在CentOS7上离线安装mydumper
--1.查询
rpm -qa | grep mydumper
--2.卸载旧mydumper
sudo rpm -e mydumper-0.15.1-1.x86_64
--3.官网下载mydumper-0.20.2-2.el7.x86_64.rpm放在任意一个单独的目录下
https://github.com/mydumper/mydumper/releases/tag/v0.20.2-2
-rw-r--r-- 1 root root 1748644 11月 3 10:41 mydumper-0.20.2-2.el7.x86_64.rpm
--4.(在有网的服务器上)下载 Mydumper 及其所有依赖: 我们使用 --resolve 参数,并强制 yumdownloader 去远程仓库查找并下载,而不是依赖本地系统已安装的包。
# 我们下载 mydumper 和 pcre2
[root@localhost mydumperfile]# sudo yumdownloader mydumper pcre2 --resolve
--5.(在有网的服务器上)如果使用系统默认的 MariaDB 客户端库 (最常见),下载 mariadb-libs 及其所有依赖
mkdir mariaDB && cd mariaDB
sudo yumdownloader mariadb-libs --resolve
--6.把
安装包mydumper-0.20.2-2.el7.x86_64.rpm
Mydumper 及其所有依赖。mydumperfile目录下的所有文件
将 MySQL 客户端库(即 mariadb-libs 或 mysql-community-libs)及其相关的依赖包。mariaDB目录下的所有文件
放到同一目录下,跳过重复项,放到无网络环境服务器
[root@xxx-xx-xxx-xx mydumper]# ll
总用量 29796
-rw-r--r-- 1 root root 4467180 11月 3 11:12 glibc-2.17-326.el7_9.3.i686.rpm
-rw-r--r-- 1 root root 3818092 11月 3 11:12 glibc-2.17-326.el7_9.3.x86_64.rpm
-rw-r--r-- 1 root root 12060632 11月 3 11:13 glibc-common-2.17-326.el7_9.3.x86_64.rpm
-rw-r--r-- 1 root root 1129276 11月 3 11:12 glibc-devel-2.17-326.el7_9.3.x86_64.rpm
-rw-r--r-- 1 root root 708260 11月 3 11:13 glibc-headers-2.17-326.el7_9.3.x86_64.rpm
-rw-r--r-- 1 root root 25852 11月 3 11:13 keyutils-libs-1.5.8-3.el7.i686.rpm
-rw-r--r-- 1 root root 831008 11月 3 11:13 krb5-libs-1.15.1-55.el7_9.i686.rpm
-rw-r--r-- 1 root root 43132 11月 3 11:13 libcom_err-1.42.9-19.el7.i686.rpm
-rw-r--r-- 1 root root 113236 11月 3 11:13 libgcc-4.8.5-44.el7.i686.rpm
-rw-r--r-- 1 root root 169856 11月 3 11:13 libselinux-2.5-15.el7.i686.rpm
-rw-r--r-- 1 root root 301460 11月 3 11:13 libsepol-2.5-10.el7.i686.rpm
-rw-r--r-- 1 root root 326568 11月 3 11:13 libstdc++-4.8.5-44.el7.i686.rpm
-rw-r--r-- 1 root root 313196 11月 3 11:13 libstdc++-4.8.5-44.el7.x86_64.rpm
-rw-r--r-- 1 root root 16728 11月 3 11:13 libverto-0.2.5-4.el7.i686.rpm
drwxr-xr-x 2 root root 4096 11月 3 11:13 mariaDB
-rw-r--r-- 1 root root 778076 11月 3 11:13 mariadb-libs-5.5.68-1.el7.i686.rpm
-rw-r--r-- 1 root root 778264 11月 3 11:13 mariadb-libs-5.5.68-1.el7.x86_64.rpm
-rw-r--r-- 1 root root 1748644 11月 3 11:13 mydumper-0.20.2-2.el7.x86_64.rpm
-rw-r--r-- 1 root root 131028 11月 3 11:13 nspr-4.35.0-1.el7_9.x86_64.rpm
-rw-r--r-- 1 root root 335260 11月 3 11:13 nss-softokn-freebl-3.90.0-6.el7_9.i686.rpm
-rw-r--r-- 1 root root 328772 11月 3 11:13 nss-softokn-freebl-3.90.0-6.el7_9.x86_64.rpm
-rw-r--r-- 1 root root 82096 11月 3 11:13 nss-util-3.90.0-1.el7_9.x86_64.rpm
-rw-r--r-- 1 root root 1021796 11月 3 11:13 openssl-libs-1.0.2k-26.el7_9.i686.rpm
-rw-r--r-- 1 root root 200572 11月 3 11:13 pcre2-10.23-2.el7.i686.rpm
-rw-r--r-- 1 root root 206176 11月 3 11:13 pcre2-10.23-2.el7.x86_64.rpm
-rw-r--r-- 1 root root 430428 11月 3 11:13 pcre-8.32-17.el7.i686.rpm
-rw-r--r-- 1 root root 93224 11月 3 11:13 zlib-1.2.7-21.el7_9.i686.rpm
[root@1xx-xx-xxx-xx mydumper]# cd mariaDB/
[root@1xx-xx-xxx-xx mariaDB]# ll
总用量 27684
-rw-r--r-- 1 root root 4467180 11月 3 11:13 glibc-2.17-326.el7_9.3.i686.rpm
-rw-r--r-- 1 root root 3818092 11月 3 11:13 glibc-2.17-326.el7_9.3.x86_64.rpm
-rw-r--r-- 1 root root 12060632 11月 3 11:13 glibc-common-2.17-326.el7_9.3.x86_64.rpm
-rw-r--r-- 1 root root 1129276 11月 3 11:13 glibc-devel-2.17-326.el7_9.3.x86_64.rpm
-rw-r--r-- 1 root root 708260 11月 3 11:13 glibc-headers-2.17-326.el7_9.3.x86_64.rpm
-rw-r--r-- 1 root root 25852 11月 3 11:13 keyutils-libs-1.5.8-3.el7.i686.rpm
-rw-r--r-- 1 root root 831008 11月 3 11:13 krb5-libs-1.15.1-55.el7_9.i686.rpm
-rw-r--r-- 1 root root 43132 11月 3 11:13 libcom_err-1.42.9-19.el7.i686.rpm
-rw-r--r-- 1 root root 113236 11月 3 11:13 libgcc-4.8.5-44.el7.i686.rpm
-rw-r--r-- 1 root root 169856 11月 3 11:13 libselinux-2.5-15.el7.i686.rpm
-rw-r--r-- 1 root root 301460 11月 3 11:13 libsepol-2.5-10.el7.i686.rpm
-rw-r--r-- 1 root root 326568 11月 3 11:13 libstdc++-4.8.5-44.el7.i686.rpm
-rw-r--r-- 1 root root 313196 11月 3 11:13 libstdc++-4.8.5-44.el7.x86_64.rpm
-rw-r--r-- 1 root root 16728 11月 3 11:13 libverto-0.2.5-4.el7.i686.rpm
-rw-r--r-- 1 root root 778076 11月 3 11:13 mariadb-libs-5.5.68-1.el7.i686.rpm
-rw-r--r-- 1 root root 778264 11月 3 11:13 mariadb-libs-5.5.68-1.el7.x86_64.rpm
-rw-r--r-- 1 root root 131028 11月 3 11:13 nspr-4.35.0-1.el7_9.x86_64.rpm
-rw-r--r-- 1 root root 335260 11月 3 11:13 nss-softokn-freebl-3.90.0-6.el7_9.i686.rpm
-rw-r--r-- 1 root root 328772 11月 3 11:13 nss-softokn-freebl-3.90.0-6.el7_9.x86_64.rpm
-rw-r--r-- 1 root root 82096 11月 3 11:13 nss-util-3.90.0-1.el7_9.x86_64.rpm
-rw-r--r-- 1 root root 1021796 11月 3 11:13 openssl-libs-1.0.2k-26.el7_9.i686.rpm
-rw-r--r-- 1 root root 430428 11月 3 11:13 pcre-8.32-17.el7.i686.rpm
-rw-r--r-- 1 root root 93224 11月 3 11:13 zlib-1.2.7-21.el7_9.i686.rpm
--7.安装
# 这一命令会按照正确的依赖顺序安装所有包
sudo yum localinstall *.rpm -y
验证安装
mydumper --version
myloader --version
说明
Mydumper 核心需要以下库及其对应的 -devel (或 -dev) 包,以提供编译时所需的头文件。
目标 依赖包名称 (需下载) 作用
MySQL 客户端 mariadb-devel 或 mysql-devel 提供连接 MySQL 的客户端库和头文件(核心依赖)。
GLib/GThread glib2-devel 提供多线程和高级数据结构支持(Mydumper 的主要框架)。
PCRE 正则 pcre2-devel 或 pcre-devel 提供正则表达式支持(用于过滤)。
Glib2 依赖 pkgconfig 用于查找库和头文件位置。
zlib 压缩 zlib-devel 提供 Gzip 压缩支持(用于 -c 选项)。
--8.执行备份命令
mydumper -u root -p '你的密码' -h 服务器IP地址 -P 3306 -B 要备份的数据库名 -t 8 -c -o /usr/local/mysql/mydumperbackfileNew20251105 --rows 500000
/*
在 mydumper 命令中,--rows 参数(或 -r)用于控制每个数据文件(分片)中包含的最大行数
增大参数的优势:
减少文件数量: 您的表有几百万行,增大行数可以显著减少生成的 .sql.gz 文件总数,使文件管理更加简单。
减少 I/O 开销: 文件数量减少,操作系统需要打开、关闭和操作的文件句柄也随之减少,可以略微减轻文件系统的 I/O 开销。
增大参数的劣势(权衡):
分片粒度粗: 如果一个巨大的文件在传输或导入过程中失败,您需要重新处理整个大文件,而不是较小的分片。
Myloader 并行效率: myloader 是根据文件数量来分配线程的。如果文件数量太少(例如,只有 4 个大文件),
即使您设置了 -t 16,myloader 也只能使用 4 个线程,降低了恢复的并行效率。
总结:根据表的行数选择,追求加载速度参数小一些,追求备份和过滤sqlmode速度参数就大一些
*/
--9.新旧mysql版本的sqlmode冲突,无法通过参数绕过,批量移除冲突语句(注意目录)
模式已移除: MySQL/MariaDB 在较新版本中(MySQL 8.0 和 MariaDB 10.4 起)移除了 NO_AUTO_CREATE_USER 这个 SQL 模式,因为它已被废弃。
当 Myloader 尝试在新版本数据库中设置这个旧模式时,数据库拒绝执行,导致导入失败
cd /mnt/disk06/mydumperbackfileNew20251105final/ && for file in 备份的数据库名*.sql.gz; do \
echo "Processing $file (Optimized)..."; \
gzip -dc "$file" | sed '/NO_AUTO_CREATE_USER/d' | gzip > temp."$file" && \
mv -f temp."$file" "$file"; \
done
在 mv 命令中使用 -f(force,强制)参数,告诉系统无条件覆盖目标文件
--10.至此,x86架构的mydumper安装并备份完成。将备份文件发送到新数据库服务器
scp -r 后面懒得写
二、在kylinV10上离线安装mydumper
--1.查询
rpm -qa | grep mydumper
--2.卸载旧mydumper
sudo rpm -e mydumper-0.15.1-1.x86_64
--3.官网下载mydumper-0.12.1.tar.gz放在任意一个单独的目录下
https://github.com/mydumper/mydumper/releases/tag/v0.12.1 选Source code(tar.gz)进行下载
--4.下载 Mydumper 编译核心包
# 核心编译工具
sudo dnf download --forcearch aarch64 cmake gcc-c++ pkgconf
# 注意:这里我们使用了 pkgconf 代替 pkgconfig (因为错误信息显示源中是 pkgconf)
--5.下载 Mydumper 核心依赖库
# 核心依赖库 (使用错误信息中显示的精确包名)
sudo dnf download --forcearch aarch64 mariadb-devel glib2-devel pcre2-devel zlib-devel
--6.下载 mariadb-devel 的直接依赖
sudo dnf download --forcearch aarch64 mariadb-connector-c-devel
--7.下载 glibc 核心库
虽然 glibc 是冲突的根源,但它是所有 Aarch64 包运行的基石,我们必须手动将它下载下来,并在离线机上安装。
# 下载 aarch64 版本的 glibc 及其 common/devel 包
sudo dnf download --forcearch aarch64 glibc glibc-common glibc-devel glibc-headers
得到文件
-rw-r--r-- 1 root root 7794260 11月 4 10:31 cmake-3.16.5-5.p01.ky10.aarch64.rpm
-rw-r--r-- 1 root root 7581308 11月 4 10:31 gcc-c++-7.3.0-2020033101.58.p01.ky10.aarch64.rpm
-rw-r--r-- 1 root root 3710480 11月 4 10:31 glib2-devel-2.66.8-13.p06.ky10.aarch64.rpm
-rw-r--r-- 1 root root 3153120 11月 4 10:48 glibc-2.28-98.p09.ky10.aarch64.rpm
-rw-r--r-- 1 root root 27423960 11月 4 10:48 glibc-common-2.28-98.p09.ky10.aarch64.rpm
-rw-r--r-- 1 root root 2689804 11月 4 10:48 glibc-devel-2.28-98.p09.ky10.aarch64.rpm
-rw-r--r-- 1 root root 47708 11月 4 10:32 mariadb-connector-c-devel-3.0.6-9.ky10.aarch64.rpm
-rw-r--r-- 1 root root 1079664 11月 4 10:31 mariadb-devel-10.3.39-1.p03.ky10.aarch64.rpm
-rw-r--r-- 1 root root 428608 11月 4 10:31 pcre2-devel-10.39-9.ky10.aarch64.rpm
-rw-r--r-- 1 root root 56720 11月 4 10:31 pkgconf-1.7.3-2.ky10.aarch64.rpm
-rw-r--r-- 1 root root 100784 11月 4 10:31 zlib-devel-1.2.11-23.ky10.aarch64.rpm
和mydumper-0.12.1.tar.gz
--8.在离线 x86 服务器上离线安装所有 aarch64 依赖包,执行:
# 强制安装所有 RPM 包,忽略依赖关系。
# 这样做是必要的,因为我们同时安装了 glibc 这种系统核心库。
sudo rpm -Uvh --force --nodeps *.rpm
--9.源码编译 Mydumper
# 1. 解压源码包
tar -zxvf mydumper-0.12.1.tar.gz
cd mydumper-0.12.1
--10.目前C++ 编译器环境配置不完整,下载 C++ 运行时库: libstdc++ 是 C++ 程序运行所必需的
sudo dnf download --forcearch aarch64 libstdc++
下载 C++ 开发库: libstdc++-devel 包含链接器所需的头文件和链接信息。
sudo dnf download --forcearch aarch64 libstdc++-devel
-rw-r--r-- 1 root root 401248 11月 4 10:27 libstdc++-7.3.0-2020033101.58.p01.ky10.aarch64.rpm
-rw-r--r-- 1 root root 1170872 11月 4 10:28 libstdc++-devel-7.3.0-2020033101.58.p01.ky10.aarch64.rpm
--11.在离线的麒麟 V10 服务器上离线安装libstdc++*.rpm 文件
# 强制安装新下载的 libstdc++ 相关的 RPM 包
# 这一步应该能解决 ld 找不到 -lstdc++ 的问题
sudo rpm -Uvh --force --nodeps libstdc++*.rpm
--12.重新运行 cmake 配置
在成功安装 libstdc++ 库后,返回 Mydumper 源码目录,清理并重新运行 cmake:
# 在 mydumper-0.12.1 源码目录下执行
# 清理旧的配置缓存
[root@tdh02 mydumper-0.12.1]# rm -rf CMakeCache.txt CMakeFiles/
# 重新运行 cmake 配置,显式禁用 SSL
[root@tdh02 mydumper-0.12.1]# cmake -DWITH_SSL=OFF .
# 编译(-j8 用于加速,利用您 aarch64 机器的多个CPU核心)
make -j8
# 安装
sudo make install
# 检查是否成功
mydumper --version
--13.恢复命令(不需要指定数据库名,根据备份命令时备份的数据库进行恢复)
myloader -u root -p '你的密码' -h 服务器IP地址 -P 3306 \
-d /mnt/disk06/mydumperbackfileNew20251105final \
-o -e -t 16 \
--queries-per-transaction 500000 \
--innodb-optimize-keys
kill进程,如果过程中有需要停止时直接kill
# 或者一次性杀掉所有
pkill -9 mydumper
--常见问题,导入失败后再次导入需要删除断点续传文件resume.partial
[root@tdh01 mydumperfile]# rm -f resume.partial
--修改MySQL8.0.42的字符集为utf8mb4(MySQL8.0.42字符集默认为utf8mb3)
(/etc/my.cnf),在 [mysqld] 部分添加或修改以下内容:
[mysqld]
#服务器使用d字符集默认为utf8mb4
character-set-server=utf8mb4
#collation-server = utf8_general_ci
collation-server=utf8mb4_0900_ai_ci
[mysql]
#设置mysql客户端默认字符集
default_character-set=utf8mb4
[client]
#设置mysql客户端连接服务端时默认使用的端口
#port=3306
default_character-set=utf8mb4
--流程:执行旧库备份命令、过滤sqlmode冲突语句、发送到新库服务器、执行新库恢复命令、测试 复杂SQL观察新旧库结果是否一致
以上内容整理自Gemini 2.5 Flash


被折叠的 条评论
为什么被折叠?



