ARM架构源码编译部署MySQL 5.7.42实战全记录

发布时间:2026/9/8 0:21:17
ARM架构源码编译部署MySQL 5.7.42实战全记录 在实际生产环境里碰到ARM架构的服务器要跑MySQL 5.7.42第一反应基本都是赶紧找个现成的x86二进制包或者直接拉个Docker镜像省事。但真正落到aarch64这种非主流架构上就会发现官方MySQL 5.7.42的二进制包主要面向x86_64aarch64要么是第三方打包要么就得自己从源码编译。我当时是在一台华为鲲鹏920的机器上64核aarch64接手一个存量业务数据库版本被业务代码锁死在5.7.42官方RPM包根本没有这个架构的现成产物第三方源又不敢随便用最后只能走源码编译这条路。这篇文章我把整个过程完整记录下来架构识别、依赖准备、CMake参数、make编译、数据目录初始化、systemd服务注册、常见报错排查还有ARM平台上特有的几个坑。给同样需要在ARM64服务器上部署MySQL 5.7的同学当一份可以直接抄的实战手册尤其是那些刚接触ARM服务器、对源码编译还不太熟悉的运维和开发照着走基本能一遍过。1. 先搞清楚为什么要源码编译而不是拉个现成包1.1 我的实际场景与选型理由先交代一下背景。那台机器是华为鲲鹏920处理器操作系统是Ubuntu 22.04 LTS内核版本5.15架构是标准的aarch64。业务方明确要求MySQL版本必须是5.7.42不能升级到8.0因为应用里有用到一些老语法和存储过程8.0下行为有变化动起来成本太高。当时摆在我面前的有几条路去MySQL官网下载5.7.42的通用二进制包官网上翻了很久5.7版本提供的Linux通用包只有x86_64aarch64根本不在支持列表里。用系统自带的apt或yum装Ubuntu 22.04自带的MySQL是8.0而且没有5.7的旧版本源一旦用第三方PPA依赖库和glibc版本对不对得上都是问题。用Docker跑一个MySQL 5.7容器这个思路理论上可行但一是宿主机资源有限二是Docker镜像在多架构环境下需要拉对应平台的tag三是生产环境里数据库走容器还要额外解决数据卷、网络和备份方案周期更长。源码编译选这条路的直接原因是可控性最强。编译参数自己定安装路径自己定依赖关系明明白白而且能在ARM原生环境下生成针对aarch64指令集优化的二进制文件性能上有保障。1.2 没走Docker和第三方包的原因Docker方案被我否掉有个很现实的点是很多云平台上ARM架构的Docker Hub镜像拉取速度很慢而且MySQL 5.7的官方镜像虽然有aarch64版本但镜像里跑的是Debian或Oracle Linux跟宿主机的内核适配虽然没问题可一旦要挂载宿主机目录、做资源限制性能损失和运维复杂度都会上来。第三方源的问题更直接ARM版的MySQL 5.7 RPM包很多是从Percona或MariaDB改造过来的版本号虽然对齐了5.7.42但编译选项可能不一样比如InnoDB的buffer pool管理、字符集默认配置、SSL支持这些细节都会影响业务表现。最稳妥的方案还是自己下载MySQL官方源码在目标机器上原生编译。1.3 整体编译部署流程梳理整个流程可以分这么几步环境检查确认CPU架构、内核版本、可用内存和磁盘空间避免编译到一半被OOM干掉。安装编译工具链和依赖库比如gcc、g、cmake、bison、ncurses、libaio、zlib、openssl。下载MySQL 5.7.42源码包准备好对应版本的Boost库。用CMake配置编译选项这一步是最关键的路径、存储引擎、字符集都在这里定。make编译这一步耗时最长需要控制并发线程数。make install安装创建mysql用户、数据目录和日志目录。编写my.cnf配置文件初始化数据目录。注册systemd服务启动MySQL并做基本验证。每一步都有不少细节下面我从头开始拆解。2. 编译前的依赖准备这步最容易卡住2.1 确认你的ARM环境基本盘动手之前先把环境信息摸清楚。我用这几条命令确认基础信息uname -m # 输出aarch64 lscpu # 输出Architecture: aarch64、CPU(s): 64、Model name: Kunpeng-920 free -h # 输出内存情况编译建议至少剩余8G以上空闲内存 df -h /usr/local /tmp # 确认编译安装目录和临时目录的剩余空间这里有个容易被忽略的点MySQL 5.7.42的源码编译在-O2优化下非常吃内存尤其是文件比较多的几个模块比如InnoDB存储引擎和SQL解析器。我实际遇到过8G内存的机器在make -j8时直接被OOM killer把进程干掉的案例。所以编译前看一眼free输出如果内存紧张至少要准备足够的swap空间否则后面编译必然出幺蛾子。另外磁盘空间也要留够。源码解压后大约1.5G编译过程的中间文件会更多所以/usr/local和/tmp所在分区至少要预留10G以上。如果/usr/local和/tmp不在同一个分区注意分别检查。2.2 依赖包安装缺一个后面都是泪源码编译MySQL最烦的就是依赖库缺失经常编译到一半报一个头文件找不到然后回头装依赖再重新编译。提前把依赖一次装齐能省很多时间。Ubuntu/Debian系统和CentOS/RHEL系统的包名不完全一样我分别列出来。Ubuntu 22.04 / Debian 11 用apt安装apt update apt install -y \ build-essential \ cmake \ bison \ libncurses5-dev \ libncursesw5-dev \ libaio-dev \ libnuma-dev \ zlib1g-dev \ libssl-dev \ pkg-config \ perl \ libtirpc-devCentOS 7/8或openEuler这类红帽系系统用yum安装yum groupinstall -y Development Tools yum install -y \ cmake \ bison \ ncurses-devel \ libaio-devel \ numactl-devel \ zlib-devel \ openssl-devel \ gcc \ gcc-c \ make \ perl我把关键依赖的作用简单说明一下依赖作用缺失时典型报错cmake构建MySQL的配置工具CMake Error: Could not find CMAKE_ROOTgcc/gC/C编译器编译器不存在直接报错bison生成SQL语法解析器Bison not foundlibncurses-dev终端交互库MySQL编译需用到curses库Could NOT find Curseslibaio-devLinux异步IO库InnoDB依赖libaio.h找不到libssl-dev编译SSL支持模块SSL库找不到zlib1g-dev压缩库InnoDB压缩表需要zlib.h找不到libtirpc-dev提供rpc/xdr头文件新版glibc已移除rpc/xdr.h找不到这里特别说下libtirpc-dev这个依赖。Ubuntu 22.04使用的glibc 2.35已经移除了rpc/xdr.h头文件而MySQL 5.7.x的某些源码文件还引用了这个头文件。网上很多老的编译教程没提这个结果在较新系统上编译直接报fatal error: rpc/xdr.h: No such file or directory。解决方案就是安装libtirpc-dev然后在CMake配置时把它的头文件目录加进编译参数后面我会给出具体方法。2.3 Boost依赖的两种处理方式MySQL 5.7源码编译时对Boost库版本有严格要求5.7.42对应的是Boost 1.59.0版本不匹配会在CMake阶段直接报错。处理Boost有几种方式。第一种最简单让CMake自动下载cmake . \ -DDOWNLOAD_BOOST1 \ -DWITH_BOOST/usr/local/boost不过国内服务器访问boost官网经常超时自动下载很容易失败。我当时就是下载失败两次后改用了手动方式。第二种手动下载Boost源码包# 先从boost官网或国内镜像下载boost_1_59_0.tar.gz # 放到/usr/local/boost目录 mkdir -p /usr/local/boost cd /usr/local/boost wget https://boostorg.jfrog.io/artifactory/main/release/1.59.0/source/boost_1_59_0.tar.gz tar -zxvf boost_1_59_0.tar.gz然后把源码包里自带的boost目录也拷贝一份到MySQL源码目录下这样CMake能直接使用cd /usr/local/src/mysql-5.7.42 cp -r /usr/local/boost/boost_1_59_0/boost ./boost配置时引用这个目录cmake . -DWITH_BOOST./boost我推荐手动方式因为网络不受限而且编译失败的排查路径更清晰。Boost本身不需要编译它是个头文件库解压出来就能用所以源码包下载不要求在目标机器上编译。3. 源码获取、CMake配置与make编译3.1 下载源码与校验MySQL 5.7.42的官方源码可以从MySQL官网下载也可以从GitHub的MySQL页签拉取。推荐直接使用官方源码包的tar.gz格式避免Git拉取时子模块不一致的问题。cd /usr/local/src wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.42.tar.gz sha256sum mysql-5.7.42.tar.gz下载完成后先做一次SHA256校验确保源码包没有被破坏。官方页面上会提供对应的SHA256值对比一下一致再解压。这一步虽然简单但在生产环境中非常有必要GitHub下载偶尔会出现断点续传导致文件损坏的情况压缩包损坏时解压会报错排查起来很浪费时间。解压并进入源码目录tar -zxvf mysql-5.7.42.tar.gz cd mysql-5.7.423.2 CMake参数逐个拆解CMake是MySQL 5.7默认的构建系统配置阶段会检查所有依赖、确定编译选项、生成Makefile。我第一次编译时对着一堆参数有点懵后来理清楚后发现关键就那几个大多数参数保持默认就行。我这里给出一套经过验证的CMake配置命令cmake . \ -DCMAKE_INSTALL_PREFIX/usr/local/mysql \ -DMYSQL_DATADIR/data/mysql/data \ -DSYSCONFDIR/etc \ -DWITH_INNOBASE_STORAGE_ENGINE1 \ -DWITH_MYISAM_STORAGE_ENGINE1 \ -DWITH_PARTITION_STORAGE_ENGINE1 \ -DWITH_BLACKHOLE_STORAGE_ENGINE1 \ -DWITH_FEDERATED_STORAGE_ENGINE0 \ -DWITH_EMBEDDED_SERVER0 \ -DWITH_SSLsystem \ -DWITH_ZLIBsystem \ -DWITH_BOOST./boost \ -DENABLE_DOWNLOADS1 \ -DDEFAULT_CHARSETutf8mb4 \ -DDEFAULT_COLLATIONutf8mb4_general_ci \ -DWITH_UNIT_TESTSOFF \ -DEXTRA_CHARSETSall各参数含义和选型依据参数值说明CMAKE_INSTALL_PREFIX/usr/local/mysqlMySQL安装根目录所有bin、lib、share都会装到这里MYSQL_DATADIR/data/mysql/data数据目录建议单独放到数据盘不要放系统盘SYSCONFDIR/etc配置文件my.cnf所在目录WITH_INNOBASE_STORAGE_ENGINE1InnoDB引擎默认就开但不显式写也建议写清楚WITH_MYISAM_STORAGE_ENGINE1MyISAM引擎5.7的系统库还依赖它WITH_PARTITION_STORAGE_ENGINE1分区表支持WITH_SSLsystem使用系统OpenSSL库生产环境必须开SSL支持WITH_ZLIBsystem使用系统zlib库InnoDB压缩表需要WITH_BOOST./boost指定Boost源码目录DEFAULT_CHARSETutf8mb4默认字符集业务推荐utf8mb4DEFAULT_COLLATIONutf8mb4_general_ci排序规则WITH_UNIT_TESTSOFF关闭单元测试减少编译工作量EXTRA_CHARSETSall编译所有额外字符集方便以后迁移有两点要特别说明。第一点是libtirpc的路径。在Ubuntu 22.04上用system的openssl和zlib时编译阶段可能还会遇到rpc/xdr.h找不到的问题。解决办法是在CMake时加一句C_FLAGScmake . -DCMAKE_C_FLAGS-I/usr/include/tirpc -DCMAKE_CXX_FLAGS-I/usr/include/tirpc这里的/usr/include/tirpc就是libtirpc-dev安装后头文件所在位置。ARM平台的Ubuntu和Debian都有这个路径红帽系一般是/usr/include/tirpc或者集成在/usr/include里以实际为准。第二点是存储引擎取舍。FEDERATED引擎我关了因为实际用到的场景很少而且开启后有一定安全风险。BLACKHOLE则看个人需要用于复制中继的场景才会用。如果磁盘够大、编译时间不敏感想省心就直接-DWITH_ALL_STORAGE_ENGINES1。不过这个参数在5.7里会附带很多不常用的引擎编译时间会明显变长不建议这么干。3.3 make编译的线程选择与内存控制CMake配置成功后会生成Makefile然后进入真正的编译阶段。编译命令很简单make -j$(nproc)nproc在某些机器上会输出核心数比如64核机器会返回64直接make -j64理论上最快。但这里有个内存的坑MySQL 5.7.42的源码编译每一条编译线程大约需要500MB到1GB内存。64核机器如果内存只有32Gmake -j64会直接把内存耗尽触发OOM。我当时的机器是64核配128G内存所以make -j64没问题整个编译大约耗时40分钟。如果你的机器内存小建议手动控制并发数比如# 内存16G建议-j4 make -j4 # 内存32G建议-j8 make -j8编译过程中终端会不断打印编译日志看到类似Linking CXX executable mysqld、Built target mysqld这样的输出说明大件已经编译完成。编译完成后再执行make -j4 installmake install会复制文件到/usr/local/mysql目录。这一步很快几秒钟就完成。如果在编译过程中出现被OOM killer杀掉的情况系统日志里会有记录终端可能直接看到Killed字样。这种情况不要盲目重新make先确认内存和swap情况加swap或者降低-j线程数再重新触发编译。因为make做了增量编译之前已经编译成功的对象文件不会被重新编译所以重新make的耗时比第一次短很多。3.4 make install安装与目录权限规划编译安装完成后进入目录规划环节。我习惯把MySQL的数据目录单独放在数据盘上和系统盘分离方便备份和扩容。# 创建mysql用户和组useradd指定不登录、没有home目录 groupadd mysql useradd -r -g mysql -s /bin/false -M mysql # 创建数据目录、日志目录、套接字目录 mkdir -p /data/mysql/data mkdir -p /data/mysql/log mkdir -p /data/mysql/run # 设置属主和属组 chown -R mysql:mysql /data/mysql # 安装目录也需要授权部分初始化脚本要写文件 chown -R mysql:mysql /usr/local/mysql这里有个小细节-s /bin/false是为了让mysql用户无法登录Shell提升安全性。-M在部分发行版上表示不创建home目录如果系统不支持这个参数可以不加。数据目录和日志目录的分区建议单独挂载。如果/data和/在同一个分区也没关系但一定要预留足够的空间特别是InnoDB的redo log和binlog会持续增长数据库运行几个月后日志体积会很可观。4. 初始化数据目录把MySQL跑起来4.1 my.cnf配置文件打磨MySQL的配置文件在/etc/my.cnf编译安装时指定的SYSCONFDIR就是/etc。第一次启动MySQL之前先写一份基础配置。这里给出我自己用的配置模板[mysqld] # 基础路径 basedir/usr/local/mysql datadir/data/mysql/data socket/data/mysql/run/mysql.sock pid-file/data/mysql/run/mysql.pid log-error/data/mysql/log/error.log # 连接与网络 port3306 bind-address0.0.0.0 max_connections1000 skip_name_resolve1 # 字符集 character-set-serverutf8mb4 collation-serverutf8mb4_general_ci # InnoDB innodb_buffer_pool_size2G innodb_log_file_size512M innodb_flush_log_at_trx_commit1 innodb_file_per_table1 innodb_io_capacity2000 innodb_io_capacity_max4000 # binlog server-id1 log_bin/data/mysql/log/mysql-bin binlog_formatrow expire_logs_days7 [mysql] default-character-setutf8mb4 [client] socket/data/mysql/run/mysql.sock配置里几个关键项说明一下datadir必须和CMake时指定的MYSQL_DATADIR保持一致否则初始化时会报路径不匹配。socket放到/data/mysql/run目录避免默认的/tmp/mysql.sock在重启后因为tmp清理机制出问题。skip_name_resolve1关闭DNS反向解析避免远程连接时DNS解析超时这是生产环境常用优化但注意开了之后授权表里的host字段只能使用IP地址。innodb_buffer_pool_size这个值一般建议设置为物理内存的50%到70%我这里是128G内存的机器但配置里只写了2G做最小演示。实际生产按照你的内存规格调整如果内存是64G建议设到32G。expire_logs_days7binlog保留7天避免磁盘被日志撑爆。4.2 用mysqld --initialize初始化数据MySQL 5.7和之前版本最大的不同是初始化数据目录的命令变了不再推荐使用mysql_install_db而是用mysqld --initialize。这个命令会在数据目录下生成系统库和InnoDB表空间。初始化分两种模式。第一种--initialize会生成一个随机root密码并把这个密码写到错误日志里。/usr/local/mysql/bin/mysqld --defaults-file/etc/my.cnf --initialize --usermysql执行完以后查看错误日志grep temporary password /data/mysql/log/error.log # 会输出类似2016-01-01T00:00:00.000000Z 1 [Warning] A temporary password is generated for rootlocalhost: xxxxxx第二种--initialize-insecure会生成一个空密码的root用户适合脚本化部署后续用SQL语句设置密码。/usr/local/mysql/bin/mysqld --defaults-file/etc/my.cnf --initialize-insecure --usermysql我个人的建议生产环境用--initialize因为随机密码更安全而且初始化后第一次登录时必须改密码符合安全基线要求。脚本自动化场景可以用--initialize-insecure但初始化后要立即通过SQL设置强密码。初始化完成后检查数据目录下的文件确认生成了mysql、performance_schema、sys这些目录以及ibdata1这个InnoDB系统表空间文件。还有一个容易被坑到的点初始化时如果/data/mysql/data目录不为空mysqld会报错并拒绝初始化。所以如果你之前初始化过后来想重新来一定要先把数据目录清空。rm -rf /data/mysql/data/*4.3 注册systemd服务并启动MySQL 5.7自带的启动脚本是mysqld_safe但我们用systemd管理会更方便。创建一个service文件vim /etc/systemd/system/mysql.service内容如下[Unit] DescriptionMySQL Community Server Afternetwork.target [Service] Typeforking Usermysql Groupmysql PIDFile/data/mysql/run/mysql.pid ExecStart/usr/local/mysql/bin/mysqld --defaults-file/etc/my.cnf --daemonize ExecReload/bin/kill -s HUP $MAINPID ExecStop/bin/kill -s QUIT $MAINPID PrivateTmpfalse [Install] WantedBymulti-user.target注意ExecStart里的--daemonize参数。MySQL 5.7.20以后支持mysqld直接以守护进程方式运行加了这个参数后mysqld会自动fork到后台并且systemd的Typeforking才能正确识别主进程PID。如果不加这个参数systemd会认为服务没有启动成功导致启动超时。保存后执行systemctl daemon-reload systemctl enable mysql systemctl start mysql systemctl status mysql如果一切正常status会显示active (running)。如果失败用journalctl -u mysql查看启动日志排查错误。4.4 首次登录、改密码与基本验证初始化采用的是--initialize-insecure那么root密码为空可以直接登录/usr/local/mysql/bin/mysql -uroot -S /data/mysql/run/mysql.sock如果采用的是--initialize则用错误日志里的临时密码登录/usr/local/mysql/bin/mysql -uroot -p -S /data/mysql/run/mysql.sock登录后第一件事就是改root密码ALTER USER rootlocalhost IDENTIFIED BY YourStrongPassword2024; FLUSH PRIVILEGES;创建远程访问的管理账号CREATE USER admin% IDENTIFIED BY AnotherStrongPassword2024; GRANT ALL PRIVILEGES ON *.* TO admin% WITH GRANT OPTION; FLUSH PRIVILEGES;基本验证SELECT VERSION(); -- 输出5.7.42 SELECT port, socket, datadir; -- 确认端口、套接字路径、数据目录都正确再验证连接数mysqladmin -uroot -p ping # 输出mysqld is alive到这里MySQL 5.7.42已经在ARM架构上跑起来了。5. ARM编译部署的坑与性能调优建议5.1 编译期遇到的报错速查表我整理一下整个编译部署过程中可能遇到的典型报错和解决办法都是实际环境里反复出现的问题按问题现象分类。报错信息原因分析解决办法CMake Error: Could NOT find Curses缺少ncurses开发库apt install libncurses5-dev重新cmakefatal error: rpc/xdr.h: No such file or directoryglibc 2.35移除了rpc头文件安装libtirpc-dev并在CMake时加入-I/usr/include/tirpcCMake Error: Unable to find boost 1.59.0缺少Boost依赖手动下载boost_1_59_0解压到源码目录-DWITH_BOOST./boostCMake Error: Could NOT find OpenSSL缺少openssl开发库apt install libssl-devmysqld: Cant create/write to file /data/mysql/run/mysql.pid目录权限不足确认mysql用户对/data/mysql/run目录有写权限error while loading shared libraries: libssl.so.1.1系统OpenSSL版本过新编译时使用-DWITH_SSLsystem或确保系统有对应openssl版本Killed编译进程被终止内存不足触发OOM增加swap或降低make -j并发数[ERROR] --initialize specified but the data directory exists数据目录不为空清空datadir后重新初始化ERROR 1820: You must reset your password初始化后未修改默认密码执行ALTER USER设置新密码其中rpc/xdr.h那个报错是Ubuntu 22.04和Debian 12这类新系统上最容易遇到的。解决方式我再说一遍安装libtirpc-dev后在CMake配置里加上-DCMAKE_C_FLAGS-I/usr/include/tirpc -DCMAKE_CXX_FLAGS-I/usr/include/tirpc。如果不加编译到sql目录下的某些文件时会崩很烦人。另外还有一个ARM平台比较特殊的问题如果编译器是基于老版本的GCC比如默认gcc 9以下在aarch64上编译时可能会遇到internal compiler error。这种情况优先升级GCC版本apt install -y gcc-11 g-11 update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-11 110 update-alternatives --install /usr/bin/g g /usr/bin/g-11 1105.2 ARM平台特有性能优化方向编译部署完成后性能验证和调优同样重要。ARM架构在数据库场景下有它自己的特点不能完全照搬x86的调优策略。第一点CPU核心数与线程池。MySQL 5.7的InnoDB在高并发下表现受innodb_buffer_pool_size和innodb_buffer_pool_instances影响较大。ARM服务器核心数通常很多我这台是64核建议把buffer pool实例数设置为8或16减少并发访问时的锁竞争innodb_buffer_pool_size32G innodb_buffer_pool_instances8第二点NUMA架构。鲲鹏920是典型的NUMA架构如果MySQL发生内存跨节点访问性能会有明显下降。启动参数里可以加上numactlnumactl --interleaveall /usr/local/mysql/bin/mysqld --defaults-file/etc/my.cnf --daemonize或者安装numad服务让它自动调度但实际测试下来在MySQL上手动指定--interleaveall比较有效。第三点IO调度。ARM服务器通常搭配SSD或NVMe磁盘IO调度器建议改成none或mq-deadline。MySQL运行时大量随机读写cfq调度器性能很拉胯。临时修改方法echo none /sys/block/nvme0n1/queue/scheduler持久化要根据系统配置udev规则或者grub参数这里不展开。第四点看看MySQL当前运行状态SHOW ENGINE INNODB STATUS\G重点看Buffer pool hit rate正常情况下应该接近100%。如果这个值低于99%说明buffer pool太小需要调大innodb_buffer_pool_size。5.3 我在实操中的几条心得体会整个ARM架构源码编译部署MySQL 5.7.42的过程前后折腾了整整两天。第一天卡在boost下载和rpc头文件缺失上第二天卡在初始化时报data directory错误后来发现是之前有残留文件没清干净。这里把经验总结成几条编译环境一定要准备充分再动手。CMake阶段能检查出来的依赖问题都是小问题编译阶段报出来的头文件缺失才是真头疼。建议把2.2节里的依赖包一次装齐尤其是libaio-dev和libtirpc-dev一个关乎InnoDB一个关乎新系统兼容都是在编译后期才暴露的坑。CMAKE_INSTALL_PREFIX和MYSQL_DATADIR这两个路径在配置阶段定好之后后面my.cnf、systemd服务、初始化命令都要围绕它来写不要中途改。我就见过同事CMake时指定了一个datadir后面my.cnf里又写了另一个路径导致mysqld启动时找不到系统表来回排查浪费了几个小时。还有一点make编译时别贪心。-j$(nproc)看着快但如果内存不够被OOM干掉重新编译虽然能做增量但花的时间一点也不少。我实测下来内存16G的机器用make -j4编译整个MySQL 5.7.42大约需要90分钟虽然慢但稳定。内存32G可以用make -j8能压到60分钟左右。宁可编译慢一点也不要中途被Killed重来。最后一个小技巧初始化完成、登录MySQL之后顺手把默认的root账号改成只能用socket登录限制远程root访问。然后创建独立的业务账号权限按最小化原则给。ARM平台上的MySQL和x86平台在安全配置上没有区别但很多人容易忽略趁部署的时候就把基础安全做好后面省很多事。如果后续要把这套方案批量化部署到多台ARM服务器上可以优化一下流程编译好的MySQL安装在本地做成一个tar包拷贝到其他同架构机器解压然后只做初始化和配置这样能省去每台机器都编译一遍的重复劳动。不过要注意这种方式要求目标机器的glibc版本保持一致否则二进制兼容性会有问题。

相关新闻