1. 国产操作系统下的数据库部署挑战
在国产化替代的大背景下,越来越多的政企单位开始采用麒麟、统信UOS等国产操作系统。作为基础软件三驾马车之一的数据库,MySQL的部署适配成为系统管理员必须掌握的技能。不同于常见的CentOS/Ubuntu,国产操作系统在软件源、依赖库、权限管理等方面都存在特殊性,这也导致直接照搬传统Linux的安装方法往往会遇到各种兼容性问题。
最近我在某金融机构的统信UOS服务器上部署MySQL 8.0.45时,就经历了从依赖缺失到服务启动失败的一系列"踩坑"过程。本文将详细记录在麒麟/统信UOS系统上安装MySQL 8.0.45的全流程,包括:
- 国产系统特有的环境准备工作
- 两种不同的安装方式对比(二进制包 vs 源码编译)
- 关键配置参数的优化建议
- 国产系统下特有的权限问题解决方案
2. 环境准备与系统适配
2.1 系统兼容性确认
首先需要确认操作系统版本与MySQL的兼容性。通过以下命令查看系统信息:
cat /etc/os-release lsb_release -a uname -a在统信UOS 20专业版(基于Debian 10)和麒麟V10(基于CentOS)上的实测情况:
- 统信UOS:默认使用apt包管理,但官方源中的MySQL版本较旧(5.7)
- 麒麟V10:使用yum/dnf,同样存在版本滞后问题
因此我们需要采用官方二进制包或源码编译的方式安装最新版。
2.2 依赖库处理
国产系统常见的依赖问题及解决方案:
- 缺失libaio:
# 统信UOS sudo apt install libaio1 libaio-dev # 麒麟 sudo yum install libaio- numactl依赖(物理服务器需要):
sudo apt install numactl # 或yum- OpenSSL版本冲突: 国产系统可能自带特殊版本的OpenSSL,建议:
openssl version # 确认版本 # 如果低于1.1.1,需要先升级2.3 用户与目录规划
为避免权限问题,建议:
sudo groupadd mysql sudo useradd -r -g mysql -s /bin/false mysql sudo mkdir -p /usr/local/mysql sudo chown -R mysql:mysql /usr/local/mysql3. 二进制包安装实战
3.1 获取官方安装包
从MySQL官网下载对应架构的二进制包:
wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.45-linux-glibc2.17-x86_64.tar.xz注意:
- 麒麟系统需确认是x86_64还是arm64架构
- 统信UOS可能需要添加--no-check-certificate参数
3.2 解压与安装
tar xvf mysql-8.0.45-linux-glibc2.17-x86_64.tar.xz -C /usr/local/ cd /usr/local ln -s mysql-8.0.45-linux-glibc2.17-x86_64 mysql初始化数据库(关键步骤):
cd mysql bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data注意记录输出的临时密码:
[Note] [MY-010454] [Server] A temporary password is generated for root@localhost: Jqfk2,sd*3lW3.3 配置文件优化
创建/etc/my.cnf(国产系统可能默认没有):
[mysqld] basedir=/usr/local/mysql datadir=/usr/local/mysql/data socket=/tmp/mysql.sock # 国产系统特有配置 character-set-server=utf8mb4 collation-server=utf8mb4_unicode_ci default_authentication_plugin=mysql_native_password # 性能优化 innodb_buffer_pool_size=1G # 根据内存调整 max_connections=2003.4 服务管理与开机启动
创建systemd服务文件(/usr/lib/systemd/system/mysqld.service):
[Unit] Description=MySQL Server After=network.target [Service] User=mysql Group=mysql Type=forking ExecStart=/usr/local/mysql/bin/mysqld --daemonize ExecStop=/usr/local/mysql/bin/mysqladmin shutdown PrivateTmp=true [Install] WantedBy=multi-user.target启用服务:
sudo systemctl daemon-reload sudo systemctl enable mysqld sudo systemctl start mysqld4. 源码编译安装方案
当二进制包出现兼容性问题时,源码编译是更可靠的选择。
4.1 编译环境准备
安装必要工具链:
# 统信UOS sudo apt install build-essential cmake bison libncurses5-dev # 麒麟 sudo yum groupinstall "Development Tools" sudo yum install cmake bison ncurses-devel4.2 编译参数配置
下载源码包后:
tar zxvf mysql-8.0.45.tar.gz cd mysql-8.0.45 mkdir build cd build cmake .. \ -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \ -DMYSQL_DATADIR=/usr/local/mysql/data \ -DWITH_BOOST=../boost \ -DWITH_SYSTEMD=1 \ -DWITH_SSL=system \ -DENABLED_LOCAL_INFILE=1 \ -DDEFAULT_CHARSET=utf8mb4 \ -DDEFAULT_COLLATION=utf8mb4_unicode_ci make -j$(nproc) sudo make install4.3 国产系统编译常见问题
OpenSSL版本不兼容: 解决方法:指定OpenSSL路径
-DWITH_SSL=/usr/local/opensslglibc版本过低: 统信UOS可能需要升级glibc(需谨慎操作)
内存不足: 编译MySQL 8.0至少需要4GB内存,建议添加swap:
sudo fallocate -l 2G /swapfile sudo chmod 600 /swapfile sudo mkswap /swapfile sudo swapon /swapfile
5. 安全加固与权限配置
5.1 初始密码修改
/usr/local/mysql/bin/mysql_secure_installation在国产系统中特别注意:
- 不要启用validate_password组件(可能与系统策略冲突)
- root用户建议限制本地访问
5.2 SELinux/apparmor适配
麒麟系统默认启用SELinux:
sudo semanage fcontext -a -t mysqld_db_t "/usr/local/mysql/data(/.*)?" sudo restorecon -Rv /usr/local/mysql/data统信UOS使用apparmor:
sudo aa-status # 查看状态 # 如需禁用:sudo systemctl disable apparmor5.3 防火墙配置
# 麒麟 sudo firewall-cmd --add-service=mysql --permanent sudo firewall-cmd --reload # 统信UOS sudo ufw allow 33066. 国产系统特有问题解决
6.1 中文路径支持问题
现象:创建含中文的数据库时报错 解决:在my.cnf中添加:
[client] default-character-set=utf8mb4 [mysql] default-character-set=utf8mb46.2 系统服务管理异常
现象:systemctl start mysqld无响应 排查步骤:
journalctl -xe # 查看详细日志 /usr/local/mysql/bin/mysqld --verbose --help # 检查参数6.3 性能优化建议
针对国产CPU(如鲲鹏、飞腾):
# my.cnf优化 innodb_flush_neighbors=0 innodb_io_capacity=2000 innodb_io_capacity_max=40007. 验证与监控
7.1 基础功能验证
mysql -uroot -p -e "SHOW VARIABLES LIKE 'version%';" mysql -uroot -p -e "CREATE DATABASE uos_test; USE uos_test; CREATE TABLE t(id INT); INSERT INTO t VALUES(1); SELECT * FROM t;"7.2 性能基准测试
使用sysbench进行压力测试:
sysbench oltp_read_write --db-driver=mysql --mysql-host=localhost \ --mysql-port=3306 --mysql-user=root --mysql-password=your_password \ --mysql-db=test --tables=10 --table-size=10000 prepare7.3 监控方案
推荐使用国产监控工具(如openEuler的opsagent):
# 统信UOS安装 sudo apt install prometheus-mysqld-exporter配置采集项:
- job_name: 'mysql' static_configs: - targets: ['localhost:9104'] metrics_path: /metrics params: collect[]: - global_status - info_schema.innodb_metrics