ARTICLE DETAIL

资讯详情

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

MariaDB 10.5.11 Linux部署详解:从tar.gz到生产环境调优排错

MariaDB 10.5.11 Linux部署详解:从tar.gz到生产环境调优排错 简介面向Linux x86_64平台的MariaDB 10.5.11二进制发行包适合运维工程师、DBA与后端开发者快速部署企业级数据库服务。该版本在MySQL分支基础上重点优化InnoDB并发性能同时保留MyISAM、Aria、XtraDB等多样化存储引擎并集成独有的ColumnStore列式引擎可显著加速复杂分析查询。此外10.5.11完善了GTID主从复制、多源复制与半同步复制机制配合线程池和并行查询执行能够有效应对高并发连接与大数据量处理虚拟列、增强加密选项和审计日志则进一步提升了开发灵活性与数据安全性。压缩包体积约347MB内含服务端、客户端程序及默认配置文件解压后按官方文档完成初始化即可使用省去源码编译与依赖管理的繁琐步骤。已有290人学习下载适合需要搭建高可用集群、从MySQL迁移或升级旧版本的用户也可借助插件体系扩展全文检索、GIS与JSON处理能力。 下载过MariaDB安装包的人十有八九都见过mariadb-10.5.11-linux-x86_64.tar.gz这种命名的文件。如果你只是急着把它解压装上那可能会错过这个文件名里藏着的大量信息。我最早接触这类二进制包时也吃过亏光是把目录结构搞明白、把初始化命令跑通就花了不少时间。这篇文章就从这串字符开始把MariaDB 10.5.11在Linux x86_64平台上的部署、调优和排错一次性讲透适合正在做数据库部署的运维、刚接手LCMP环境的开发者以及需要离线安装数据库的场景参考。1. 文件名拆解每个字段都在告诉你该怎么做1.1 版本号与LTS策略10.5.11是MariaDB的一个具体发行版本属于10.5这个长期支持系列。10.5系列在MariaDB的版本演进里地位很特殊——它是第一个引入System-Versioned Tables稳定性改进的版本同时把mysql.user表彻底迁移到了InnoDB引擎和之前版本相比在账户管理上有不少行为差异。选择10.5.x意味着你能获得较长时间的安全更新同时不会像体验10.6那样承担更多的功能变动风险。我在生产环境里部署时一般会优先选LTS系列里的较新小版本因为小版本号比如10.5.8升到10.5.11通常只包含bugfix和安全补丁不会引入破坏性的SQL行为变化。这一点对线上系统很重要升级小版本基本不用改业务代码。1.2 平台标识与包格式为什么选generic tar.gzlinux-x86_64说明了运行平台是64位Linux这个标识基本覆盖了主流服务器环境。tar.gz是gzip压缩的tar归档格式解压后得到的是一个完整的目录里面包含了二进制文件、库文件、脚本和示例配置。相比用yum或apt安装选择这种generic二进制包有几个实际好处不依赖发行版的软件源适合内网离线环境目录结构固定可以放在任意路径下改动可控卸载时直接删目录就能清干净。缺点是升级需要手动操作不会像包管理器那样自动处理依赖所以适合有一定Linux基础的人使用。1.3 一个容易忽视的细节版本号与glibc的兼容关系10.5.11这个版本编译时对glibc版本有一定要求。CentOS 7自带的glibc是2.17能正常运行这个包但如果你在更老的系统比如CentOS 6上强行解压可能会遇到/lib64/libc.so.6: version GLIBC_2.14 not found之类的报错。遇到这种情况要么升级系统要么去下载专门针对老系统编译的版本不能硬扛。2. 部署前的环境准备这些坑先填平2.1 系统依赖库检查二进制包虽然自带大部分运行库但它不是一个完全静态编译的程序依然需要系统提供一些底层库。对我用过的环境来说最常见的依赖是libaio和ncurses-libs。如果你解压后执行mysqld --initialize时收到类似error while loading shared libraries: libaio.so.1的提示先别慌用系统的包管理工具补上就行。# CentOS / RHEL / Rocky yum install -y libaio ncurses-libs # Debian / Ubuntu apt-get install -y libaio1 libncurses5有时候还需要perl因为一些辅助脚本比如mysql_secure_installation是用Perl写的。检查完依赖再动手解压能省掉不少麻烦。2.2 创建运行用户与目录规划一个常见的部署失误是用root用户初始化并启动数据库这样做在测试环境也许能跑但生产环境迟早会被权限问题坑到。我的做法是单独创建一个mysql系统用户数据目录和日志目录都归它管服务进程以这个用户身份运行。groupadd -r mysql useradd -r -g mysql -s /sbin/nologin mysql mkdir -p /data/mysql/data mkdir -p /data/mysql/logs mkdir -p /data/mysql/tmp chown -R mysql:mysql /data/mysql目录规划有自己的门道。软件目录和解压后的二进制文件放在/usr/local/mariadb数据目录单独放到/data/mysql/data。这样分开有好处软件升级时只需要替换软链接指向的新目录数据目录完全不受影响备份时只要盯住数据目录不用在几万个文件里挑挑拣拣。2.3 校验安装包的完整性去官网或镜像站下载完这个tar.gz包后最好做一次完整性校验。官方发布页面会提供对应的校验值用sha256sum对一下能发现传输过程中的损坏或恶意替换问题。sha256sum mariadb-10.5.11-linux-x86_64.tar.gz这一步不会花太多时间但对生产环境来说很有必要。我在一台内网服务器上曾经遇到过解压到一半提示校验错误的情况后来确认是之前用断点续传工具下载时文件不完整幸好当时多做了一个校验否则会出现更复杂的问题。3. 完整部署流程从解压到跑通单实例3.1 解压与目录迁移拿到安装包后第一步就是解压到目标目录然后建立一个软链接用版本号来管理不同版本。这样以后升级时直接解压新版本并切换软链接指向回滚也方便。tar -xzf mariadb-10.5.11-linux-x86_64.tar.gz -C /usr/local/ ln -s /usr/local/mariadb-10.5.11-linux-x86_64 /usr/local/mariadb解压完成后的目录结构里比较关键的有bin/存放可执行文件、scripts/存放初始化脚本不过10.5里初始化命令已经迁移到了bin/mariadb-install-db、share/存放错误信息和字符集文件。我建议花几分钟进去翻一遍认识了目录结构后面遇到问题时找日志文件的位置会快很多。3.2 初始化数据目录在启动前需要先初始化系统的数据目录。MariaDB提供了一个专用脚本它会生成系统数据库mysql库和初始的权限表。/usr/local/mariadb/scripts/mariadb-install-db \ --basedir/usr/local/mariadb \ --datadir/data/mysql/data \ --usermysql注意执行这个命令时不要在/root这种root用户目录下运行否则脚本可能因为权限检测失败中断。初始化完成后检查一下数据目录下是否生成了mysql、performance_schema等目录如果连aria_log_control文件都不存在说明初始化没有成功需要回头排查依赖库或目录权限。3.3 my.cnf基础配置MariaDB的配置文件读取顺序是/etc/my.cnf、/etc/mysql/my.cnf、basedir/my.cnf等。对于这种手工部署的实例我习惯在/etc/my.cnf里写最小化的配置把核心路径明确指出来避免重复定义造成混乱。[mysqld] basedir /usr/local/mariadb datadir /data/mysql/data socket /tmp/mysql.sock pid-file /data/mysql/mysql.pid port 3306 log-error /data/mysql/logs/mysql-error.log character-set-server utf8mb4 collation-server utf8mb4_general_ci [client] socket /tmp/mysql.sock这里有几个参数特别重要log-error必须提前确认目录存在且属主是mysql用户否则启动时MariaDB会因为写不了日志文件而静默退出character-set-server和collation-server尽量在部署时就定下来后期修改字符集规则会牵涉到存量数据转换相当麻烦socket路径保持一致避免客户端连不上。3.4 用systemd托管服务用mysqld_safe这是一个比较旧的启动方式但现在更推荐使用systemd来管理因为可以设置开机自启也能在崩溃后由systemd自动拉起。需要手动创建一个service unit文件。# /etc/systemd/system/mariadb.service [Unit] DescriptionMariaDB 10.5.11 database server Afternetwork.target [Service] Typesimple Usermysql Groupmysql ExecStart/usr/local/mariadb/bin/mysqld --defaults-file/etc/my.cnf ExecReload/bin/kill -HUP $MAINPID Restarton-failure LimitNOFILE65535 [Install] WantedBymulti-user.target创建完成后执行systemctl daemon-reload然后用systemctl start mariadb启动。这个过程里我踩过一个细节坑如果之前用mysqld_safe方式启动过实例systemd再启动会报already in use那是因为进程没有吃透pid文件的位置。解决方法是先停掉旧进程再把pid文件删掉确保环境干净了再交由systemd接管。3.5 首次连接与root密码设置启动成功后用客户端连接测试一下/usr/local/mariadb/bin/mysql -uroot -S /tmp/mysql.sock首次连接时root账户默认采用unix_socket认证在本地以root系统用户身份登录可以免密。但这只是初始化状态马上需要设置root密码并移除测试库和匿名账户。ALTER USER rootlocalhost IDENTIFIED BY 你的强密码; DELETE FROM mysql.user WHERE User; DELETE FROM mysql.user WHERE Userroot AND Host NOT IN (localhost, 127.0.0.1, ::1); FLUSH PRIVILEGES;当然你也可以直接执行mariadb-secure-installation脚本它会一步一步引导你完成密码设置、移除匿名用户、禁止root远程登录等操作。我个人建议无论用哪种方式部署完成后做一次彻底的安全配置不要留着默认的空密码。3.6 验证基本功能部署完成的验证不只是能登录我通常会跑几个最基础的检查确认版本号、看线程运行状态、简单建库测试写入和读取的可用性。这样可以尽早发现字符集或权限问题避免后面业务接入时才发现。SELECT VERSION(); SHOW STATUS LIKE Uptime; CREATE DATABASE IF NOT EXISTS testdb DEFAULT CHARACTER SET utf8mb4; USE testdb; CREATE TABLE t1 (id INT PRIMARY KEY, name VARCHAR(50)); INSERT INTO t1 VALUES (1, hello); SELECT * FROM t1;验证通过后这个实例基本的运行链路就通了。接下来需要处理的是部署之后的日常维护和安全加固问题。4. 部署后的安全加固与日常运维要点4.1 账号权限最小化给业务创建账号时要避免直接使用root账号连接应用。很多人图省事一个root账户用到底出了问题连排查的余地都没有。更合理的做法是按业务模块拆分账号每个账号只授予它需要的那几个库的权限。CREATE USER app_user192.168.1.% IDENTIFIED BY 复杂度足够的密码; GRANT SELECT, INSERT, UPDATE, DELETE ON app_db.* TO app_user192.168.1.%; FLUSH PRIVILEGES;host字段也需要控制只允许应用服务器所在的网段访问不要用%通配符开放整个网络。这些权限控制虽然看起来基础但真的能挡掉不少低级风险。4.2 开启audit插件记录操作审计热搜词里频繁出现mariadb audit plugin可见大家对这个功能很关注。MariaDB从10.0开始就提供内置的Server Audit插件在10.5里已经比较稳定部署后我会顺手把这个插件加上。它能记录谁在什么时候执行了什么SQL对追查数据变更和定位安全问题很有帮助。INSTALL SONAME server_audit; SET GLOBAL server_audit_logging ON; SET GLOBAL server_audit_file_rotate_size 100000000; SET GLOBAL server_audit_events CONNECT,QUERY;如果需要开机自动生效把相应的配置写进/etc/my.cnf的[mysqld]段plugin-load-add server_audit server_audit_logging ON server_audit_file_rotate_size 100000000 server_audit_events CONNECT,QUERY server_audit_file_path /data/mysql/logs/server_audit.log开启审计会带来一定的性能损耗所以不需要记录所有查询按实际需求配置事件类型就好。4.3 备份策略逻辑备份与物理备份数据库不备份等于白部署。针对10.5.11这种版本我的选择是中小数据量用例行逻辑备份大库用物理备份工具。逻辑备份用mysqldump适合数据量不大几十GB以内的场景备份文件是纯SQL恢复灵活。/usr/local/mariadb/bin/mysqldump \ --single-transaction \ --master-data2 \ -uroot -p \ --databases yourdb /backup/mysql/yourdb_$(date %F).sql--single-transaction能保证InnoDB表备份期间的数据一致性不会因为其他写入导致备份损坏。在此基础上再配合binlog增量备份可以实现按时间点恢复。如果数据量上百GB再用mysqldump就不合适了此时选择物理备份工具mariadb-backup它是Percona XtraBackup的分支演进直接做文件级别的备份恢复速度远快于逻辑导入。4.4 性能参数初调不要乱抄网上配置很多人拿到配置就往上加innodb_buffer_pool_size加得过大反而容易触及内存上限引起内存交换。我的经验是这个参数设置为物理内存的50%到70%起步留出操作系统缓存和其他进程所需空间。还有一个经常被忽视的参数是max_connections默认值是151如果应用连接池配置了较多连接这个值很容易不够。[mysqld] innodb_buffer_pool_size 4G max_connections 500 innodb_flush_log_at_trx_commit 2innodb_flush_log_at_trx_commit 2能明显减少磁盘I/O压力但在系统崩溃时可能丢失最多1秒的事务安全性要求高的场景需要改成1。这里没有绝对正确的配置只有适合业务场景的配置。5. 常见问题排查与经验教训5.1 libaio缺失导致启动失败这是一个很常见的问题。症状是systemctl start mariadb后立即失败查错误日志发现类似mysqld: error while loading shared libraries: libaio.so.1的提示。解决办法前面已经提过安装libaio依赖。这里提醒顺序问题最好在解压之后初始化之前先装好依赖别等报错再补初始化失败重新跑一遍有点费时间。5.2 数据目录权限不对导致初始化失败有时候报错信息会混淆视听比如提示cannot create test file或者Access denied。如果你已经确认数据目录存在且属主是mysql还是报权限问题可以看看目录的父级权限。我遇到过一次/data本身是root属主且权限是700的情况导致mysql用户无法进入路径解决方案是把/data/mysql这一路径下所有层级的目录x权限放开。chown -R mysql:mysql /data/mysql chmod -R 750 /data/mysql这种问题在根目录下部署时不太会出现但在挂载盘目录下部署时很常见因为挂载点的权限往往比较严格。5.3 socket连接失败ERROR 2002 (HY000): Cant connect to local MySQL server through socket /tmp/mysql.sock这个错误在客户端尝试连接时经常出现。原因通常有两个服务还没启动或者客户端和服务端配置的socket路径不一致。用systemd管理时服务端socket路径由my.cnf指定客户端连接时应显式指定-S参数或者保证/etc/my.cnf的[client]段和服务端一致。/usr/local/mariadb/bin/mysql -uroot -p -S /tmp/mysql.sock5.4 从10.5.x小版本升级的正确姿势如果后面要在10.5系列内做小版本升级比如从10.5.8升到10.5.11操作步骤是备份数据目录和配置文件下载新版本的tar.gz包解压后调整软链接指向新目录然后重启服务。# 停库 systemctl stop mariadb # 备份旧配置 cp /etc/my.cnf /etc/my.cnf.bak_$(date %F) # 替换新版本软链接 ln -sfn /usr/local/mariadb-10.5.11-linux-x86_64 /usr/local/mariadb # 启动 systemctl start mariadb小版本升级不需要重新初始化数据目录MariaDB会自动处理元数据的升级。但如果是从10.5跨到其他大版本比如10.6、10.11升级后必须执行mariadb-upgrade否则可能遇到系统表结构不匹配的诡异问题。5.5 二进制方式与包管理器方式切换时的注意事项如果你之前用rpm/deb方式装过MariaDB现在想改用这个tar.gz包需要注意一点包管理器安装的版本会保留自己的systemd unit文件和数据目录不清理干净可能会导致新实例启动时报告数据目录已经被占用。我的建议是先完整卸载旧版本备份数据完全删除空的数据目录再用二进制包重新部署。这个切换过程最容易出问题的是配置文件残留因为/etc/my.cnf里的路径可能还指向旧的位置。根据我个人的实际体会用tar.gz包部署MariaDB最核心的价值不是一次跑通而是让你能完全掌控数据库实例的目录布局、启动方式和升级节奏。只要在解压前多做一点依赖检查、在启动前做好数据目录规划这套部署方式比包管理器更灵活也更容易复现到其他机器上。最后再分享一个小技巧部署完成后把解压过的包和校验值一起保存到内网文件服务器上相当于给自己留了原版基线以后哪台机器要部署同版本时照方抓药就能快速完成。本文还有配套的精品资源点击获取
返回列表