MySQL 8.0.28 麒麟V10 SP2 RPM包安装:3步解决依赖冲突与libtinfo.so.5报错

麒麟V10 SP2作为国产操作系统的代表,在企业级应用中越来越普及。而MySQL 8.0作为当前最流行的开源数据库之一,其性能和安全特性使其成为众多企业的首选。本文将详细介绍在麒麟V10 SP2系统上通过RPM包安装MySQL 8.0.28的完整流程,特别针对安装过程中常见的依赖冲突和libtinfo.so.5/6版本不兼容问题提供解决方案。

1. 环境准备与依赖检查

在开始安装MySQL之前,我们需要对系统环境进行彻底检查。麒麟V10 SP2基于Linux内核,但与常见的CentOS或Ubuntu在软件包管理上存在一些差异,这也是导致依赖问题的根源之一。

首先,检查系统是否已安装MySQL或其他数据库软件:

rpm -qa | grep -E 'mysql|mariadb'

如果发现已安装的旧版本MySQL或MariaDB,需要先彻底卸载:

sudo rpm -e --nodeps $(rpm -qa | grep -E 'mysql|mariadb')

接下来,检查系统关键依赖库的版本情况:

ldconfig -p | grep libtinfo

麒麟V10 SP2默认安装的是libtinfo.so.6,而MySQL 8.0.28依赖的是libtinfo.so.5,这会导致后续安装报错。我们可以提前准备兼容方案:

sudo dnf install -y compat-libtinfo5

如果系统中没有compat-libtinfo5包,也可以手动创建符号链接:

sudo ln -s /usr/lib64/libtinfo.so.6 /usr/lib64/libtinfo.so.5

2. RPM包安装与依赖解决

MySQL官方提供了完整的RPM包集合,我们需要下载对应版本的bundle包。对于麒麟V10 SP2系统,建议选择el8兼容版本:

wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.28-1.el8.x86_64.rpm-bundle.tar

解压下载的RPM包集合:

tar -xvf mysql-8.0.28-1.el8.x86_64.rpm-bundle.tar

安装时需要特别注意包的顺序,以下是推荐的安装顺序及命令:

包名 作用 安装命令
mysql-community-common 公共文件 sudo rpm -ivh mysql-community-common-8.0.28-1.el8.x86_64.rpm
mysql-community-client-plugins 客户端插件 sudo rpm -ivh mysql-community-client-plugins-8.0.28-1.el8.x86_64.rpm
mysql-community-libs 共享库 sudo rpm -ivh mysql-community-libs-8.0.28-1.el8.x86_64.rpm
mysql-community-client 客户端工具 sudo rpm -ivh mysql-community-client-8.0.28-1.el8.x86_64.rpm
mysql-community-icu-data-files ICU数据文件 sudo rpm -ivh mysql-community-icu-data-files-8.0.28-1.el8.x86_64.rpm
mysql-community-server 服务器 sudo rpm -ivh mysql-community-server-8.0.28-1.el8.x86_64.rpm

如果在安装过程中遇到依赖错误,可以尝试以下解决方案:

  • 缺少libaio sudo dnf install -y libaio
  • 缺少numactl sudo dnf install -y numactl
  • perl模块缺失 sudo dnf install -y perl-Data-Dumper perl-JSON

3. 配置优化与安全加固

安装完成后,MySQL服务会自动初始化并启动。我们可以通过以下命令检查服务状态:

sudo systemctl status mysqld

获取初始root密码:

sudo grep 'temporary password' /var/log/mysqld.log

使用临时密码登录并修改密码:

mysql -uroot -p

在MySQL命令行中执行:

ALTER USER 'root'@'localhost' IDENTIFIED BY 'YourNewStrongPassword!';

