MariaDB数据库安装配置与性能优化实践
1. MariaDB 服务器概述MariaDB 是一个开源的关系型数据库管理系统RDBMS作为 MySQL 的一个分支而诞生。它由 MySQL 的原始开发者 Michael Monty Widenius 创建旨在保持与 MySQL 的高度兼容性同时提供更多功能和改进。MariaDB 的名称来源于 Monty 的小女儿 Maria 的名字。在实际生产环境中MariaDB 因其稳定性、性能和丰富的功能集而广受欢迎。许多大型科技公司如 Google、Wikipedia 和 Red Hat 都已将 MariaDB 作为其数据库解决方案。与 MySQL 相比MariaDB 提供了更多的存储引擎选择如 Aria、ColumnStore 等改进了查询优化器并包含了更多安全特性。提示虽然 MariaDB 与 MySQL 高度兼容但在某些特定功能和语法上仍存在差异迁移时需要注意兼容性问题。2. MariaDB 服务器安装与配置2.1 系统环境准备在安装 MariaDB 前需要确保系统满足基本要求。对于 Linux 系统以 Ubuntu 为例建议使用至少 2GB 内存和 20GB 磁盘空间的生产环境配置。以下是在 Ubuntu 20.04 LTS 上的安装步骤# 更新软件包列表 sudo apt update # 安装 MariaDB 服务器 sudo apt install mariadb-server # 安全配置向导 sudo mysql_secure_installation安装过程中安全配置向导会提示设置 root 密码、移除匿名用户、禁止远程 root 登录等安全选项。建议全部选择 Y 以增强安全性。2.2 配置文件详解MariaDB 的主要配置文件位于/etc/mysql/mariadb.conf.d/50-server.cnf。关键配置项包括[mysqld] datadir /var/lib/mysql socket /var/run/mysqld/mysqld.sock # 内存配置 key_buffer_size 256M max_allowed_packet 64M thread_stack 192K thread_cache_size 8 # 连接设置 max_connections 100 connect_timeout 10 wait_timeout 28800 # 日志配置 log_error /var/log/mysql/error.log slow_query_log 1 slow_query_log_file /var/log/mysql/mysql-slow.log long_query_time 2配置完成后需要重启服务使更改生效sudo systemctl restart mariadb3. MariaDB 常见问题解决方案3.1 错误 2059认证插件问题当客户端尝试连接 MariaDB 10.4 版本时可能会遇到错误 2059Authentication plugin caching_sha2_password cannot be loaded。这是因为新版 MariaDB 默认使用了更安全的认证插件。解决方案有两种修改用户认证方式推荐ALTER USER usernamehost IDENTIFIED WITH mysql_native_password BY password; FLUSH PRIVILEGES;或者在配置文件中强制使用旧版认证方式不推荐安全性降低[mysqld] default_authentication_plugin mysql_native_password3.2 UniDAC 连接失败问题使用 UniDAC 组件连接 MariaDB 时可能会遇到兼容性问题。解决方法包括确保使用最新版本的 UniDAC 组件在连接字符串中明确指定协议版本ProtocolmpMySQL;Serverlocalhost;Databasetestdb;UserIDuser;Passwordpass;Port3306检查防火墙设置确保 3306 端口开放3.3 群晖 NAS 连接配置在群晖 NAS 上配置 MariaDB 连接时需要注意确保 MariaDB 10 套件已安装并启动设置适当的权限GRANT ALL PRIVILEGES ON *.* TO username% IDENTIFIED BY password; FLUSH PRIVILEGES;在群晖控制面板 安全性 防火墙中允许 3306 端口如果使用 Docker 版 MariaDB确保正确映射端口4. MariaDB 与 Spring Boot 集成4.1 基本配置在 Spring Boot 项目中使用 MariaDB 非常简单。首先在 pom.xml 中添加依赖dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-data-jpa/artifactId /dependency dependency groupIdorg.mariadb.jdbc/groupId artifactIdmariadb-java-client/artifactId version3.0.6/version /dependency然后在 application.properties 中配置数据源spring.datasource.urljdbc:mariadb://localhost:3306/dbname spring.datasource.usernameuser spring.datasource.passwordpass spring.datasource.driver-class-nameorg.mariadb.jdbc.Driver spring.jpa.hibernate.ddl-autoupdate spring.jpa.show-sqltrue4.2 MyBatis-Plus 支持MyBatis-Plus 完全支持 MariaDB。配置示例Configuration MapperScan(com.example.mapper) public class MybatisPlusConfig { Bean public MybatisPlusInterceptor mybatisPlusInterceptor() { MybatisPlusInterceptor interceptor new MybatisPlusInterceptor(); interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MARIADB)); return interceptor; } }实体类映射示例Data TableName(user) public class User { TableId(type IdType.AUTO) private Long id; private String name; private Integer age; private String email; }Mapper 接口示例public interface UserMapper extends BaseMapperUser { // 自定义方法 Select(SELECT * FROM user WHERE age #{age}) ListUser selectUsersOlderThan(Integer age); }5. MariaDB 性能优化实践5.1 查询优化技巧索引优化为 WHERE、JOIN 和 ORDER BY 子句中的列创建索引避免过度索引每个额外的索引都会降低写入性能使用复合索引时遵循最左前缀原则EXPLAIN 分析EXPLAIN SELECT * FROM orders WHERE customer_id 100 AND status shipped;分析结果中的 type 列应尽量为 ref 或 eq_ref避免 ALL全表扫描**避免 SELECT *** 只查询需要的列减少数据传输量5.2 服务器参数调优根据服务器配置调整以下参数# InnoDB 缓冲池建议为系统内存的 50-70% innodb_buffer_pool_size 4G # 日志文件大小建议每个 256M-2G innodb_log_file_size 512M # 并发连接处理 innodb_thread_concurrency 0 # 0表示无限制 innodb_read_io_threads 8 innodb_write_io_threads 8 # 查询缓存MariaDB 10.1.7 已移除使用其他缓存方案5.3 分表与分区策略对于大型表考虑使用分区提高查询性能CREATE TABLE sales ( id INT NOT NULL AUTO_INCREMENT, region VARCHAR(50) NOT NULL, amount DECIMAL(10,2) NOT NULL, sale_date DATE NOT NULL, PRIMARY KEY (id, sale_date) ) PARTITION BY RANGE (YEAR(sale_date)) ( PARTITION p2020 VALUES LESS THAN (2021), PARTITION p2021 VALUES LESS THAN (2022), PARTITION p2022 VALUES LESS THAN (2023), PARTITION pmax VALUES LESS THAN MAXVALUE );6. MariaDB 高可用与备份方案6.1 主从复制配置主服务器配置/etc/mysql/mariadb.conf.d/50-server.cnf[mysqld] server-id 1 log_bin /var/log/mysql/mariadb-bin binlog_format ROW binlog_row_image FULL expire_logs_days 10创建复制用户CREATE USER replicator% IDENTIFIED BY password; GRANT REPLICATION SLAVE ON *.* TO replicator%; FLUSH PRIVILEGES;从服务器配置[mysqld] server-id 2 relay_log /var/log/mysql/mariadb-relay-bin read_only ON启动复制CHANGE MASTER TO MASTER_HOSTmaster_ip, MASTER_USERreplicator, MASTER_PASSWORDpassword, MASTER_LOG_FILEmariadb-bin.000001, MASTER_LOG_POS328; START SLAVE;6.2 备份与恢复策略mysqldump 备份mysqldump -u root -p --all-databases --single-transaction --master-data2 full_backup.sql物理备份Percona XtraBackupxtrabackup --backup --target-dir/backups/full --userroot --passwordpassword xtrabackup --prepare --target-dir/backups/full自动化备份脚本示例#!/bin/bash BACKUP_DIR/backups/mysql DATE$(date %Y%m%d_%H%M%S) LOGFILE/var/log/mysql_backup.log echo $(date) - Starting backup $LOGFILE mysqldump -u backup_user -ppassword --all-databases --single-transaction | gzip $BACKUP_DIR/full_$DATE.sql.gz # 保留最近7天备份 find $BACKUP_DIR -name *.sql.gz -mtime 7 -exec rm {} \; echo $(date) - Backup completed $LOGFILE7. MariaDB 监控与维护7.1 性能监控工具内置命令SHOW STATUS- 查看服务器状态变量SHOW PROCESSLIST- 查看当前连接和查询SHOW ENGINE INNODB STATUS- InnoDB 详细状态第三方工具Prometheus Grafana可视化监控Percona Monitoring and Management (PMM)专业数据库监控mytop类似 top 的命令行监控工具7.2 定期维护任务表维护ANALYZE TABLE table_name; -- 更新统计信息 OPTIMIZE TABLE table_name; -- 优化表存储日志轮转 配置 logrotate 自动轮转 MySQL 日志/var/log/mysql/mysql.log { daily rotate 7 missingok compress delaycompress notifempty create 640 mysql adm postrotate test -x /usr/bin/mysqladmin /usr/bin/mysqladmin flush-logs endscript }用户权限审计-- 列出所有用户及其权限 SELECT user, host FROM mysql.user; SHOW GRANTS FOR usernamehost; -- 定期检查并移除不必要的权限 REVOKE ALL PRIVILEGES ON *.* FROM usernamehost;在实际使用 MariaDB 的过程中我发现定期检查慢查询日志和优化长期存在的性能问题比一次性的大规模调优更有效。对于生产环境建议至少每周进行一次完整的备份验证确保在需要时能够成功恢复。

