国产操作系统银河麒麟V10作为基于Linux的自主可控平台,在政务、金融等领域快速普及。其采用的OpenAnolis内核与glibc 2.28环境对数据库软件有特定兼容性要求。MySQL 8.0.28作为长期支持版本(LTS),在事务性能、JSON支持等方面有显著提升,但官方二进制包对国产系统的适配存在以下挑战:
实测发现,通过源码编译方式可规避90%以上的兼容性问题。下文将详解从依赖准备到安全配置的全流程,包含我在政务云项目中积累的5个关键避坑点。
首先确认系统架构和版本:
bash复制uname -m # 输出x86_64或aarch64
cat /etc/kylin-release # 确认V10 SP2及以上
重要提示:麒麟V10的软件源需配置为官方最新镜像,否则可能缺少关键依赖。编辑/etc/yum.repos.d/kylin.repo,确保baseurl指向有效地址。
MySQL 8.0源码编译需要以下核心组件:
bash复制sudo yum install -y \
gcc-c++ cmake3 make \
ncurses-devel openssl-devel \
libtirpc-devel rpcgen \
bison
特别注意:
bash复制wget https://downloads.sourceforge.net/libtirpc/libtirpc-1.3.2.tar.gz
tar -zxvf libtirpc-1.3.2.tar.gz
cd libtirpc-1.3.2
./configure --prefix=/usr
make && sudo make install
推荐从国内镜像站下载源码包:
bash复制wget https://mirrors.aliyun.com/mysql/MySQL-8.0/mysql-8.0.28.tar.gz
tar -zxvf mysql-8.0.28.tar.gz
cd mysql-8.0.28
关键编译参数配置(针对麒麟优化):
bash复制mkdir build && cd build
cmake3 .. \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DMYSQL_DATADIR=/data/mysql \
-DSYSCONFDIR=/etc \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_SSL=system \
-DENABLED_LOCAL_INFILE=1 \
-DWITH_BOOST=../boost \
-DFORCE_INSOURCE_BUILD=1
执行编译(建议使用并行编译加速):
bash复制make -j$(nproc) # 根据CPU核心数调整并行度
sudo make install
编译完成后检查关键文件:
bash复制ls /usr/local/mysql/bin/mysqld # 确认服务程序存在
/usr/local/mysql/bin/mysqld --version # 应显示8.0.28
安全规范要求使用独立账户运行MySQL:
bash复制sudo groupadd mysql
sudo useradd -r -g mysql -s /bin/false mysql
sudo chown -R mysql:mysql /usr/local/mysql
sudo chown -R mysql:mysql /data/mysql
使用mysqld初始化数据目录:
bash复制cd /usr/local/mysql
bin/mysqld --initialize --user=mysql \
--basedir=/usr/local/mysql \
--datadir=/data/mysql
注意记录输出的临时密码:
code复制[Note] A temporary password is generated for root@localhost: JqkR8Ew!3z
创建systemd服务文件(适配麒麟):
bash复制cat <<EOF | sudo tee /etc/systemd/system/mysqld.service
[Unit]
Description=MySQL Server
After=network.target
[Service]
User=mysql
Group=mysql
ExecStart=/usr/local/mysql/bin/mysqld \
--defaults-file=/etc/my.cnf
Restart=on-failure
LimitNOFILE=65535
[Install]
WantedBy=multi-user.target
EOF
启动服务并设置开机自启:
bash复制sudo systemctl daemon-reload
sudo systemctl start mysqld
sudo systemctl enable mysqld
首次登录后立即修改root密码:
bash复制/usr/local/mysql/bin/mysql -uroot -p
ALTER USER 'root'@'localhost' IDENTIFIED BY '新密码';
建议配置密码复杂度策略(在/etc/my.cnf添加):
code复制[mysqld]
default_password_lifetime=90
password_history=6
validate_password.policy=STRONG
默认只允许本地连接,如需远程访问:
sql复制CREATE USER 'admin'@'%' IDENTIFIED BY '复杂密码';
GRANT ALL PRIVILEGES ON *.* TO 'admin'@'%' WITH GRANT OPTION;
然后在/etc/my.cnf中注释掉bind-address或设置为特定IP:
code复制#bind-address = 127.0.0.1
针对高并发场景,在/etc/sysctl.conf添加:
code复制vm.swappiness = 1
net.core.somaxconn = 65535
net.ipv4.tcp_max_syn_backlog = 8192
执行生效:
bash复制sudo sysctl -p
查看详细错误日志:
bash复制journalctl -u mysqld -n 50 --no-pager
常见问题1:端口冲突
code复制sudo netstat -tlnp | grep 3306
常见问题2:SELinux限制
code复制sudo setenforce 0 # 临时关闭
sudo semanage port -a -t mysqld_port_t -p tcp 3306 # 永久解决
慢查询分析配置:
sql复制SET GLOBAL slow_query_log=ON;
SET GLOBAL long_query_time=1;
查看连接数使用情况:
sql复制SHOW STATUS LIKE 'Threads_connected';
SHOW VARIABLES LIKE 'max_connections';
推荐使用mysqldump定时备份:
bash复制/usr/local/mysql/bin/mysqldump -uroot -p --all-databases \
--single-transaction > full_backup_$(date +%F).sql
结合crontab实现自动化:
bash复制0 2 * * * /usr/local/mysql/bin/mysqldump -uroot -p密码 --all-databases > /backups/mysql_$(date +\%F).sql
加密模块兼容性:若使用国密算法,需在编译时添加:
code复制-DWITH_SSL=/path/to/gmssl
内存管理优化:麒麟内核的透明大页(THP)可能导致性能下降,建议禁用:
bash复制echo never > /sys/kernel/mm/transparent_hugepage/enabled
审计插件集成:如需满足等保要求,可加载官方企业版审计插件或使用开源替代方案如MariaDB审计插件。
定期维护建议:每月检查/var/log/mysql/error.log,关注国产硬件(如飞腾CPU)相关的警告信息。