☰
MariaDB服务器部署实战:从安装到安全加固与性能调优
2026/10/7 3:44:49 网站建设 项目流程

1. 为什么我坚持在服务器上选MariaDB而不是MySQL

先交代一下背景。我最早接触的是MySQL,那时候还是5.5、5.6的天下,后来因为工作原因换到了MariaDB,一用就是好几年。身边不少朋友问我:"MariaDB和MySQL到底有什么区别?不就是换了个名字吗?"说实话,这个问题我一开始也说不清楚,直到自己动手把一台业务服务器从MySQL迁移到MariaDB之后,才真正理解了其中的门道。

MariaDB是MySQL的一个分支,由MySQL的创始人Michael Widenius在MySQL被收购后主导开发,目标是保持开源、社区驱动的发展路线。所以从血统上讲,MariaDB和MySQL是"同源"的:SQL语法基本兼容,存储引擎、主从复制、权限系统这些核心机制一脉相承。但对于我们这些真正拿它跑业务的运维人员来说,光"兼容"还不够,我更关心的是它在实际服务器环境中的稳定性、性能表现和运维便利性。

我自己在服务器上部署MariaDB的切身体会是:安装简单、默认配置直白、和MySQL的迁移成本极低。如果你手头的项目之前用的是MySQL,把连接串的驱动和端口改一下,数据导过来,几乎不需要大改代码。而且MariaDB在几个特定场合表现明显更好,比如复杂查询的优化器、临时表处理、以及JSON字段的支持,后面我会细说。

这篇文章不是给"高端玩家"看的源码分析,而是面向在Linux服务器上真正要部署、配置、维护MariaDB的人。我会把从零安装到日常运维的全过程讲清楚,包括那些官方文档里不会写、但实际踩坑踩出来的经验。无论你是在本地虚拟机练手,还是在云服务器上跑生产业务,照着这套思路走,基本不会出大问题。

2. 部署前的关键认知:MariaDB不是"MySQL换皮"

很多人把MariaDB当成MySQL的"免费替代品",这种理解不算全错,但如果带着这个想法去生产环境部署,大概率会在某些特性上栽跟头。我建议你在动服务器之前,先花十分钟搞清楚几个核心差异,这会直接影响你后面的配置决策。

2.1 版本演进路径与兼容性边界

MariaDB的版本号是独立的,目前主流的是10.x系列,比如10.5、10.6、10.11。这个版本号看起来比MySQL的8.0大很多,但本质上对应的是一个长期演进的分支。需要注意的一点是:MariaDB 10.x的某些行为并不完全等同于同期的MySQL 8.x。比如MySQL 8.0默认的认证插件是caching_sha2_password,而MariaDB用的是mysql_native_password和unix_socket的组合。这就导致一个很常见的问题:从MySQL迁移过来的客户端工具,如果只认caching_sha2_password,连MariaDB时会报认证失败。

我遇到过最典型的场景是:公司有个老旧的PHP应用,连接数据库的库版本比较老,迁移到MariaDB 10.6之后,连接直接报"Access denied",排查了一圈发现是认证插件不匹配。解决方式也很简单,在创建用户时显式指定认证插件:

CREATE USER 'app_user'@'%' IDENTIFIED VIA mysql_native_password USING PASSWORD('your_password');

或者用ALTER USER修改已有用户:

ALTER USER 'app_user'@'%' IDENTIFIED VIA mysql_native_password USING PASSWORD('new_password');

这种坑不是技术难题,但对第一次上手的人来讲,确实容易懵。

2.2 存储引擎的默认值差异

MySQL 8.x默认的存储引擎是InnoDB,MariaDB同样也是InnoDB,但MariaDB自己还维护了一套Aria存储引擎,还有ColumnStore这类分析型引擎的选项。对绝大多数应用来说,直接用InnoDB就够了,不需要折腾。但有一个点值得注意:MariaDB对InnoDB的实现有自己的一套改进,比如支持"页面压缩"(Page Compression)——这不是传统意义的表压缩,而是更细粒度的物理页压缩,能让磁盘占用明显下降。我在一台数据量超过200GB的服务器上开过页面压缩,压缩比接近3比1,这对磁盘紧张的场景非常友好。

