NAS不仅仅是存文件的地方。随着你部署的服务越来越多,迟早会遇到需要关系型数据库的场景——Nextcloud的用户数据、Grafana的面板配置、Jellyfin的元数据缓存、WordPress的文章内容,背后都离不开数据库的支持。与其让每个应用各自携带嵌入式数据库不如统一部署一套专业的数据库服务来集中管理。今天就来聊聊在NAS上如何正确地搭建和维护MariaDB和PostgreSQL这两种最流行的开源数据库。

NAS数据库服务搭建实战:MariaDB与PostgreSQL的高可用部署与性能调优

MariaDB:MySQL生态的最佳继承者

MariaDB由MySQL的原作者Michael Widenius主导开发,是MySQL的一个完全兼容分支。之所以推荐MariaDB而非原版MySQL有几个原因:第一,MariaDB的开源协议更加纯粹GPLv2不存在像Oracle MySQL那样的商业许可证争议;第二,MariaDB的性能在某些场景下优于MySQL特别是在InnoDB引擎的优化方面;第三,它的发布节奏更快新特性和Bug修复跟进更及时;第四,对于从MySQL迁移过来的用户来说是完全无缝的——同样的配置文件格式、同样的SQL方言、同样的客户端工具通用。

在NAS上部署MariaDB推荐使用官方Docker镜像。需要注意的关键参数包括字符集设置(强烈建议utf8mb4以完整支持emoji等多字节字符)、最大连接数(根据你同时运行的应用数量调整默认151通常够用但跑多了应用可能需要增大)、以及缓冲池大小(innodb_buffer_pool_size这是影响数据库性能最重要的参数建议设为可用内存的60%-70%)。数据持久化方面务必将/var/lib/mysql目录映射到宿主机并确保磁盘有足够空间。初始 root 密码通过环境变量 MYSQL_ROOT_PASSWORD 设置,其他应用所需的数据库和用户可以通过初始化脚本(/docker-entrypoint-initdb.d/)自动创建免去手动操作的麻烦。

PostgreSQL:功能最强大的开源关系型数据库

如果说MariaDB/MySQL胜在生态广泛和上手容易,那PostgreSQL赢在功能的深度和广度。它支持的数据类型极其丰富——JSON/JSONB原生支持带索引、数组类型、几何类型、全文搜索、甚至自定义类型。它的查询优化器被公认为开源数据库中最先进的复杂联表查询的执行计划通常比MySQL更优。MVCC(多版本并发控制)的实现让读写互不阻塞并发性能出色。而且PostgreSQL拥有丰富的扩展生态系统——PostGIS做地理空间数据处理、TimescaleDB处理时序数据、pgvector支持向量相似度搜索(AI应用的基础设施)。

Docker部署PostgreSQL同样简单官方镜像质量很高。需要关注的配置项包括shared_buffers(共享内存缓冲区建议设为系统内存的25%)、work_mem(排序和哈希操作使用的内存量)、effective_cache_size(告诉优化器多少内存可用于磁盘缓存)以及maintenance_vacuum工作相关的参数。PG的数据目录默认在/var/lib/postgresql/data同样需要做volume持久化。认证方式推荐先用本地信任模式完成初始化后再改为密码认证(md5或scram-sha-256后者更安全)。对于初学者pgAdmin这个Web管理界面工具非常有帮助可以直接在浏览器中执行SQL、浏览表结构、监控数据库状态。

数据库备份恢复与日常运维要点

不管用哪种数据库备份都是头等大事。MariaDB的备份工具有mysqldump(逻辑备份导出SQL文本)、mariabackup(物理热备份不锁表)、以及Percona XtraBackup(第三方但很成熟)。对于家用NAS规模的数据量mysqldump配合gzip压缩通常是最实用的选择——可以用cron定时执行每天凌晨做一次全量备份保留最近7天的副本然后通过rclone同步到云端存储实现异地容灾。PostgreSQL这边对应的有pg_dump/pg_dumpall(逻辑备份)和pg_basebackup(物理流式备份WAL预写式日志)。pg_dump的并行选项(-j)可以显著加快大库的导出速度。

日常运维中几个常见的性能问题值得注意。慢查询是数据库性能的头号杀手——MariaDB开启slow_query_log PostgreSQL打开log_min_duration_statement后就可以捕获执行时间超过阈值的SQL语句然后用EXPLAIN/EXPLAIN ANALYZE分析执行计划找出缺失的索引或不合理的JOIN方式。索引也不是越多越好每个索引都会增加写入时的开销所以要在查询性能和写入性能之间找到平衡点。连接数方面要注意应用端的连接池配置不要每个容器都创建几十个空闲连接把数据库的最大连接数耗尽。最后提醒一点:数据库文件放在机械硬盘(HDD)上会比固态硬盘(SSD)慢一个数量级如果NAS有条件的话强烈建议把数据库的数据目录放到SSD上或者至少确保有足够的RAM让热点数据常驻内存缓冲池中减少磁盘IO。

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。