相关新闻

WeTextProcessing路线图:未来发展方向与新功能预告

WeTextProcessing路线图:未来发展方向与新功能预告

WeTextProcessing路线图:未来发展方向与新功能预告 【免费下载链接】WeTextProcessing Text Normalization & Inverse Text Normalization 项目地址: https://gitcode.com/gh_mirrors/we/WeTextProcessing WeTextProcessing作为一款专注于文本规范化&…

2026/10/16 14:06:13 阅读更多 →
通感一体卫星组网:自动驾驶与机器人的天基感知革命

通感一体卫星组网:自动驾驶与机器人的天基感知革命

1. 天基超视距感知:自动驾驶与机器人的"上帝视角"在重庆山城的复杂立交桥上,一辆自动驾驶测试车突然遭遇GPS信号丢失。与此同时,300公里外新疆戈壁滩的勘探机器人因地形遮挡与指挥中心失联——这类场景揭示了地面感知系统的致命短板…

2026/10/17 6:26:30 阅读更多 →
2万亿 tokens训练的秘密:ModernBERT-base预训练数据与训练策略深度剖析

2万亿 tokens训练的秘密:ModernBERT-base预训练数据与训练策略深度剖析

2万亿 tokens训练的秘密:ModernBERT-base预训练数据与训练策略深度剖析 【免费下载链接】ModernBERT-base 项目地址: https://ai.gitcode.com/hf_mirrors/answerdotai/ModernBERT-base ModernBERT-base是一款基于2万亿tokens海量数据训练的先进语言模型&…