但页面压缩有个前提:它依赖稀疏文件(sparse file)和hole punching技术,底层文件系统要支持。ext4和XFS都支持,但不建议在ZFS上叠加使用,因为ZFS自己就有强大的压缩能力,双重压缩反而浪费CPU。这属于典型的"知道原理才能选好配置"的例子。

2.3 从MySQL迁移到MariaDB的成本评估

如果你当前项目在用MySQL,想切到MariaDB,我的建议是:先评估应用层是否用了MySQL特有的语法或函数。虽然MariaDB兼容面很广,但有些MySQL 8.x新增的功能在MariaDB里是没有的,例如窗口函数(MariaDB 10.2之后补齐了大部分)、CTE(公共表表达式,MariaDB 10.2之后也支持了)等。主流功能基本不缺,但务必做一次全量SQL的回归测试,尤其是涉及JSON操作、加密函数这类细节的地方。

具体迁移步骤可以这样走:

  1. 先在测试服务器装同版本MariaDB,直接导入MySQL的逻辑备份文件(mysqldump导出的.sql文件),观察报错。
  2. 跑一遍应用的全部接口测试,重点看查询结果是否一致。
  3. 用pt-query-digest或Performance Schema抓一段时间的生产慢查询,在MariaDB上回放,对比执行时间。

我做过的最顺利的一次迁移是在一台CentOS 7服务器上,MySQL 5.7迁到MariaDB 10.6,除了几个存储过程写法有细微差异,其余全量通过。整个过程验证下来,只要SQL不是特别"MySQL私有化",迁移没有想象中痛苦。

3. 全新服务器上部署MariaDB的完整流程

聊完基础认知,接下来是真正的实操环节。我以一台干净的Linux服务器为例(CentOS 7/8或者Ubuntu 20.04/22.04皆可),带你走一遍部署流程。下面这些步骤是我反复操作过很多遍的,每一步都有明确目的,不是随便敲的。

3.1 环境准备:检查系统与依赖

动手前先确认三件事:

  • 操作系统版本:不同发行版对应的软件仓库不一样,安装方式也不同。
  • 磁盘空间:数据目录(默认是/var/lib/mysql)要有充足空间,建议至少预留20GB以上,生产环境则按数据增长量翻倍预估。
  • 内存大小:MariaDB默认配置比较保守,但如果有条件,建议服务器内存不低于2GB,之后再根据实际业务量调优。

可以用下面命令快速检查:

cat /etc/os-release free -h df -h

这里有个容易被忽略的点:尽量别在容器里跑生产级MariaDB,除非你非常熟悉数据卷和网络配置的坑。Docker跑开发环境图省事没问题,但生产环境的数据卷权限、端口映射、日志收集都容易出幺蛾子。我见过不止一次因为Docker容器重建导致数据库数据丢失的案例,教训很惨痛。

3.2 安装MariaDB:官方仓库优先

Ubuntu/Debian系列的安装方式:

apt update apt install mariadb-server mariadb-client

CentOS/RHEL系列(7和8都适用):

# CentOS 7 yum install mariadb-server # CentOS 8 / Rocky Linux 8 dnf install mariadb-server

装完之后,启动服务并设为开机自启:

systemctl start mariadb systemctl enable mariadb systemctl status mariadb

这里我强烈建议一件很多人不做的事:安装完成后立刻查看版本号,并记录下来。别觉得多余,后面排查兼容性问题、找官方文档时,版本号是第一筛选条件。

mariadb --version mysql --version

你会发现mariadb命令和mysql命令都能用,因为MariaDB把客户端工具做成了兼容模式,这是故意为之的,目的就是让老MySQL用户无缝切换。

3.3 初始化配置:跑一遍安全脚本

安装完成并启动后,第一件事是运行安全初始化脚本:

mysql_secure_installation

这个脚本会引导你做几件事:

  • 设置root密码(如果没有设置过)
  • 删除匿名用户
  • 禁止root远程登录
  • 删除test测试数据库
  • 重新加载权限表

对新手来说,这个脚本是新手村任务,但很多人因为嫌麻烦直接跳过了。我的建议是:无论如何都要跑一遍。它解决的不只是安全问题,还会帮你确认root密码是否已经设置、权限表是否正常加载,相当于一次环境体检。

如果脚本运行时提示"root密码已设置"而你忘了密码,别慌,后面第4章有完整的找回方案。

3.4 验证基础连接

