typecho设置远程连接mariadb数据库
将 Typecho 网站与局域网内的独立 MariaDB 服务器连接,是一种非常标准的动静分离/前后端分离架构。这能有效减轻 Web 服务器的压力,提升博客的并发性能。
既然你刚才已经打通了 MariaDB 的局域网 IP 访问,现在要把这两台服务器(A 机器:Typecho 网页服务器,B 机器:MariaDB 数据库服务器)彻底揉合在一起,请按照以下两端的标准步骤进行配置:
一、 数据库服务器端配置(MariaDB 所在的 B 机器)
必须确保数据库愿意接收来自 Typecho 服务器的连接,并且没有被防火墙挡住。
- 检查网卡绑定(上一步已完成可跳过)
确保 /etc/my.cnf 或 /etc/my.cnf.d/server.cnf 中的 [mysqld] 块下写的是:
Ini, TOML
bind-address = 0.0.0.0
修改后记得 systemctl restart mariadb。
- 精准精准授权(安全规范)
登录 B 机器的 MariaDB,为 Typecho 创建专属的数据库用户,并限制该用户只能由 A 机器(Typecho 服务器)的局域网 IP 登录:
SQL
-- 1. 登录数据库
mariadb -u root -p
-- 2. 给 Typecho 分配权限(请用实际的“Typecho服务器的局域网IP”替换下面的 192.168.1.50)
GRANT ALL PRIVILEGES ON 你的Typecho数据库名.* TO 'typecho_user'@'192.168.1.50' IDENTIFIED BY '你的强密码';
-- 3. 刷新权限
FLUSH PRIVILEGES;
EXIT;
- 防火墙放行
确保 B 机器放行了 3306 端口:
Bash
firewall-cmd --zone=public --add-port=3306/tcp --permanent
firewall-cmd --reload
二、 Typecho 服务器端配置(网页所在的 A 机器)
现在,我们需要让 Typecho 顺着局域网网线找到 B 机器。
- 连通性肉搏测试(避坑神技)
在 A 机器(Typecho 服务器)的终端里,先不要急着改代码,运行以下命令测试能否隔空摸到 B 机器的数据库端口:
Bash
curl -v telnet://192.168.1.100:3306 # 请将 192.168.1.100 换成 MariaDB 服务器的局域网 IP
如果屏幕提示 Connected to ...,说明局域网通路100% 完美连通。
如果提示 Connection timed out 或 Refused,说明 B 机器的防火墙没开,或者 bind-address 没改对。
- 修改 Typecho 配置文件
登录 A 机器,打开 Typecho 根目录下的 config.inc.php,找到 $db->addConfig 所在的代码块,将其修改为局域网内的连接参数:
PHP
$db = new Typecho_Db('Mysql', 'typecho_');
$db->addConfig(array (
'host' => '192.168.1.100', // 🚨 极其重要:填入 MariaDB 服务器的局域网固定 IP(不能写 localhost!)
'port' => '3306', // MariaDB 局域网网络端口
'user' => 'typecho_user', // 你在第一步中为 Typecho 创建的数据库用户名
'password' => '你的强密码', // 该用户的密码
'charset' => 'utf8mb4',
'database' => '你的Typecho数据库名', // 远程服务器上的数据库名称
'engine' => 'InnoDB',
), Typecho_Db::READ | Typecho_Db::WRITE);
Typecho_Db::set($db);
保存并退出。此时,刷新你的 Typecho 博客主页,所有的文章和数据就会开始通过局域网内网飞速向 MariaDB 服务器进行读写交互了!