2026/10/18 6:32:32 阅读更多 →

最新新闻

一阶倒立摆平衡车仿真与GUI调参工具:从建模到源码全解析

一阶倒立摆平衡车仿真与GUI调参工具:从建模到源码全解析

先说个反直觉的结论:做平衡车,最花时间的不一定是焊板子和调实车,而是把一阶倒立摆模型在GUI里跑通。我见过太多人上来就调PID,参数改来改去,最后连车为什么一直朝一个方向冲都说不清楚——根子在于脑子里没有一个能复…

2026/10/18 8:13:12 阅读更多 →
C++ STL系统学习:容器选型、迭代器算法与高频坑位排查

C++ STL系统学习:容器选型、迭代器算法与高频坑位排查

如果你在C的学习路线上已经走过了语法、类与对象、模板这几关,那么标准模板库(STL)大概率是你下一步绕不开的内容。DAY 3.17 这个编号通常来自一套系统化的学习计划,把STL安排在模板之后、并发和方向进阶之前,这个位置…

2026/10/18 8:13:12 阅读更多 →
SpringBoot+Vue智能旅游行程规划系统实战:从CRUD到智能算法

SpringBoot+Vue智能旅游行程规划系统实战:从CRUD到智能算法

1. 从标题拆解出真正的需求:不是做CRUD,而是做"规划"打开需求文档或者任务书,写着"基于SpringBootVue的智能旅游行程规划系统",很多人第一反应是:这不就是一个景点管理订单管理的CRUD吗&#xff1…

2026/10/18 8:13:12 阅读更多 →
WPF LiveCharts 动态折线图实战:线程安全与实时刷新避坑指南

WPF LiveCharts 动态折线图实战:线程安全与实时刷新避坑指南

简介:本资源是面向WPF平台C#开发者的LiveCharts动态折线图实战示例,专为需要实现数据实时可视化、趋势监控或交互式图表功能的中初级开发者设计。压缩包内含67个文件,涵盖11个核心C#源码文件(如MainWindow.xaml.cs、App.xaml.cs&a…

2026/10/18 8:13:12 阅读更多 →
AI写公文如何避免“AI味”?文风建模+仿写智能体实战

AI写公文如何避免“AI味”?文风建模+仿写智能体实战

写公文这件事,大多数同事不是不会写,是架不住“每次都是新任务”。更尴尬的是,很多朋友已经开始用AI帮忙了,但写出来的东西要么是空话堆砌,要么一股“万能模板味”,领导一眼就皱眉。问题不在AI不够聪明&…

2026/10/18 8:13:12 阅读更多 →
从手工到自动:做 PPT 的 10 步改造记录

从手工到自动:做 PPT 的 10 步改造记录

## 背景在团队协作场景里,做 PPT 找模板排版到半夜是效率的主要损耗点。## 核心能力- 文本素材自动梳理大纲- 大纲支持二次编辑- 多套配色模板可选- 渲染16:9标准PPTX文件## 落地场景团队协作等场景都能直接搬进工作流,输入是散乱的原始材料,…

2026/10/18 8:12:12 阅读更多 →

日新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/18 0:00:55 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/18 0:00:55 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/18 0:00:55 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/18 0:00:55 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/18 0:00:55 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/18 0:00:55 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 0:55:02 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/17 17:22:31 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 14:23:36 阅读更多 →