初始化完成后,用root登录验证:

mariadb -u root -p

输入密码后,能进入数据库命令行,说明部署成功。这时可以做几个基础查询,确认系统表和引擎状态正常:

SELECT VERSION(); SHOW ENGINES; SHOW DATABASES;

看到版本号、引擎列表和系统数据库(information_schema、mysql、performance_schema)都正常返回,这台服务器的数据库基础就算搭好了。

4. 安全配置实战:从root密码到远程访问的全套加固

热搜词里有一条"给mariadb root设置密码",这个需求太常见了。很多教程只会告诉你一个ALTER USER语句,但实际工作中,安全问题往往不是一条SQL能解决的。我把完整的安全加固流程整理在这里,照着做,比碎片化搜索强得多。

4.1 root密码的三种设置方式

方式一:通过安全脚本设置(最推荐)

install之后直接跑mysql_secure_installation,按提示设置密码即可。好处是顺带把匿名用户、测试库一并清理了。

方式二:命令行直接修改

mariadb -u root

进入命令行后执行:

ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_strong_password'; FLUSH PRIVILEGES;

FLUSH PRIVILEGES的目的是让权限修改立即生效,虽然ALTER USER本身会自动刷新,但习惯性执行一下更稳妥。

方式三:忘记root密码时的重置

这个情况更常见,特别是接手别人的服务器时。操作步骤如下:

  1. 停止数据库服务:
systemctl stop mariadb
  1. 使用跳过授权表的方式临时启动:
mysqld_safe --skip-grant-tables --skip-networking &

--skip-networking很关键,防止在无密码状态下被远程连接,这是安全底线。

  1. 无密码登录并修改密码:
mariadb -u root
FLUSH PRIVILEGES; ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_strong_password'; FLUSH PRIVILEGES;
  1. 重启服务:
systemctl restart mariadb

注意,mysqld_safe可能不在PATH里,如果提示命令不存在,用绝对路径或找一下二进制位置。我踩过一次坑:CentOS 8的MariaDB默认用systemd管理,直接调mysqld_safe会报权限错误,正确做法是先systemctl stop mariadb,再用su - mysql -s /bin/bash切换到mysql用户执行。

4.2 授权表里的"隐藏风险":匿名用户与空密码

跑完安全脚本后,建议再手动查一遍用户表,看有没有漏网之鱼:

SELECT User, Host, plugin, password FROM mysql.user;

正常情况应该只有root和mariadb.sys等系统账号。如果看到User为空的记录,说明存在匿名用户,删除:

DROP USER ''@'localhost'; DROP USER ''@'hostname';

空密码用户同理,检查password字段是否为空的非系统账号,一律清理。

4.3 远程访问配置:别直接给root开外网

生产业务大概率需要远程连接数据库,但给root开远程权限是最危险的操作之一。正确做法是创建业务专用账号,授权最小化。

创建用户的通用姿势:

CREATE USER 'app_user'@'192.168.1.%' IDENTIFIED BY 'secure_password'; GRANT SELECT, INSERT, UPDATE, DELETE ON app_db.* TO 'app_user'@'192.168.1.%'; FLUSH PRIVILEGES;

'192.168.1.%'表示只允许这个网段的机器连接,大幅缩小暴露面。如果业务跑在Kubernetes集群或云环境里,IP段经常变化,可以退而求其次用'%',但务必配合防火墙做IP白名单。

改完用户权限后,还需要确认MariaDB监听地址。默认配置下MariaDB只监听127.0.0.1,远程访问需要修改配置:

vim /etc/mysql/mariadb.conf.d/50-server.cnf

找到bind-address这一行,把127.0.0.1改为0.0.0.0,表示监听所有网卡:

bind-address = 0.0.0.0

改完重启服务:

systemctl restart mariadb

很多人在这一步卡住:用户建了、权限也授权了,远程还是连不上。原因就是bind-address默认值没有改。这属于"最容易忽略但影响最大"的细节。

4.4 防火墙与端口管理

确认MariaDB默认端口3306是否放行。CentOS 7/8用firewalld:

firewall-cmd --permanent --add-port=3306/tcp firewall-cmd --reload

Ubuntu用ufw:

ufw allow 3306/tcp

