尧图网络科技YAOTU DIGITAL 获取报价
获取报价
首页 / 资讯中心 / 文章详情

MariaDB 10.5二进制包部署指南:从解压到升级的完整实践

发布时间:2026/9/25 9:10:14

资讯中心
01
ARTICLE

MariaDB 10.5二进制包部署指南:从解压到升级的完整实践

MariaDB 10.5二进制包部署指南:从解压到升级的完整实践
简介本资源为MariaDB 10.5.11在Linux x86_64平台上的完整安装包面向需要在Linux服务器上部署开源关系型数据库的运维人员、后端开发者及数据库学习者。MariaDB由MySQL创始人Michael Widenius主导开发保持开源与高度MySQL兼容适合企业级高并发与复杂查询场景。压缩包为gz格式大小约347.07MB解压后包含服务端程序、客户端工具、共享库及配置模板等完整安装文件可满足初始化数据库、配置my.cnf、设置root密码并启动服务的全流程需求。该版本在InnoDB并发性能、GTID复制管理、线程池、ColumnStore列式存储、虚拟列及安全审计等方面均有增强并支持半同步复制与多源复制。目前已有291人学习下载适合希望从源码包方式掌握MariaDB部署与调优的读者参考使用。1. 拿到 mariadb-10.5.11-linux-x86_64.tar.gz 之后它到底是什么能解决什么问题很多人第一次看到mariadb-10.5.11-linux-x86_64.tar.gz这个文件名第一反应是「又一个 tar.gz 压缩包」随手tar -zxvf解压完就不知道下一步该干嘛了。其实这是 MariaDB 官方提供的 Linux 通用二进制发行包专门给那些不想用 yum/apt 装、或者系统源里版本太老、又或者根本没网的环境准备的。它把 mysqld、mysql 客户端、mysqld_safe、mysql_install_db 这些核心组件全部预编译好解压即用不依赖系统包管理器也不挑发行版——CentOS 7、Rocky Linux、银河麒麟 V10、统信 UOS 这些国产或企业环境里都能跑。它解决的核心问题是你手上有一台干净的 Linux 服务器系统自带的 MariaDB 版本可能是 5.5 或 10.3业务需要 10.5 的窗口函数、JSON 增强或者 InnoDB 改进但你又不想动系统源、不想编译源码。这个 tar.gz 就是最省事的路径。适合运维、后端开发、信创环境交付工程师以及需要在离线机器上快速拉起数据库的人。下面我按实际部署顺序把解压、初始化、配置、启动、设密码、排错整条链路拆开讲。2. 解压与目录规划别把数据目录和安装目录混在一起2.1 为什么二进制包要单独规划目录二进制 tar.gz 和 rpm 最大的区别是rpm 会帮你把文件散到/usr/bin、/usr/lib64/mysql、/var/lib/mysql这些标准位置而 tar.gz 解压出来就是一个完整目录树所有东西都在一个文件夹里。如果你直接解压到/root或者/tmp后面升级、迁移、备份都会很痛苦。常见做法是固定两个路径安装目录用/usr/local/mariadb数据目录用/data/mariadb/data日志和 socket 单独放/data/mariadb下。这样安装目录可以整体替换升级数据目录独立挂盘互不影响。先确认系统架构和依赖库MariaDB 10.5 的二进制包依赖 libaio、libncurses 等基础库缺了会在启动时报error while loading shared libraries。# 确认是 x86_64 架构这个包只适用于 64 位 uname -m # 安装基础依赖不同发行版命令略有差异 # CentOS / Rocky / 麒麟 V10 系 yum install -y libaio libaio-devel ncurses-compat-libs # Debian / Ubuntu 系 # apt install -y libaio1 libncurses5uname -m必须返回x86_64如果是aarch64这个包直接不能用得换 ARM 版本。libaio是 InnoDB 异步 IO 的依赖缺了 mysqld 起不来ncurses-compat-libs是 mysql 命令行客户端画表格用的缺了客户端会报找不到 libtinfo.so.5。2.2 解压、建目录、建用户的标准动作不要用 root 跑 mysqld这是血泪经验。正确做法是建一个专用的mysql用户和组数据目录属主给它。# 创建 mysql 用户和组-r 表示系统用户-s 禁止登录 groupadd mysql useradd -r -g mysql -s /bin/false mysql # 解压到 /usr/local tar -zxvf mariadb-10.5.11-linux-x86_64.tar.gz -C /usr/local/ # 重命名去掉版本号方便后续升级切换 mv /usr/local/mariadb-10.5.11-linux-x86_64 /usr/local/mariadb # 创建数据目录和日志目录 mkdir -p /data/mariadb/data mkdir -p /data/mariadb/log # 把数据目录属主改成 mysql chown -R mysql:mysql /data/mariadb chown -R mysql:mysql /usr/local/mariadb-C /usr/local/指定解压目标-z解 gzip-x解压-v显示过程-f指定文件。重命名去掉版本号是个好习惯以后升级 10.6 只要把软链接或目录名换掉配置里的路径不用动。chown必须做否则初始化时会报Cant create/write to file权限错误。提示如果/data是单独挂载的数据盘记得先mount好再建目录否则数据写进系统盘磁盘满了会直接锁死数据库。3. 初始化与配置文件my.cnf 里这几个参数决定生死3.1 用 mysql_install_db 初始化数据目录MariaDB 10.5 的二进制包里初始化脚本叫mysql_install_db位于scripts/目录下。它会创建mysql、performance_schema等系统库生成 root 临时密码和 SSL 证书。cd /usr/local/mariadb # 执行初始化指定 basedir 和 datadir ./scripts/mysql_install_db \ --basedir/usr/local/mariadb \ --datadir/data/mariadb/data \ --usermysql--basedir告诉脚本程序文件在哪--datadir指定数据落地位置--user指定运行身份。执行完如果看到Two all-privilege accounts were created和To start mysqld at boot time...就说明成功了。注意 10.5 的 root 默认走 unix_socket 认证也就是本地 root 系统用户直接mysql -uroot就能进不需要密码这是很多人后面设密码踩坑的根源。3.2 my.cnf 最小可用配置配置文件放在/etc/my.cnf或/usr/local/mariadb/my.cnfmysqld 启动时会按顺序找。我一般直接放/etc/my.cnf内容如下[mysqld] basedir /usr/local/mariadb datadir /data/mariadb/data socket /data/mariadb/mysql.sock port 3306 pid-file /data/mariadb/mysqld.pid log-error /data/mariadb/log/error.log user mysql # InnoDB 核心参数按内存调整 innodb_buffer_pool_size 1G innodb_log_file_size 256M innodb_flush_log_at_trx_commit 2 # 字符集信创环境建议 utf8mb4 character-set-server utf8mb4 collation-server utf8mb4_general_ci # 最大连接数 max_connections 500 [client] socket /data/mariadb/mysql.sock default-character-set utf8mb4innodb_buffer_pool_size是最关键的参数一般设物理内存的 50%70%设太小查询全走磁盘设太大系统 OOM。innodb_log_file_size256M 适合中小业务写密集可以到 1G。innodb_flush_log_at_trx_commit 2是性能与安全的折中每次事务提交写 OS 缓存每秒刷盘宕机可能丢 1 秒数据如果金融级要求就设 1。socket路径必须和客户端一致否则本地连不上。character-set-server用 utf8mb4 才能存 emoji 和生僻字。3.3 启动脚本与 systemd 托管二进制包自带support-files/mysql.server启动脚本但更推荐用 systemd 管理开机自启和日志都规范。# 复制启动脚本备用 cp /usr/local/mariadb/support-files/mysql.server /etc/init.d/mysqld chmod x /etc/init.d/mysqld# /etc/systemd/system/mariadb.service [Unit] DescriptionMariaDB 10.5.11 Afternetwork.target [Service] Typeforking Usermysql Groupmysql ExecStart/usr/local/mariadb/bin/mysqld_safe --defaults-file/etc/my.cnf --usermysql ExecStop/bin/kill -TERM $MAINPID Restarton-failure LimitNOFILE65535 [Install] WantedBymulti-user.targetTypeforking因为 mysqld_safe 会 fork 后台进程。LimitNOFILE65535提高文件描述符上限连接数高的时候不加这个会报Too many open files。写完执行systemctl daemon-reload systemctl start mariadb然后systemctl status mariadb看状态。4. 设置 root 密码与远程访问unix_socket 认证的坑4.1 为什么 root 设密码后反而登不上MariaDB 10.5 默认 root 用户用unix_socket插件认证意思是只要你是系统 rootmysql -uroot直接进密码字段是无效的。很多人上来就SET PASSWORD或者ALTER USER改密码改完发现用密码登不上用 socket 也登不上直接锁死。正确顺序是先确认当前认证方式再决定怎么改。# 本地 root 直接进不需要密码 mysql -uroot # 查看 root 的认证插件 SELECT User, Host, plugin FROM mysql.user WHERE Userroot;如果 plugin 显示unix_socket说明走 socket 认证。要改成密码认证得同时改 plugin 和密码-- 方式一改成 mysql_native_password 并设密码 ALTER USER rootlocalhost IDENTIFIED VIA mysql_native_password USING PASSWORD(YourStrongPass123!); -- 刷新权限 FLUSH PRIVILEGES;IDENTIFIED VIA mysql_native_password把认证插件从 unix_socket 换成密码插件USING PASSWORD(...)设置加密后的密码。改完退出用mysql -uroot -p输密码验证。如果还想保留 socket 登录的便利可以建一个单独的 admin 用户走 socketroot 走密码互不影响。4.2 开放远程访问的正确姿势生产环境不建议 root 远程应该建业务用户并限定来源 IP。-- 建一个只能从 192.168.1.% 网段登录的用户 CREATE USER appuser192.168.1.% IDENTIFIED BY AppPass456!; -- 授予业务库权限不要给 ALL ON *.* GRANT SELECT, INSERT, UPDATE, DELETE ON appdb.* TO appuser192.168.1.%; FLUSH PRIVILEGES;appuser192.168.1.%里的%是通配符限定网段比%安全得多。GRANT只给业务需要的 DML 权限不给 DROP、GRANT 这些高危权限。如果确实要 root 远程比如临时运维也得限定具体 IPCREATE USER root10.0.0.5别用root%。注意开放远程前确认防火墙和bind-address。my.cnf 里如果写了bind-address 127.0.0.1外部根本连不进来改成0.0.0.0或具体网卡 IP 才生效。5. 避坑与排查二进制部署最常见的五个翻车现场5.1 启动报 Cant open the mysql.plugin table现象systemctl start mariadb失败error.log 里写Cant open the mysql.plugin table. Please run mysql_install_db。 原因数据目录没初始化或者 datadir 路径配错mysqld 找不到系统表。 解决确认my.cnf里datadir和初始化时一致重新执行./scripts/mysql_install_db --basedir... --datadir... --usermysql。如果 datadir 非空先清空再初始化否则会报目录已存在。5.2 客户端报 Cant connect through socket现象mysql -uroot报Cant connect to local MySQL server through socket /tmp/mysql.sock。 原因客户端默认找/tmp/mysql.sock但服务端 socket 配在/data/mariadb/mysql.sock两边不一致。 解决在[client]段加socket /data/mariadb/mysql.sock或者建软链接ln -s /data/mariadb/mysql.sock /tmp/mysql.sock。推荐改配置软链接重启后可能丢。5.3 中文乱码或 emoji 存不进去现象插入中文显示问号或者插入 emoji 报Incorrect string value。 原因库、表、连接三层字符集不一致或者用了 utf8 而不是 utf8mb4。 解决服务端character-set-server utf8mb4建库时CREATE DATABASE appdb DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci连接串加?characterEncodingutf8mb4。三层都对齐才行只改一层没用。5.4 内存不足导致 mysqld 被 OOM Killer 杀掉现象数据库跑一段时间突然没了dmesg里看到Out of memory: Kill process mysqld。 原因innodb_buffer_pool_size设太大加上连接数多总内存超过物理内存。 解决buffer pool 降到物理内存 50% 以下max_connections按实际并发调小加 swap 作为缓冲。监控free -m和SHOW ENGINE INNODB STATUS里的 buffer pool 命中率。5.5 升级或迁移后权限丢失现象把数据目录从旧机器拷到新机器启动后业务用户连不上报Access denied。 原因mysql.user表里的 Host 字段和旧机器绑定或者新机器 server_id、UUID 冲突。 解决迁移前用mysqldump导出逻辑备份再导入别直接拷物理文件。如果必须拷物理文件确保两台机器 MariaDB 版本一致且auto.cnf里的 server UUID 删掉让它重新生成。6. 进阶技巧用 mysqldump 做逻辑备份与版本升级验证二进制部署最大的好处是升级干净。假设要从 10.5.11 升到 10.6不用动系统直接解压新包、停旧服务、换目录、起新服务。但升级前必须做逻辑备份物理文件跨版本不一定兼容。# 全库逻辑备份单事务保证一致性不锁表 /usr/local/mariadb/bin/mysqldump \ -uroot -p \ --single-transaction \ --routines \ --triggers \ --events \ --all-databases /data/backup/full_$(date %F).sql--single-transaction对 InnoDB 表做一致性快照不阻塞写入这是在线备份的关键。--routines导存储过程和函数--triggers导触发器--events导事件调度器这三个不加迁移后业务逻辑会缺。备份完用grep -c CREATE TABLE数一下表数量和源库SHOW TABLES对比确认没漏。升级验证我一般走这套流程新机器解压新版本 → 初始化空数据目录 → 导入备份 SQL → 跑一遍业务核心查询 → 对比CHECKSUM TABLE关键表。确认无误再切流量。从那以后我每次升级都强制走一遍「备份 → 空库导入 → 校验 → 切流」再也没出现过升级后数据对不上的情况。希望帮到你。本文还有配套的精品资源点击获取
02
RELATED NEWS

相关资讯

更多网站建设与数字化升级内容

03
WHY YAOTU

想打造同款高转化官网?

懂行业、懂生意,从建站到增长一站式陪跑

◈

场景化定制

不做模板站,围绕你的业务场景量身设计,小众不撞款。

◐

营销型架构

以转化目标组织内容与路径,让官网真正带来询盘。

▲

全周期服务

设计、开发、运营、运维一体,上线只是开始。

免费获取你的建站方案

留下需求,专属顾问 24 小时内为你输出方案建议。