1. 项目概述
在ARM64架构的CentOS7系统上安装MySQL5.7数据库服务,是许多企业级应用和云计算环境中的常见需求。不同于传统的x86架构,ARM平台在软件安装过程中会遇到一些特殊的依赖关系和配置问题。本文将详细记录在华为鲲鹏、飞腾等ARM服务器上部署MySQL5.7的全过程,包含从软件源配置到安全加固的完整操作指南。
2. 环境准备与依赖检查
2.1 系统基础环境确认
首先通过以下命令确认系统架构和版本:
bash复制uname -m # 确认架构为aarch64
cat /etc/redhat-release # 确认系统为CentOS 7
注意:MySQL 5.7官方已经停止维护,建议生产环境考虑MySQL 8.0。如必须使用5.7版本,需要特别注意安全补丁更新问题。
2.2 清理已有MySQL安装
为避免冲突,先移除系统可能存在的旧版本:
bash复制rpm -qa | grep mysql
sudo yum remove mysql-* mariadb-*
rm -rf /var/lib/mysql
rm -rf /etc/my.cnf
3. 软件源配置与安装
3.1 配置MySQL官方YUM源
对于ARM架构,需要下载专用的repo文件:
bash复制sudo wget https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm
sudo rpm -ivh mysql57-community-release-el7-11.noarch.rpm
编辑repo文件启用ARM64架构支持:
bash复制sudo vi /etc/yum.repos.d/mysql-community.repo
在[mysql57-community]部分添加:
code复制arch=aarch64
3.2 实际安装过程
执行安装命令并验证:
bash复制sudo yum install mysql-community-server
rpm -qi mysql-community-server # 验证版本信息
4. 关键配置调整
4.1 基础配置文件优化
编辑/etc/my.cnf,添加以下关键参数:
ini复制[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
symbolic-links=0
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
# 针对ARM架构的优化
innodb_buffer_pool_size = 1G
innodb_flush_method = O_DIRECT
skip-name-resolve
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
4.2 系统服务管理
启动服务并设置开机自启:
bash复制sudo systemctl start mysqld
sudo systemctl enable mysqld
5. 安全初始化与访问控制
5.1 获取临时密码
查看初始随机密码:
bash复制grep 'temporary password' /var/log/mysqld.log
5.2 运行安全脚本
执行安全加固向导:
bash复制mysql_secure_installation
建议设置步骤:
- 修改root密码(需包含大小写字母、数字和特殊字符)
- 移除匿名用户
- 禁止root远程登录
- 移除测试数据库
- 立即重载权限表
6. 性能优化专项
6.1 内存参数计算
根据服务器内存调整关键参数:
sql复制-- 计算建议值
SELECT @@innodb_buffer_pool_size/1024/1024 AS current_pool_size_mb;
SET GLOBAL innodb_buffer_pool_size=1024*1024*1024; -- 设置为1GB
6.2 ARM架构特有优化
在my.cnf中添加:
ini复制[mysqld]
# 针对ARM多核优化
innodb_read_io_threads = 8
innodb_write_io_threads = 8
innodb_io_capacity = 2000
innodb_io_capacity_max = 4000
7. 日常维护操作指南
7.1 备份恢复方案
使用mysqldump进行备份:
bash复制mysqldump -u root -p --all-databases > full_backup.sql
定时备份建议配置cron任务:
bash复制0 2 * * * /usr/bin/mysqldump -u backupuser -p'password' --all-databases | gzip > /backup/mysql_$(date +\%Y\%m\%d).sql.gz
7.2 日志管理策略
配置日志轮转:
bash复制sudo vi /etc/logrotate.d/mysql
添加内容:
code复制/var/log/mysqld.log {
daily
rotate 7
missingok
compress
delaycompress
notifempty
create 640 mysql mysql
postrotate
/usr/bin/mysqladmin flush-logs
endscript
}
8. 故障排查手册
8.1 常见问题解决方案
-
服务启动失败:
- 检查/var/log/mysqld.log中的错误信息
- 确认selinux状态:
sudo setenforce 0(临时关闭)
-
连接数不足:
sql复制SHOW VARIABLES LIKE 'max_connections'; SET GLOBAL max_connections = 500; -
内存泄漏排查:
sql复制SHOW ENGINE INNODB STATUS; SHOW PROCESSLIST;
8.2 性能监控方案
安装常用监控工具:
bash复制sudo yum install sysstat
配置基础监控命令:
bash复制# 实时监控
mysqladmin -u root -p extended-status -i1 | awk '
/Queries/{q=$4-qp;qp=$4}
/Threads_connected/{tc=$4}
/Threads_running/{printf "%5d %5d %5d\n", q, tc, $4}'
9. 架构适配经验
在华为鲲鹏920处理器上的实测表现:
- 大数据量导入时建议调整:
sql复制SET GLOBAL innodb_flush_log_at_trx_commit = 2; SET GLOBAL sync_binlog = 0; - 批量插入使用多值语法:
sql复制INSERT INTO table VALUES (1),(2),(3);
在飞腾2000+处理器上的注意事项:
- 建议关闭NUMA:
bash复制sudo vi /etc/default/grub # 添加 numa=off sudo grub2-mkconfig -o /boot/grub2/grub.cfg
10. 安全加固建议
-
定期更新补丁:
bash复制sudo yum update mysql-community-server -
网络访问控制:
bash复制sudo firewall-cmd --permanent --add-service=mysql sudo firewall-cmd --reload -
审计日志配置:
ini复制[mysqld] plugin-load = audit_log.so audit_log_format = JSON audit_log_file = /var/log/mysql-audit.log audit_log_policy = ALL
11. 高可用方案延伸
对于生产环境,建议考虑:
-
主从复制配置:
sql复制-- 主库 GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%' IDENTIFIED BY 'password'; FLUSH TABLES WITH READ LOCK; SHOW MASTER STATUS; -- 从库 CHANGE MASTER TO MASTER_HOST='master_ip', MASTER_USER='repl', MASTER_PASSWORD='password', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=123456; START SLAVE; -
使用MySQL Router实现读写分离
12. 版本迁移建议
未来升级到MySQL 8.0的注意事项:
- 先进行数据结构检查:
bash复制
mysqlcheck -u root -p --all-databases --check-upgrade - 使用官方升级工具:
bash复制sudo yum install mysql-shell mysqlsh -- util checkForServerUpgrade root@localhost
13. 运维自动化技巧
-
使用mysql_config_editor安全存储凭证:
bash复制mysql_config_editor set --login-path=local --host=localhost --user=root --password -
批量执行SQL脚本:
bash复制mysql --login-path=local < script.sql -
自动化监控脚本示例:
bash复制#!/bin/bash ALERT_FILE=/tmp/mysql_alert.log THRESHOLD=90 CPU_USE=$(top -bn1 | grep "Cpu(s)" | awk '{print $2 + $4}') MEM_USE=$(free | awk '/Mem/{printf("%.2f"), $3/$2*100}') CONN_USE=$(mysql -e "SHOW STATUS LIKE 'Threads_connected'" | awk 'NR==2{print $2}') [[ $(echo "$CPU_USE > $THRESHOLD" | bc) -eq 1 ]] && echo "CPU过高: $CPU_USE%" >> $ALERT_FILE [[ $(echo "$MEM_USE > $THRESHOLD" | bc) -eq 1 ]] && echo "内存过高: $MEM_USE%" >> $ALERT_FILE [[ $CONN_USE -gt 200 ]] && echo "连接数过高: $CONN_USE" >> $ALERT_FILE
14. 性能测试建议
使用sysbench进行基准测试:
bash复制sudo yum install sysbench
# 准备测试数据
sysbench oltp_read_write \
--db-driver=mysql \
--mysql-user=root \
--mysql-password=yourpassword \
--mysql-db=sbtest \
--tables=10 \
--table-size=100000 \
prepare
# 执行测试
sysbench oltp_read_write \
--db-driver=mysql \
--mysql-user=root \
--mysql-password=yourpassword \
--mysql-db=sbtest \
--tables=10 \
--table-size=100000 \
--threads=16 \
--time=300 \
run
15. 容器化部署方案
对于需要快速部署的场景,可考虑Docker方案:
bash复制sudo docker run \
--name mysql57-arm64 \
-e MYSQL_ROOT_PASSWORD=yourpassword \
-v /data/mysql:/var/lib/mysql \
-p 3306:3306 \
-d mysql:5.7 \
--character-set-server=utf8mb4 \
--collation-server=utf8mb4_unicode_ci
重要提示:容器化部署需特别注意数据持久化问题,务必挂载数据卷到宿主机