安全加固到这个程度,基本的服务器防护就到位了。但还有个细节得提:如果是云服务器,除了系统防火墙,还要去云控制台的安全组规则里放行端口。因为云平台的安全组是独立于操作系统防火墙的一道关卡,两处都得配好,否则怎么测都连不上。

5. 搭建过程中最常见的故障排查链路

这一章我从一线运维视角梳理一下"服务器装好但连不上"的完整排查思路。这类问题占了数据库服务器故障的一大半,按下面这个顺序查,基本不会走弯路。

5.1 连接失败排查:从端口到权限的逐步定位

当你执行mariadb -h <服务器IP> -P 3306 -u app_user -p之后报错,不要急着改配置。按这个顺序查:

第一层:网络连通性

ping <服务器IP> telnet <服务器IP> 3306

telnet能通说明端口可达,直接跳到第三层。如果telnet不通,看防火墙和服务监听状态:

ss -tlnp | grep 3306

看到类似0.0.0.0:3306的监听记录,说明服务在监听。如果只有127.0.0.1:3306,那就是bind-address没改。

第二层:防火墙拦截

iptables -L -n | grep 3306 firewall-cmd --list-all

云服务器用户记得检查安全组,这一步经常被忽略。

第三层:账号权限与主机匹配

如果端口通、防火墙放行,但客户端报Access denied,那就是授权问题。确认:账号是否存在?Host是否匹配客户端来源IP?密码是否正确?认证插件是否兼容?

第四层:认证插件不兼容

报错信息如果你看到Authentication plugin 'caching_sha2_password' cannot be loaded,说明客户端驱动太老,而服务端要求新认证。MariaDB一般不默认用这个插件,但如果你的库是从MySQL 8.0迁移来的,可能出现插件残留。用下面的方式处理:

ALTER USER 'app_user'@'%' IDENTIFIED VIA mysql_native_password USING PASSWORD('your_password');

5.2 忘记密码的完整恢复流程

这个在4.1节已经写了操作步骤,但我想再说一个真实遇到的场景:有一次帮客户处理一台Windows Server上的MariaDB服务器,systemctl命令根本不存在,因为Windows下用服务方式管理。Windows环境重置密码的方式略有不同,需要用mysql_install_db.exe或者手动跳过授权表:

mysqld --skip-grant-tables --skip-networking --console

然后新开一个命令行窗口执行密码修改。Windows下的坑是mysqld进程要以管理员身份运行,否则数据目录权限不够,启动会直接失败。

5.3 数据目录损坏的应急处理

服务器突然断电、磁盘满了,都可能造成数据文件损坏。MariaDB有崩溃恢复机制,正常情况下启动时会自动回滚未完成的事务。但如果损害严重,启动报错如Table './db/table' is marked as crashed and should be repaired,可以尝试:

mariadb-check --repair --databases db_name

更严重的情况需要启用InnoDB的强制恢复参数,在配置文件[mysqld]区域加:

innodb_force_recovery = 1

从1开始尝试,依次递增到6,每次尝试启动一次,能启动就立即导出数据备份。强推恢复模式启动后不要做任何写操作,只做备份,因为此时的引擎处于不完全状态,一旦写入可能造成二次损坏。备完数据后马上改回0并重启。

6. 系统服务与日常维护:让MariaDB稳稳跑下去

搭建好服务器只是开始,运维才是长期工作。这部分讲几个我每天都会用到的维护技巧,都是实打实的经验。

6.1 systemd服务管理与开机自启的细节

用systemd管理MariaDB非常方便,常用命令:

systemctl start mariadb # 启动 systemctl stop mariadb # 停止 systemctl restart mariadb # 重启 systemctl reload mariadb # 重载配置(不中断连接) systemctl enable mariadb # 开机自启

我特别想提一下reload和restart的区别。reload只是重新读取配置文件,对已有连接影响极小;restart是彻底重启服务,所有连接都会断开。日常改配置优先用reload,需要加载新引擎或解决异常状态才用restart。

6.2 日志系统:错误日志、慢查询日志与通用日志

MariaDB的日志是排查问题的重要抓手,先看配置:

[mysqld] log_error = /var/log/mysql/error.log slow_query_log = 1 slow_query_log_file = /var/log/mysql/mariadb-slow.log long_query_time = 2