接下来,我们需要进行一些基本的安全配置:

  1. 移除匿名用户

    DROP USER ''@'localhost';
    
  2. 禁止root远程登录

    DELETE FROM mysql.user WHERE User='root' AND Host NOT IN ('localhost', '127.0.0.1', '::1');
    
  3. 移除测试数据库

    DROP DATABASE IF EXISTS test;
    DELETE FROM mysql.db WHERE Db='test' OR Db='test\\_%';
    
  4. 刷新权限

    FLUSH PRIVILEGES;
    

对于生产环境,建议修改MySQL配置文件 /etc/my.cnf ,添加以下优化参数:

[mysqld]
# 基础配置
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock

# 性能优化
innodb_buffer_pool_size=4G
innodb_log_file_size=1G
innodb_flush_method=O_DIRECT
innodb_flush_neighbors=0
innodb_read_io_threads=8
innodb_write_io_threads=8

# 安全配置
skip_name_resolve=ON
local_infile=OFF
performance_schema=ON

# 字符集配置
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci

[client]
default-character-set=utf8mb4

修改配置后,重启MySQL服务使配置生效:

sudo systemctl restart mysqld

4. 常见问题解决方案

在实际安装过程中,可能会遇到以下典型问题:

问题1:libtinfo.so.5缺失错误

错误现象

error while loading shared libraries: libtinfo.so.5: cannot open shared object file: No such file or directory

解决方案

方法一:安装兼容包(推荐)

sudo dnf install -y compat-libtinfo5

方法二:手动创建符号链接

sudo ln -s /usr/lib64/libtinfo.so.6 /usr/lib64/libtinfo.so.5

问题2:依赖冲突

错误现象

Error: Package: mysql-community-libs-8.0.28-1.el8.x86_64 (/mysql-community-libs-8.0.28-1.el8.x86_64)
           Requires: libcrypto.so.1.1()(64bit)

解决方案

sudo dnf install -y openssl11-libs

问题3:服务启动失败

排查步骤

  1. 查看错误日志:

    sudo journalctl -xe
    sudo tail -n 100 /var/log/mysqld.log
    
  2. 检查SELinux状态:

    sudo sestatus
    
  3. 如果是SELinux导致的问题,可以临时设置为宽容模式:

    sudo setenforce 0
    

问题4:密码策略过于严格

MySQL 8.0默认启用了强密码策略,如果希望降低要求,可以修改:

SET GLOBAL validate_password.policy=LOW;
ALTER USER 'root'@'localhost' IDENTIFIED BY '简单密码';

或者永久修改密码策略,在my.cnf中添加:

[mysqld]
validate_password.policy=LOW

5. 性能监控与日常维护

安装完成后,建议设置以下监控和维护措施:

关键性能指标监控命令

  • 查看连接数:

    SHOW STATUS LIKE 'Threads_connected';
    
  • 查询缓存命中率:

    SHOW STATUS LIKE 'Qcache%';
    
  • InnoDB缓冲池状态:

    SHOW ENGINE INNODB STATUS;
    

定期维护任务

  1. 每日检查:

    mysqlcheck -u root -p --all-databases --check-only-changed
    
  2. 每周优化:

    mysqlcheck -u root -p --all-databases --optimize
    
  3. 备份策略(示例):

    mysqldump -u root -p --all-databases --single-transaction --master-data=2 > full_backup.sql
    

自动化脚本示例

创建 /usr/local/bin/mysql_maintenance.sh

#!/bin/bash

# 数据库备份
DATE=$(date +%Y%m%d)
BACKUP_DIR="/var/backups/mysql"
mkdir -p $BACKUP_DIR
mysqldump -u root -pYourPassword --all-databases --single-transaction --master-data=2 > $BACKUP_DIR/full_$DATE.sql

# 日志轮转
find /var/log/mysql/ -type f -name "mysql.log.*" -mtime +30 -exec rm {} \;

# 表优化
mysqlcheck -u root -pYourPassword --all-databases --optimize

设置定时任务:

sudo crontab -e

添加以下内容:

0 2 * * * /usr/local/bin/mysql_maintenance.sh
Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