
1. MariaDB部署方案选型指南在CentOS 7环境下部署MariaDB时我们通常面临三种主流方案官方yum源安装、二进制包安装和源码编译安装。每种方式都有其独特的适用场景和优缺点就像选择交通工具一样——yum源如同地铁方便快捷但路线固定二进制包像出租车即招即用但成本略高源码编译则像自驾游自由灵活但需要驾驶技术。先说说官方yum源安装这是最省心的方式。执行yum install mariadb-server就能自动解决依赖问题特别适合快速搭建测试环境。但它的缺点也很明显版本更新滞后默认安装的是系统维护的老版本CentOS 7默认提供5.5版本无法使用新特性。我在实际项目中就遇到过需要GTID复制功能结果发现yum安装的版本根本不支持。二进制包安装则提供了版本选择的灵活性。你可以直接从MariaDB官网下载10.5、10.6等最新稳定版解压即用。这种方式既保留了便捷性又能获得较新的功能是生产环境中平衡性最好的选择。不过需要注意系统库依赖比如glibc版本是否兼容。源码编译安装是自由度最高的方案。你可以精细调整编译参数禁用不需要的功能模块甚至针对特定CPU指令集优化性能。我在处理高并发场景时就通过-DWITH_EXTRA_CHARSETScomplex参数移除了不常用的字符集支持减少了约15%的内存占用。但编译过程可能遇到各种依赖问题比如去年我在阿里云CentOS 7.6上编译时就花了半天时间解决cmake版本过低的问题。2. 官方yum源安装实战让我们从最简单的yum安装开始。虽然不推荐生产环境使用但作为快速验证方案非常合适。首先确保系统环境干净# 关闭防火墙和SELinux systemctl stop firewalld setenforce 0 # 添加官方yum源 cat /etc/yum.repos.d/mariadb.repo EOF [mariadb] name MariaDB baseurl https://mirrors.tuna.tsinghua.edu.cn/mariadb/yum/10.5/centos7-amd64 gpgkeyhttps://mirrors.tuna.tsinghua.edu.cn/mariadb/yum/RPM-GPG-KEY-MariaDB gpgcheck1 EOF安装过程简单到只需一条命令yum install -y MariaDB-server MariaDB-client但这里有个坑要注意MariaDB官方源的包名是首字母大写的MariaDB-server而系统自带的是小写的mariadb-server。我曾经因为写错大小写莫名其妙装上了旧版本排查了半天。安装完成后需要安全加固mysql_secure_installation这个脚本会引导你设置root密码、移除匿名用户、禁止root远程登录等。建议所有选项都选Y但生产环境中可能需要保留root远程登录权限以便管理。yum安装的默认数据目录是/var/lib/mysql如果想修改位置需要调整配置vim /etc/my.cnf.d/server.cnf [mysqld] datadir/data/mysql然后迁移数据mkdir /data/mysql chown mysql:mysql /data/mysql rsync -av /var/lib/mysql/ /data/mysql/ systemctl restart mariadb3. 二进制包部署详解二进制包部署是生产环境的首选方案。以10.5.4版本为例首先下载对应包wget https://downloads.mariadb.org/interstitial/mariadb-10.5.4/bintar-linux-systemd-x86_64/mariadb-10.5.4-linux-systemd-x86_64.tar.gz解压到/usr/local目录并创建软链接tar -xvf mariadb-10.5.4-linux-systemd-x86_64.tar.gz -C /usr/local/ cd /usr/local ln -s mariadb-10.5.4-linux-systemd-x86_64 mysql创建专用用户和目录useradd -r -d /data/mysql -s /sbin/nologin mysql mkdir -p /data/mysql chown mysql:mysql /data/mysql初始化数据库cd /usr/local/mysql ./scripts/mysql_install_db --usermysql --datadir/data/mysql配置启动脚本cp support-files/mysql.server /etc/init.d/mysqld chkconfig --add mysqld systemctl start mysqld二进制安装有个常见问题socket文件位置。默认在/tmp/mysql.sock但很多管理工具会到/var/lib/mysql/mysql.sock查找。解决方法是在my.cnf中明确指定[client] socket/tmp/mysql.sock [mysqld] socket/tmp/mysql.sock4. 源码编译优化部署源码编译适合对性能有极致要求的场景。首先安装依赖yum install -y cmake3 gcc-c bison ncurses-devel libaio-devel openssl-devel下载源码并解压wget https://downloads.mariadb.org/interstitial/mariadb-10.5.4/source/mariadb-10.5.4.tar.gz tar xvf mariadb-10.5.4.tar.gz cd mariadb-10.5.4关键编译参数配置mkdir build cd build cmake .. \ -DCMAKE_INSTALL_PREFIX/usr/local/mysql \ -DMYSQL_DATADIR/data/mysql \ -DSYSCONFDIR/etc \ -DWITH_INNOBASE_STORAGE_ENGINE1 \ -DWITH_ARCHIVE_STORAGE_ENGINE1 \ -DWITH_BLACKHOLE_STORAGE_ENGINE1 \ -DWITH_SSLsystem \ -DWITH_ZLIBsystem \ -DWITH_READLINE1 \ -DENABLED_LOCAL_INFILE1 \ -DDEFAULT_CHARSETutf8mb4 \ -DDEFAULT_COLLATIONutf8mb4_unicode_ci编译和安装make -j $(nproc) make install这里有个性能调优技巧-j参数指定并行编译线程数设为CPU核心数可大幅加快编译速度。但要注意内存消耗我在2核4G的机器上曾经因为设为4导致OOM崩溃。5. 多实例配置实战生产环境中经常需要单机部署多个MariaDB实例。假设要配置3306、3307两个端口创建目录结构mkdir -p /mysql/{3306,3307}/{data,etc,log,tmp} chown -R mysql:mysql /mysql初始化数据目录/usr/local/mysql/scripts/mysql_install_db --datadir/mysql/3306/data --usermysql /usr/local/mysql/scripts/mysql_install_db --datadir/mysql/3307/data --usermysql配置文件示例/mysql/3306/etc/my.cnf[mysqld] port3306 datadir/mysql/3306/data socket/mysql/3306/tmp/mysql.sock log-error/mysql/3306/log/mysql.log pid-file/mysql/3306/mysql.pid启动脚本需要特殊处理。可以复制多份启动脚本修改端口参数。或者使用mysqld_multi工具统一管理cp /usr/local/mysql/support-files/mysqld_multi.server /etc/init.d/mysqld_multi多实例的资源隔离很重要我曾遇到过某个实例的慢查询拖垮整机性能。建议在配置中添加[mysqld3306] innodb_buffer_pool_size1G open_files_limit655356. 性能对比与监控三种安装方式的性能差异主要来自编译优化和版本特性。在我的测试环境中4核8G CentOS 7.9使用sysbench进行基准测试测试项yum安装(5.5)二进制(10.5)源码编译(10.5)OLTP读写(QPS)2,3568,7429,215连接响应时间(ms)12.45.74.9内存占用(MB)380420395源码编译版本通过-marchnative参数启用CPU特有指令集性能提升约5%。但二进制版维护更方便建议折中选择。关键监控指标包括-- 查看QPS和TPS SHOW GLOBAL STATUS LIKE Questions; SHOW GLOBAL STATUS LIKE Com_commit; -- 查看连接数 SHOW STATUS LIKE Threads_connected; -- 查看缓冲池命中率 SELECT (1 - (SELECT variable_value FROM performance_schema.global_status WHERE variable_name Innodb_buffer_pool_reads) / (SELECT variable_value FROM performance_schema.global_status WHERE variable_name Innodb_buffer_pool_read_requests)) * 100 AS hit_ratio;7. 生产环境调优建议根据多年运维经验分享几个关键调优参数缓冲池大小物理内存的50-70%innodb_buffer_pool_size4G日志文件配置innodb_log_file_size1G innodb_log_files_in_group2并发连接控制max_connections500 thread_cache_size50查询缓存MariaDB 10.2建议关闭query_cache_size0 query_cache_type0临时表优化tmp_table_size64M max_heap_table_size64M曾经处理过一个性能问题某电商大促期间数据库响应缓慢。最终发现是默认的tmp_table_size太小16M导致大量磁盘临时表。调整到64M后查询速度提升3倍。8. 故障排查锦囊分享几个常见问题的解决方法问题1启动时报错Could not create unix socket lock filechown mysql:mysql /var/lib/mysql rm -f /var/lib/mysql/mysql.sock.lock问题2忘记root密码systemctl stop mariadb mysqld_safe --skip-grant-tables mysql -uroot # 执行密码修改后重启问题3数据目录磁盘空间不足-- 查看各个数据库大小 SELECT table_schema DB Name, round(sum(data_lengthindex_length)/1024/1024,1) Size(MB) FROM information_schema.tables GROUP BY table_schema;最后提醒无论采用哪种部署方式都要定期备份。推荐使用mariabackup工具mariabackup --backup --target-dir/backups/$(date %F) \ --userbackup --passwordyourpassword