关键参数说明:

  • log_error:错误日志,MySQL和MariaDB启动失败、数据损坏、磁盘满等严重问题都会记录在这里,排查问题的第一入口。
  • slow_query_log:慢查询日志,记录执行时间超过long_query_time秒的SQL,是性能优化的源头数据。
  • general_log:通用查询日志,默认关闭。开启后记录所有SQL语句,影响性能,只在调试时临时开。

查看慢查询的典型方法:

tail -f /var/log/mysql/mariadb-slow.log

分析慢查询日志里最常见的SQL模式,用EXPLAIN看执行计划,性能问题就能定位到八九成。

6.3 数据备份策略:不备份等于没运维

备份这事我一直强调:"备份不是技术问题,是习惯问题。"很多小团队等到数据丢了才想起备份,那时基本晚了。

MariaDB最常用的备份方案分两种:

逻辑备份(mysqldump),适合中小库,可读性好,恢复灵活:

mysqldump -u root -p --single-transaction --routines --triggers --all-databases > /backup/all_databases_$(date +%F).sql

--single-transaction参数很关键,它基于InnoDB的MVCC机制做一致性快照,备份过程中不影响线上写入,不需要锁表。

物理备份(MariaDB Backup),适合大库,速度快,恢复简单:

mariabackup --backup --target-dir=/backup/mariadb_full/ --user=root --password=******

恢复流程也简单:

mariabackup --prepare --target-dir=/backup/mariadb_full/ mariabackup --copy-back --target-dir=/backup/mariadb_full/

我自己的备份纪律如下:每天凌晨做一次全量备份,保留7天;每6小时做一次增量binlog备份,保留3天。这个节奏对大多中小业务够用了。自动化用crontab:

0 2 * * * mysqldump -u root -p密码 --single-transaction --all-databases | gzip > /backup/db_$(date +\%F).sql.gz

还有一点要叮嘱:备份文件必须异地保存。把备份放到另外一台机器或者对象存储里,否则服务器硬盘坏了,备份和数据一起没,哭都来不及。

7. 性能调优:按实际业务调整的关键参数

MariaDB装好默认配置能跑,但跑得稳不稳、快不快,完全取决于调优水平。我调过几十台服务器,总结出几个影响面最大的参数。

7.1 内存类参数:缓冲池是最直接的加速器

InnoDB缓冲池(innodb_buffer_pool_size)是数据库的"内存数据仓库",读取数据时优先从缓冲池里找,命中率直接决定查询速度。设置经验值:物理内存的60%到70%,但不能超过总内存减去其他进程开销。

假设服务器16GB内存,可以这样设置:

[mysqld] innodb_buffer_pool_size = 10G

设太大反而引发内存交换(swap),导致性能雪崩。改完配置后,通过以下SQL验证效果:

SHOW STATUS LIKE 'Innodb_buffer_pool_read%';

如果Innodb_buffer_pool_read_requests远大于Innodb_buffer_pool_reads,说明命中率高,配置合理。

7.2 连接数与大表优化

max_connections默认是151,对并发较大的业务来说可能不够。设太高又会造成资源浪费,经验公式:每个连接大约占用1MB到2MB内存,按服务器内存总量来反推。

max_connections = 300

同时看thread_cache_size,这个参数控制线程复用的缓存数量,调高可以显著减少线程频繁创建的开销:

thread_cache_size = 64

大表场景下,临时表大小也是常见瓶颈。很多人遇到"临时表满了"的错误,可以调整:

tmp_table_size = 64M max_heap_table_size = 64M

MySQL和MariaDB的临时表既可能是内存表也可能是磁盘表,上行两个参数配合调整,能有效避免排序过多时频繁落盘。

7.3 慢查询分析与索引优化实战

慢查询日志里如果发现某条SQL反复出现,基本就是索引没建对。用EXPLAIN查看执行计划:

EXPLAIN SELECT * FROM orders WHERE user_id = 12345 AND status = 'PAID';

关注type字段,如果是ALL,说明是全表扫描,必须优化。最直接的优化就是建联合索引:

ALTER TABLE orders ADD INDEX idx_user_status (user_id, status);

索引不是越多越好,每次写操作都要维护索引,索引过多反而拖慢写入速度。我的原则是:只给高频查询条件建索引,一个表最多5到6个索引。

7.4 事前防患:认识连接数打满的危害

