拓十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

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

MariaDB 10.5.11二进制包部署实战:从解压到开机自启

MariaDB 10.5.11二进制包部署实战:从解压到开机自启 简介本资源为MariaDB 10.5.11在Linux x86_64平台上的完整安装包面向需要在Linux服务器上部署开源关系型数据库的运维人员、后端开发者及数据库学习者。MariaDB由MySQL创始人Michael Widenius主导开发保持开源与MySQL高度兼容适合企业级高并发、复杂查询场景。压缩包为gz格式大小约347.07MB解压后包含服务端程序、客户端工具、共享库及配置模板等完整安装文件可满足初始化数据库、配置my.cnf、启动服务等部署需求。该版本在InnoDB并发性能、GTID复制管理、线程池、ColumnStore列式存储、虚拟列及安全审计等方面均有增强并支持半同步复制与多源复制。已有291人学习下载读者可借此搭建主从复制、数据仓库分析或高可用数据库环境快速掌握MariaDB的安装配置与核心特性。1. 拿到 mariadb-10.5.11-linux-x86_64.tar.gz 之后为什么二进制包比 yum 更值得折腾很多人第一次看到mariadb-10.5.11-linux-x86_64.tar.gz这种命名第一反应是「tar.gz 文件怎么解压」第二反应是「为什么不直接 yum install mariadb」。我当年也这么想直到在一台不能连外网、glibc 版本还被锁死的内网机器上被 yum 源里那个老掉牙的 5.5 版本坑了一整晚。二进制 tar.gz 包的核心价值就在这儿它把编译好的 mysqld、客户端工具、插件、字符集一股脑塞进一个压缩包解压即用不依赖系统包管理器也不挑发行版——银河麒麟、Rocky Linux、CentOS 7.9 甚至一些裁剪过的国产 Linux只要内核和 glibc 对得上就能跑起来。这篇笔记讲的就是怎么把mariadb-10.5.11-linux-x86_64.tar.gz从一堆文件变成一个能对外服务、能设 root 密码、能开机自启的数据库实例。适合两类人一类是运维手里有台离线服务器要装 MariaDB另一类是开发想在本机快速起一个和线上版本一致的实例做验证。全程不需要联网不需要 root 之外的额外权限跟着命令走就能复现。2. 解压前的准备目录规划、依赖核对与用户隔离2.1 先确认 glibc 和 CPU 架构别等解压完才发现跑不起来linux-x86_64这个后缀说明它是给 64 位 x86 架构准备的但光看架构不够。MariaDB 10.5 的二进制包对 glibc 有最低要求一般需要 2.17 及以上。CentOS 7.9 自带 2.17银河麒麟 V10 一般在 2.28 左右都没问题但如果你手上是某些精简过的嵌入式 Linuxglibc 可能只有 2.12那 mysqld 启动时会直接报version GLIBC_2.14 not found。核对命令很简单# 查看 glibc 版本输出里找 release version ldd --version | head -n 1 # 确认 CPU 架构是 x86_64 uname -m # 确认内核位数 getconf LONG_BIT三条命令的输出分别是ldd (GNU libc) 2.17、x86_64、64就说明环境合格。如果 glibc 低于 2.17别硬上换一个为老系统编译的版本或者干脆用系统自带的包管理器装。提示uname -m返回aarch64的话这个包直接不能用得去找linux-aarch64的版本别浪费时间解压。2.2 目录规划base 目录和数据目录必须分开我见过太多人把 tar.gz 解压到/usr/local/mysql然后数据也往那儿塞结果升级的时候一删全没了。正确做法是 base 目录和数据目录分离用途推荐路径说明程序 base 目录/usr/local/mariadb存放解压出来的 bin、lib、share数据目录/data/mariadb/data存放 ibdata、表文件、binlog配置文件/etc/my.cnf全局配置也可放 base 目录下socket 与 pid/data/mariadb/run避免和系统其他 mysql 冲突错误日志/data/mariadb/log排查问题的第一现场数据目录单独放还有个好处磁盘满了可以单独挂一块盘迁移的时候直接搬数据目录程序目录不用动。2.3 建一个专用系统用户别用 root 跑 mysqldmysqld 以 root 身份运行是安全大忌一旦被提权整个系统就交出去了。建一个不能登录的mysql用户# 创建系统用户-r 表示系统用户-s /sbin/nologin 禁止登录 groupadd -r mysql useradd -r -g mysql -s /sbin/nologin -M mysql # 创建目录并授权 mkdir -p /usr/local/mariadb /data/mariadb/{data,run,log} chown -R mysql:mysql /data/mariadb-M表示不创建家目录因为 mysqld 不需要。授权只给数据相关目录程序目录保持 root 所有防止被进程意外改写。3. 解压、初始化与 root 密码设置把 tar.gz 变成能连的实例3.1 解压 tar.gz 并建立软链接假设包已经传到/root下解压命令cd /usr/local # 解压到当前目录会生成 mariadb-10.5.11-linux-x86_64 目录 tar -zxvf /root/mariadb-10.5.11-linux-x86_64.tar.gz # 建立软链接方便后续升级时只改链接指向 ln -s /usr/local/mariadb-10.5.11-linux-x86_64 /usr/local/mariadb # 确认目录结构 ls /usr/local/mariadb解压后你会看到bin、lib、share、support-files等目录。bin里是mysqld、mysql、mariadb-install-db等可执行文件support-files里有现成的my.cnf模板和启动脚本后面会用到。软链接这一步不是必须但强烈建议做升级时只需把链接指向新版本目录配置文件和数据都不用动。3.2 写一份最小可用的 my.cnf不要直接抄support-files里那个几 KB 的大模板里面很多参数对 10.5 已经过时。我一般从最小配置开始跑通再按需加[mysqld] # base 目录必须和实际解压路径一致 basedir /usr/local/mariadb # 数据目录 datadir /data/mariadb/data # socket 文件位置 socket /data/mariadb/run/mysql.sock # 进程 pid 文件 pid-file /data/mariadb/run/mysql.pid # 错误日志 log-error /data/mariadb/log/error.log # 端口 port 3306 # 服务端字符集 character-set-server utf8mb4 # 默认存储引擎 default-storage-engine InnoDB # 禁止 DNS 反查加快连接速度 skip-name-resolve [client] socket /data/mariadb/run/mysql.sock default-character-set utf8mb4把这份内容存到/etc/my.cnf。skip-name-resolve这个参数在连接慢的时候特别有用它让服务端不再对客户端 IP 做反向解析代价是授权表里不能用主机名只能用 IP 或%。3.3 用 mariadb-install-db 初始化数据目录10.5 的初始化脚本叫mariadb-install-db老版本叫mysql_install_db别搞混cd /usr/local/mariadb # 以 mysql 用户身份初始化指定用户和 basedir、datadir ./scripts/mariadb-install-db \ --usermysql \ --basedir/usr/local/mariadb \ --datadir/data/mariadb/data执行完会看到Installing MariaDB/MySQL system tables in /data/mariadb/data ... OK。这一步会生成mysql、performance_schema等系统库以及ibdata1等 InnoDB 文件。如果报FATAL ERROR: Could not find ./bin/my_print_defaults说明 basedir 写错了检查软链接是否指向正确。3.4 启动服务并给 root 设置密码初始化完成后 root 是空密码且只允许本机 socket 登录。先启动# 后台启动指定配置文件 /usr/local/mariadb/bin/mysqld_safe --defaults-file/etc/my.cnf # 等 3 秒确认进程在 sleep 3 ps -ef | grep mysqld | grep -v grep # 用 socket 登录此时无需密码 /usr/local/mariadb/bin/mysql -uroot --socket/data/mariadb/run/mysql.sock登录进去后立刻设密码这是「给 mariadb root 设置密码」的标准动作-- 设置 root 本地密码 ALTER USER rootlocalhost IDENTIFIED BY YourStrongPass!2024; -- 如果要从其他机器连再建一个远程 root生产环境不建议 -- CREATE USER root% IDENTIFIED BY YourStrongPass!2024; -- GRANT ALL PRIVILEGES ON *.* TO root% WITH GRANT OPTION; FLUSH PRIVILEGES;改完密码后退出再用新密码验证一次。如果ALTER USER报语法错误说明你连的是 5.5 的老实例检查mysql --version确认版本。4. 开机自启、远程访问与字符集让实例真正可用4.1 用 systemd 托管 mysqld别再手写 init 脚本support-files里虽然有mysql.server但那是 SysV 时代的产物在 systemd 系统上管理起来别扭。直接写一个 unit 文件[Unit] DescriptionMariaDB 10.5.11 Afternetwork.target [Service] Typesimple Usermysql Groupmysql ExecStart/usr/local/mariadb/bin/mysqld --defaults-file/etc/my.cnf ExecStop/bin/kill -TERM $MAINPID Restarton-failure LimitNOFILE65535 [Install] WantedBymulti-user.target存到/etc/systemd/system/mariadb.service然后systemctl daemon-reload systemctl enable mariadb systemctl start mariadb systemctl status mariadbLimitNOFILE65535这行别省MariaDB 在高并发下会打开大量文件描述符默认的 1024 很容易触发Too many open files。Restarton-failure让进程意外退出时自动拉起配合错误日志排查。4.2 开放远程访问的三个必要条件本地能连不代表远程能连远程连不上通常是三个地方没配对第一配置文件里bind-address。10.5 默认监听所有地址但如果你在my.cnf里写了bind-address 127.0.0.1那就只能本机连。要远程访问就注释掉或改成0.0.0.0。第二授权表里的 host。rootlocalhost只允许本机远程要用root%或具体 IP。建用户时注意CREATE USER appuser192.168.1.% IDENTIFIED BY AppPass!2024; GRANT SELECT,INSERT,UPDATE,DELETE ON appdb.* TO appuser192.168.1.%; FLUSH PRIVILEGES;第三防火墙。CentOS 7 用 firewalld银河麒麟 V10 可能用 ufw 或直接 iptables# firewalld firewall-cmd --permanent --add-port3306/tcp firewall-cmd --reload # 或者 ufw ufw allow 3306/tcp三个条件缺一不可排查时按这个顺序查能省不少时间。4.3 字符集统一成 utf8mb4别留 emoji 存不进去的坑10.5 默认字符集已经是latin1还是utf8mb4取决于编译选项但保险起见在my.cnf里显式指定。除了前面[mysqld]段的character-set-server客户端和连接层也要统一[client] default-character-set utf8mb4 [mysql] default-character-set utf8mb4改完重启登录后执行SHOW VARIABLES LIKE character%; SHOW VARIABLES LIKE collation%;确认character_set_server、character_set_database、character_set_client、character_set_connection全是utf8mb4。只要有一个是latin1中文和 emoji 就可能乱码或报Incorrect string value。建库建表时也显式写DEFAULT CHARSETutf8mb4 COLLATEutf8mb4_general_ci别依赖默认值。5. 二进制部署 MariaDB 的避坑清单五个血泪教训5.1 现象mysqld 启动报Cant create/write to file /tmp/...原因/tmp被挂载成noexec或空间满或者 mysql 用户对临时目录没写权限。MariaDB 启动时会往tmpdir写临时文件默认是/tmp。解决在my.cnf里显式指定tmpdir /data/mariadb/tmp并提前建好目录授权给 mysql 用户。别用/tmp很多安全加固脚本会把它锁死。5.2 现象mysql -uroot报Access denied for user rootlocalhost原因初始化后 root 是空密码但如果你之前用mysql_secure_installation或手动改过密码可能已经变了另一种情况是 socket 路径不一致客户端连到了另一个实例。解决先确认 socket 路径mysql --socket/data/mariadb/run/mysql.sock -uroot -p。如果密码忘了用--skip-grant-tables启动跳过权限验证进去改完再正常启动。这个操作有风险改完立刻重启。5.3 现象远程连接报Host x.x.x.x is not allowed to connect原因授权表里没有对应 host 的用户或者skip-name-resolve开启后用了主机名授权。解决SELECT user, host FROM mysql.user;看有没有匹配的 host。没有就CREATE USER补上。开了skip-name-resolve就只能用 IP 或%别写主机名。5.4 现象数据目录权限报Permission denied但ls -l看着是对的原因SELinux 在拦。CentOS 和麒麟默认可能开着 enforcing。解决getenforce看状态。临时setenforce 0验证是不是它的问题确认后要么关掉要么用semanage fcontext给数据目录打正确的标签。生产环境建议配置策略而不是直接关。5.5 现象升级或迁移后表打不开报Table xxx doesnt exist in engine原因只拷了.frm和.ibd文件没拷ibdata1或者 InnoDB 的innodb_file_per_table设置不一致。解决迁移时整个数据目录一起搬包括ibdata1、ib_logfile*、mysql系统库。别只挑表文件。如果已经出问题用innodb_force_recovery逐级尝试恢复能导出数据就赶紧导。6. 版本锁定与平滑升级把 10.5.11 当成一个可替换的零件二进制部署最大的好处是升级可以做到「换目录不换数据」。我现在的习惯是每个版本解压到独立目录软链接指向当前版本升级时只改链接。具体做法新版本解压到/usr/local/mariadb-10.5.12-linux-x86_64停掉旧实例把/usr/local/mariadb软链接重新指向新目录然后启动。数据目录完全不动my.cnf里的basedir因为走的是软链接路径也不用改。启动后执行mysql_upgrade10.5 里叫mariadb-upgrade检查系统表/usr/local/mariadb/bin/mariadb-upgrade -uroot -p --socket/data/mariadb/run/mysql.sock这个命令会检查并修复系统表结构跨小版本升级基本都能平滑过。跨大版本比如 10.5 到 10.11要先读 release note有些参数被废弃有些默认值变了直接换目录可能起不来。验证升级是否成功除了看版本号还要抽查几张业务表SELECT VERSION(); CHECK TABLE appdb.orders; SELECT COUNT(*) FROM appdb.orders LIMIT 1;CHECK TABLE返回status OK才算踏实。我一般还会把错误日志从头到尾扫一遍搜ERROR和Warning很多问题在启动阶段就有征兆只是被忽略了。最后说个习惯每次动数据库之前先把数据目录tar一份冷备哪怕只是改个参数。二进制部署没有包管理器帮你回滚后悔药得自己提前备好。这套流程我在麒麟 V10 和 Rocky Linux 上都跑过差异只在防火墙和 SELinux 的默认策略核心步骤一模一样。希望帮到你。本文还有配套的精品资源点击获取
返回列表