ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

银河麒麟系统安装MySQL全攻略:从环境检查到踩坑排查

银河麒麟系统安装MySQL全攻略:从环境检查到踩坑排查 做国产化部署这几个月我最大的感受是系统换了环境变了但业务要的数据库还是MySQL。身边好几个同事第一次拿到麒麟系统的机器时第一反应都是“这不就是个Linux吗装MySQL还不是分分钟的事”——结果要么卡在软件源上要么装完起不来白白耗掉一个下午。这篇安装教程就是把我摸过的路、踩过的坑全部摊开写从银河麒麟桌面版到服务器版从x86到ARM架构飞腾、鲲鹏这些都会讲清楚。适合刚接触国产系统的开发、运维同学也能给已经在麒麟环境里折腾的人一个对照。1. 安装前环境自查麒麟版本、硬件架构与依赖准备有个准备工作我认为是整篇里面最不值钱但最容易被跳过的搞清楚手上的麒麟到底是哪一款。1.1 先分清你手里的麒麟是哪一种“麒麟系统”对很多人来说就是同一个名字实际用起来差异很大。目前市面上最常见的是银河麒麟和中标麒麟银河麒麟又分桌面版和高级服务器版。我见过最典型的问题就是拿到了服务器版去套网上的apt教程结果死活装不上因为银河麒麟高级服务器版V10是走RHEL/CentOS路线的包管理器是dnf/yum而桌面版V10基于Ubuntu/Debian路线包管理器是apt。这直接决定了后面所有命令长什么样。查询方法很简单cat /etc/os-release uname -m输出里会明确写“Kylin Linux Advanced Server V10”还是“Kylin Linux Desktop V10”甚至能看到sp1/sp2的版本号。我习惯把这个输出先截个图存下来后面配源、找包、提交工单都要用。1.2 架构确认决定安装包路线第二个必须确认的是架构uname -mx86_64最常见直接使用官方通用包即可。aarch64对应飞腾FT-2000、鲲鹏920这些国产CPU安装包必须选ARM版不能直接拿x86的rpm/deb硬装。loongarch64龙芯这个最特殊MySQL官方没有直接二进制包通常靠系统软件源或源码编译这个放到后面单独提醒。我在客户现场见过一台aarch64的机器同事下载了官网默认的x86_64 tar包解压以后./bin/mysqld跑起来直接报“Exec format error”白白浪费半小时。这个错误信息其实就是在告诉你架构不匹配换包。1.3 依赖工具提前装好安装前我会先把基本工具补齐免得装到一半发现连wget都没有# apt路线桌面版/Ubuntu系 sudo apt update sudo apt install -y wget curl gnupg lsb-release ca-certificates # yum/dnf路线服务器版/CentOS系 sudo dnf install -y wget curl gnupg tar磁盘空间也下意识看一眼MySQL 8.0装完数据目录加日志至少预留2GB比较稳妥df -h /var目录如果很小安装前就规划好数据目录后面就不用动搬家这种麻烦事。2. 走APT路线银河麒麟桌面版直接装MySQL很多开发机、测试环境其实不需要纠结版本能用就行。这种情况我推荐直接走apt。2.1 看看系统默认源里有什么在银河麒麟桌面版V10上默认软件源已经配置好但里面默认的“mysql-server”可能不是你想的MySQL官方版而是MariaDB。这不是麒麟故意坑你而是Debian系发行版的通病——为了避开MySQL双许可问题默认把mysql-server这个包名指向了MariaDB。可以先查一下apt search mysql-server apt policy mysql-server如果显示版本里带“mariadb”说明你装上以后跑的是MariaDB。MariaDB从使用和命令上跟MySQL高度兼容大多数业务都能直接跑但你如果明确需要MySQL官方特性或者报错里要求的是mysql-community-server就不要走这条线。2.2 直接安装并在本机验证不管最后是MySQL还是MariaDB安装命令都一致sudo apt update sudo apt install -y mysql-server装完以后两步验证systemctl status mysql mysql -V一条命令看进程是否正常运行一条确定版本。如果是MySQL官方版这里会显示类似mysql Ver 8.0.xx for Linux on x86_64如果是MariaDB会显示mysql Ver 15.1 Distrib 10.x-MariaDB。系统默认安装通常会自动启动服务并设置开机自启。我习惯再手动执行一次sudo systemctl enable --now mysql确保机器重启以后服务不会丢。2.3 常见问题服务起来了连不上用apt装的一个高频问题是装完以后执行mysql -uroot -p怎么试都不对。原因后面初始化章节详细讲这里先提一个应急方法sudo mysql很多Linux版MySQL默认root走的是auth_socket认证centos系统root用户可以通过sudo直接登录。这能很快定位到“我是密码不对”还是“服务根本没起来”。这不算安全漏洞是设计如此后面可以改成密码认证。3. 指定版本安装MySQL官方APT仓库与手动deb包如果是要跑正式项目或者对版本有明确要求那不应该依赖默认源直接用MySQL官方仓库。3.1 为什么要走官方仓库我在一个项目里吃过一次教训当时业务方要求数据库必须是MySQL 8.0.28以上的版本原因是有安全漏洞修正。开发机用默认源装的是8.0.19完全不符合要求。走官方仓库之后装的是8.0.30提交验收一把过。另外一个关键点是官方仓库对ARM架构有完整的aarch64包支持。这个对国产芯片环境很重要尤其是飞腾和鲲鹏的机器直接从官方源里就能装不用到处找第三方编译包省心很多。3.2 添加MySQL官方APT仓库去MySQL官网的APT仓库页面拿最新配置文件wget https://dev.mysql.com/get/mysql-apt-config_0.8.29-1_all.deb sudo dpkg -i mysql-apt-config_0.8.29-1_all.deb执行dpkg时会弹出一个蓝底的配置界面让你选要装MySQL的哪个系列。一般选MySQL Server Cluster再选8.0版本再选ok确认即可。每次配置文件版本号可能不同以页面上实际提供的为准。安装后更新源sudo apt update这条命令执行完如果能看到mysql-8.0相关的条目仓库就配好了。有一点要注意银河麒麟桌面版基于Ubuntu/Debian官方检测脚本在os-release识别方面可能不完全识别Kylin有时需要手动改源配置。如果遇到提示“Your lsb_release is not supported”在配置文件/etc/apt/sources.list.d/mysql.list里手动指定对应版本代号比如把focal或者jammy写好具体以实际触发报错为准。3.3 正式安装sudo apt update sudo apt install -y mysql-server安装过程中会要求你设置root密码还会问密码强度。我一般选择“Use Strong Password Encryption (RECOMMENDED)”后面的密码强度策略按需求设置测试环境可先把validate_password规则放低生产还是建议保持默认高强度。3.4 某些场景需要手动下deb包有几种情况我不建议用apt仓库自动装改手动下deb包内网环境完全无法连外网需要提前把deb包拉到内网安装。需要严格锁定某个8.0小版本。官方仓库识别不出Kylinapt update一直报错。手动安装需要下载下面几个核心deb包以MySQL 8.0.x为例aarch64则选对应的arm64版本mysql-common_8.0.x-1kylin_amd64.debmysql-community-client_8.0.x-1kylin_amd64.debmysql-community-server_8.0.x-1kylin_amd64.debmysql-client_8.0.x-1kylin_amd64.debmysql-server_8.0.x-1kylin_amd64.deb安装顺序不能乱依赖关系是链式的sudo dpkg -i mysql-common_*.deb sudo dpkg -i mysql-community-client_*.deb mysql-client_*.deb sudo dpkg -i mysql-community-server_*.deb mysql-server_*.deb如果中途提示缺依赖执行sudo apt -f install它会自动把缺的依赖补齐然后重复上面dpkg命令即可。4. 安装之后的初始化密码、字符集、远程访问、自启动对很多新手来说装完MySQL那一步不是成功的终点真正能连通业务才是。这一节我把初始化做成清单直接照着执行。4.1 首次登录和root密码设置前面提到过部分版本root用户默认使用auth_socket插件意思是系统root用户可以通过sudo直接进入MySQL不需要密码但应用连不上。要改成常见的密码认证sudo mysql ALTER USER rootlocalhost IDENTIFIED WITH caching_sha2_password BY 你的强密码; FLUSH PRIVILEGES; EXIT;执行完以后再用密码登录mysql -uroot -p输入刚才设置的强密码成功进入说明密码认证已生效。如果想进一步收紧安全再执行官方自带的安全加固脚本sudo mysql_secure_installation它会依次问你要不要设置密码策略、删除匿名用户、禁止root远程登录、删除test数据库、刷新权限表。我的建议是生产环境全部选Yes测试环境至少把匿名用户删掉。这个脚本会交互式问很多问题生产环境不想手动点的话可以提前看官方文档了解参数传参方式但必须有经验再这么搞避免误操作把权限搞丢。4.2 字符集必须改utf8mb4国产系统上跑业务最逃不开的就是中文。MySQL 8默认字符集已经是utf8mb4但很多老配置、老版本默认还是utf8或latin1装完以后一定要检查mysql -uroot -p SHOW VARIABLES LIKE character_set_server; SHOW VARIABLES LIKE collation_server;如果看到不是utf8mb4/utf8mb4_0900_ai_ci编辑配置文件sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf在[mysqld]段加入[mysqld] character-set-server utf8mb4 collation-server utf8mb4_unicode_ci然后重启sudo systemctl restart mysql说明一下为什么选utf8mb4而不选utf8utf8在MySQL里最多只能存3字节像emoji、生僻字这种4字节字符直接存不进去utf8mb4才是MySQL对Unicode的完整实现兼容性最好。4.3 开放远程访问并放行防火墙默认情况下MySQL只监听127.0.0.1其他机器连不上。这是安全考虑不是故障。要改成允许内网机器访问先把bind-address注释或改为0.0.0.0sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf # 找到 bind-address 127.0.0.1改为 bind-address 0.0.0.0创建一个允许远程登录的用户mysql -uroot -p CREATE USER app192.168.1.% IDENTIFIED BY 业务密码; GRANT ALL PRIVILEGES ON 你的库.* TO app192.168.1.%; FLUSH PRIVILEGES;限制网段比用%通配符更稳尽量别给所有IP开放。防火墙放行3306# 麒麟桌面版/Ubuntu系 sudo ufw allow 3306/tcp # 麒麟服务器版/CentOS系 sudo firewall-cmd --permanent --add-port3306/tcp sudo firewall-cmd --reload放行之后在你笔记本上测试mysql -h 麒麟IP -u app -p4.4 开机自启检查最后确认自启动状态sudo systemctl enable mysql sudo systemctl is-enabled mysql输出enabled就说明下次重启后服务会自动拉起。5. 踩坑排查麒麟环境里最容易翻车的几个点如果一切顺利看完前面章节你已经能用了。但真实环境不会这么温柔。下面这几个问题是我在麒麟系统上真正遇见过、也逐一排查清楚的。5.1 MySQL服务起不来第一步永远看日志很多同学遇到服务起不来第一反应是卸载重装。其实大多数情况下错误日志已经说得明明白白。日志位置一般在sudo tail -n 50 /var/log/mysql/error.log我遇到比较多的场景是数据目录权限不对尤其是手动初始化过的实例。修复方法是确认/var/lib/mysql的所有者是mysql用户sudo chown -R mysql:mysql /var/lib/mysql sudo systemctl start mysql如果日志里出现类似“Cant open and lock privilege tables”的报错多半是数据目录初始化有问题而不是权限问题这种情况考虑重新初始化。5.2 root密码忘了用skip-grant-tables找回这个技能大家迟早用得上。步骤停止服务以跳过权限认证方式启动重置密码正常重启命令如下sudo systemctl stop mysql sudo mysqld_safe --skip-grant-tables 启动成功后再跑mysql -uroot USE mysql; UPDATE user SET authentication_string WHERE Userroot; FLUSH PRIVILEGES; EXIT;然后把mysqld_safe进程结束后台进程也停掉回到正常启动sudo systemctl start mysql现在root的密码是空字符串重新登录后用ALTER USER设置新密码即可。这条虽然是万能救场方案但生产环境操作之前一定要确认没有其他服务正在连接否则你是在裸奔状态操作数据库风险极大。5.3 防火墙和SELinux的双层拦截前面讲了防火墙放行3306其实还有一层隐性拦截SELinux。银河麒麟高级服务器版默认可能开启SELinux它不拦本机连接但是会拦远程应用和数据库之间的网络通信。如果远程连接一直超时先查端口是否真的在监听netstat -tlnp | grep 3306如果监听正常那多半是SELinux。用getenforce看一下getenforce返回Enforcing就是开启状态可以先临时切到允许模式验证sudo setenforce 0远程连接如果通了说明确实是SELinux拦截。解决办法不要图省事永久关闭而是为目标端口加一条规则具体策略参数较长建议查SELinux的mysql相关策略或者咨询现场安全基线要求。5.4 重装时的残留清理我见过最头疼的情况是反复安装失败后apt/dpkg状态全乱了。要彻底重来执行sudo apt purge mysql-server mysql-client mysql-common mysql-community-server mysql-community-client sudo apt autoremove sudo rm -rf /etc/mysql /var/lib/mysql /var/log/mysql注意rm -rf /var/lib/mysql会把所有数据删掉只有确认数据已经备份或不需要才执行。清理完再按前面的官方仓库方式重新安装成功率非常高。6. 装好以后日常运维要看好的几件事装完只是开始真正让MySQL长期稳定跑日常维护更关键。这一节不展开讲全量DBA知识只给运维同学在麒麟环境下最常用的操作。6.1 常用服务命令速查sudo systemctl status mysql # 查看状态 sudo systemctl restart mysql # 重启 sudo systemctl stop mysql # 停止 sudo systemctl enable mysql # 设置开机自启 tail -f /var/log/mysql/error.log # 追踪错误日志6.2 定期备份和恢复逻辑备份用mysqldump最简单mysqldump -uroot -p --single-transaction --routines --triggers --events 你的库 dump.sql恢复就是重定向回去mysql -uroot -p 你的库 dump.sql建议备份任务写成crontab定时执行备份文件按日期命名保留最近30天。我习惯把备份文件放在单独的分区避免和系统盘一起被占满。6.3 版本升级与锁定如果后续要升级MySQL版本走官方仓库的方式比较顺滑sudo apt update sudo apt install --only-upgrade mysql-server但生产环境不建议直接升级应该先在测试环境验证再用mysqldump做全量备份然后升级。另外国产化环境里一个容易踩的坑是系统软件源偶尔会更新MySQL相关包导致版本突然变化。为了避免意外升级可以锁定主版本sudo apt-mark hold mysql-server mysql-client解除锁定用sudo apt-mark unhold mysql-server mysql-client6.4 几个我自己的习惯我接手国产化项目后形成的固定动作分享给你参考每次操作前先确认当前os-release、uname -m这已经形成肌肉记忆。配置my.cnf之前先备份原文件cp mysqld.cnf mysqld.cnf.bak。改任何权限相关配置顺手记录下修改时间和原因等出了问题翻记录能省很多时间。给业务方交付之前跑一遍mysql -h IP -u app -p远程连通性测试避免出现“你在服务器上能用业务连不上”的尴尬。我自己最深的体会是麒麟环境出问题十次有八次不是MySQL本身的问题而是环境和包管理方式没匹配上。所以这篇教程把系统版本、架构这些前置条件放到了第一步后面所有操作都建立在这个基础上。你只要按照步骤来先确认环境再选路径最后初始化并验证多数情况下不会折腾太久。希望这篇教程对你有用。后面如果有时间我再把MySQL 8.0在ARM架构下的性能优化参数单独写一篇那个也很有意思。
返回列表