连接数打满是最常见的生产事故类型之一。现象是应用报"Too many connections",表现是数据库卡死,服务不可用。此时系统还是会保留2个额外连接给超级管理员(super权限),方便你登录排查。用root登录后立刻看:

SHOW PROCESSLIST;

大部分情况是很多连接处于Sleep状态,说明应用连接池有泄漏或者空闲连接没回收。短平快的处理是调大max_connections,但根本上要优化应用连接池的配置,否则只是推迟问题爆发的时间。

8. 备份恢复演练:一次真实的数据救回过程

讲一个我实际经历的事。有一台业务服务器装着MariaDB 10.5,存了几年的订单数据,某个周末同事跑了个错误的批量更新脚本,把一张核心表的数据状态全部改错了。当时我的备份策略虽然存在,但恢复流程没演练过,说实话心里也没底。

当时的处理过程是这样的:

第一步,止损。立刻停止应用服务,防止继续写入导致问题扩大。

第二步,定位可恢复的时间点。因为binlog一直开着,我可以把数据恢复到出问题前的某一刻。先查看binlog列表:

ls -lt /var/log/mysql/

找到出问题时间点之前的binlog文件。

第三步,用全量备份恢复基础数据。把近期的mysqldump备份导入:

mysql -u root -p < /backup/all_databases_上周日.sql

第四步,用binlog追加上周日至出问题前的数据变更。先找到两个时间点之间的binglog,转成SQL:

mysqlbinlog --start-datetime="2024-11-10 02:00:00" --stop-datetime="2024-11-16 14:30:00" /var/log/mysql/mariadb-bin.000023 > recover.sql

第五步,将恢复SQL导入:

mysql -u root -p < recover.sql

整个流程走完,数据恢复到了出问题前几分钟的状态,丢失的只是错误脚本执行后的那些变更。

这个案例想说明几点:备份必须有,binlog必须开,恢复流程必须事先演练过。尤其最后一点,很多人备份做得勤,但没有真正演练过恢复,关键时刻手忙脚乱。我现在每季度会做一次完整的恢复演练,恢复出来的数据校验无误后再删掉,成本很低,但给人的底气和保险完全不一样。

如果一个服务器连binlog都没开,恢复只能停留在"全量备份那一刻",中间的变故全部丢失。检查binlog是否开启:

SHOW VARIABLES LIKE 'log_bin';

如果结果是OFF,在配置文件[mysqld]区域加:

log_bin = /var/log/mysql/mariadb-bin server_id = 1

重启服务生效。binlog还能用来做主从复制,价值很大。

9. 写给第一次搭MariaDB服务器的人

最后分享一些个人经验,不谈高深理论,只讲实操中反复验证过的心得。

第一,版本选择要按长期维护版本走。MariaDB 10.6和10.11都是维护周期较长的版本,适合生产环境;新功能尝鲜版本(比如11.x)除非你有明确需求,否则别在核心业务上用。稳定永远比新特性值钱。

第二,服务器系统的时区和时间同步也会影响数据库。如果服务器时间不对,事务时间戳、定时任务、日志排查全部错乱,而且主从复制还会因此出现莫名其妙的同步延迟。检查时区:

timedatectl set-timezone Asia/Shanghai

启用NTP同步:

timedatectl set-ntp yes

第三,磁盘满是一票否决型故障。数据库数据目录所在分区写满,服务会直接异常甚至启动不了。我的预防方法是定时监控:

df -h /var/lib/mysql

配合告警阈值90%就该清理或扩容了。

第四,不要随手关掉慢查询日志。有些运维觉得慢查询日志占磁盘,就把它关了。但慢查询日志是性能优化最直观的证据来源,开着它、定期分析,能帮你发现很多隐患。磁盘不够可以设置轮转,别一关了之。

第五,任何时候改完配置,先reload再观察,不要直接restart。reload可以在不中断业务的情况下让配置生效,只有配置语法有严重错误时reload才会失败,这时再决定是否restart。

MariaDB这东西,真正摸熟了你会发现它没什么神秘的,就是一套很扎实的数据库软件。但扎实建立在细节之上:密码怎么设、权限怎么收、参数怎么调、备份怎么做、故障怎么查,每一个环节都是经验堆出来的。希望这篇搭建实录能让你少走几个弯路。你在部署过程中如果遇到什么奇怪的问题评论区丢出来,我尽力帮你分析。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询