1. 项目概述
最近在国产ARM64架构服务器上部署一套业务系统时,遇到了MySQL数据库的安装适配问题。不同于常见的x86架构,ARM64环境下的软件安装往往需要特别注意兼容性问题。本文将详细记录在CentOS7操作系统上安装MySQL5.7的全过程,特别针对ARM64架构的适配要点。
提示:虽然MySQL官方提供了x86架构的通用安装包,但ARM64环境需要从特定渠道获取适配版本,否则会出现运行时错误。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 环境准备与依赖检查
2.1 系统环境确认
首先需要确认当前系统的架构版本:
bash复制uname -m
如果输出是aarch64,则表明是ARM64架构。同时检查CentOS版本:
bash复制cat /etc/redhat-release
确保系统是CentOS7.x版本。我这次使用的具体环境是:
- 操作系统:CentOS Linux release 7.9.2009 (Core)
- 架构:aarch64
- 内核:3.10.0-1160.el7.aarch64
2.2 依赖包安装
MySQL5.7在ARM64架构下需要以下基础依赖:
bash复制yum install -y libaio numactl
对于中文环境,建议额外安装:
bash复制yum install -y langpacks-zh_CN
3. MySQL5.7安装方案选择
3.1 安装方式对比
在ARM64架构下,主要有三种安装方式:
| 安装方式 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
| 源码编译 | 完全适配当前环境 | 耗时较长,需要解决依赖 | 有定制化需求 |
| RPM包安装 | 安装简单快速 | 需要找到适配的ARM64版本 | 生产环境推荐 |
| 二进制包 | 解压即可用 | 需要手动配置 | 测试环境 |
经过评估,我选择了RPM包安装方案,因为:
- 生产环境需要标准化安装
- 已有可靠的ARM64适配版本源
- 便于后续维护和升级
3.2 获取ARM64适配的RPM包
从国内镜像站下载适配ARM64的MySQL5.7 RPM包:
bash复制wget https://mirrors.aliyun.com/mysql/MySQL-5.7/mysql-community-server-5.7.38-1.el7.aarch64.rpm
wget https://mirrors.aliyun.com/mysql/MySQL-5.7/mysql-community-client-5.7.38-1.el7.aarch64.rpm
wget https://mirrors.aliyun.com/mysql/MySQL-5.7/mysql-community-common-5.7.38-1.el7.aarch64.rpm
wget https://mirrors.aliyun.com/mysql/MySQL-5.7/mysql-community-libs-5.7.38-1.el7.aarch64.rpm
重要:必须确认下载的是aarch64版本,x86_64版本无法在ARM架构运行。
4. 详细安装步骤
4.1 卸载旧版本MySQL
如果系统已安装其他版本MySQL,需要先彻底卸载:
bash复制# 检查已安装的MySQL包
rpm -qa | grep mysql
# 卸载现有包
rpm -e --nodeps mysql-community-server mysql-community-client mysql-community-libs
4.2 安装MySQL RPM包
按顺序安装下载的RPM包:
bash复制rpm -ivh mysql-community-common-5.7.38-1.el7.aarch64.rpm
rpm -ivh mysql-community-libs-5.7.38-1.el7.aarch64.rpm
rpm -ivh mysql-community-client-5.7.38-1.el7.aarch64.rpm
rpm -ivh mysql-community-server-5.7.38-1.el7.aarch64.rpm
安装完成后验证:
bash复制rpm -qa | grep mysql
应该能看到四个已安装的包。
4.3 初始化MySQL数据库
执行初始化命令:
bash复制mysqld --initialize --user=mysql
这个命令会:
- 创建数据目录/var/lib/mysql
- 生成临时root密码(保存在/var/log/mysqld.log中)
查看初始密码:
bash复制grep 'temporary password' /var/log/mysqld.log
4.4 启动MySQL服务
设置开机启动并启动服务:
bash复制systemctl enable mysqld
systemctl start mysqld
检查服务状态:
bash复制systemctl status mysqld
5. 安全配置与优化
5.1 修改root密码
使用初始密码登录:
bash复制mysql -uroot -p
执行密码修改:
sql复制ALTER USER 'root'@'localhost' IDENTIFIED BY '新密码';
注意:MySQL5.7默认要求强密码策略,密码需包含大小写字母、数字和特殊字符。
5.2 基础安全设置
运行安全脚本:
bash复制mysql_secure_installation
按提示完成以下设置:
- 修改root密码
- 移除匿名用户
- 禁止root远程登录
- 移除测试数据库
- 重新加载权限表
5.3 字符集配置
编辑MySQL配置文件:
bash复制vi /etc/my.cnf
在[mysqld]段添加:
ini复制character-set-server=utf8mb4
collation-server=utf8mb4_general_ci
重启服务生效:
bash复制systemctl restart mysqld
6. 常见问题解决
6.1 安装依赖冲突
错误现象:
code复制Error: Package: mysql-community-libs-5.7.38-1.el7.aarch64
Requires: libc.so.6(GLIBC_2.14)(64bit)
解决方案:
bash复制yum install -y glibc
6.2 服务启动失败
检查错误日志:
bash复制tail -100 /var/log/mysqld.log
常见原因及解决:
- 权限问题:
chown -R mysql:mysql /var/lib/mysql - 端口冲突:修改/etc/my.cnf中的端口号
- 内存不足:增加swap空间
6.3 远程连接配置
如需远程访问,需要:
- 创建远程用户:
sql复制CREATE USER 'username'@'%' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON *.* TO 'username'@'%';
FLUSH PRIVILEGES;
- 开放防火墙端口:
bash复制firewall-cmd --zone=public --add-port=3306/tcp --permanent
firewall-cmd --reload
7. 性能优化建议
7.1 内存配置
根据服务器内存调整my.cnf配置:
ini复制[mysqld]
innodb_buffer_pool_size = 2G # 建议为物理内存的50-70%
innodb_log_file_size = 256M
key_buffer_size = 256M
7.2 连接数调整
ini复制max_connections = 500
wait_timeout = 600
interactive_timeout = 600
7.3 存储引擎优化
ini复制innodb_file_per_table = ON
innodb_flush_log_at_trx_commit = 2 # 对数据安全性要求不高时可设为2提升性能
sync_binlog = 0
8. 备份与恢复方案
8.1 定时备份配置
创建备份脚本/root/mysql_backup.sh:
bash复制#!/bin/bash
DATE=$(date +%Y%m%d)
BACKUP_DIR="/data/backup/mysql"
MYSQL_USER="backup"
MYSQL_PASS="password"
mkdir -p $BACKUP_DIR/$DATE
mysqldump -u$MYSQL_USER -p$MYSQL_PASS --all-databases | gzip > $BACKUP_DIR/$DATE/all_dbs.sql.gz
设置定时任务:
bash复制crontab -e
添加:
code复制0 2 * * * /bin/bash /root/mysql_backup.sh
8.2 数据恢复方法
解压并恢复备份:
bash复制gzip -d all_dbs.sql.gz
mysql -uroot -p < all_dbs.sql
9. 监控与维护
9.1 基础监控命令
查看连接数:
sql复制SHOW STATUS LIKE 'Threads_connected';
查看慢查询:
sql复制SHOW VARIABLES LIKE 'slow_query_log';
SHOW VARIABLES LIKE 'long_query_time';
9.2 定期维护建议
- 每周检查表状态:
sql复制ANALYZE TABLE tablename;
- 每月优化表:
sql复制OPTIMIZE TABLE tablename;
- 定期清理二进制日志:
sql复制PURGE BINARY LOGS BEFORE '2023-01-01 00:00:00';
10. 架构适配经验
在ARM64架构上运行MySQL5.7,我总结了以下几点特别注意事项:
-
性能表现:ARM64架构的CPU核心通常较多,但单核性能可能不如x86,建议适当增加innodb_read_io_threads和innodb_write_io_threads参数值(通常设置为4-8)
-
内存管理:ARM架构对NUMA支持较好,建议启用:
ini复制innodb_numa_interleave = ON
- 编译优化:如果采用源码编译方式,建议使用以下编译参数:
bash复制cmake . -DCMAKE_BUILD_TYPE=Release \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITH_READLINE=1 \
-DWITH_SSL=system \
-DWITH_ZLIB=system \
-DWITH_LIBWRAP=0 \
-DENABLED_LOCAL_INFILE=1 \
-DMYSQL_DATADIR=/var/lib/mysql \
-DCMAKE_C_FLAGS="-march=armv8-a" \
-DCMAKE_CXX_FLAGS="-march=armv8-a"
- 稳定性监控:ARM架构服务器需要特别关注内存使用情况,建议部署监控系统定期检查:
bash复制# 监控内存使用
free -m
# 监控SWAP使用
vmstat 1 5
经过实际生产环境验证,MySQL5.7在ARM64架构上运行稳定,性能表现满足大多数业务场景需求。特别是在国产化替代项目中,这种组合方案已经得到广泛应用。
