搬家与换域名
搬家分三种情况:换了域名、域名不变、只换数据库账号密码。先对号入座,再照着做完,站点就能起来。
本页目录(12 分钟读完)
先看清你是哪一种,别全篇照做。
出错 → 看 排错手册。
先看你哪一种#
| 你是哪种 | 典型场景 | 要改什么 | 看哪节 |
|---|---|---|---|
| A. 换了域名 | zz.zx15.com → cc.zx15.com | 数据库连接 + 域名配置 | 「情况 A」 |
| B. 域名不变 | 换服务器、换机房、换 IP | 只改数据库连接 | 「情况 B」 |
| C. 只换数据库账号密码 | 改了 MySQL 密码、换了独立账号 | 只改数据库连接那三行 | 「情况 C」 |
三种情况都要先做下面两步:备份、搬文件。
三种情况都要做:备份#
- 进旧服务器站点目录
- 复制下面两行
- 依次执行
mysqldump -u 用户 -p 库名 --single-transaction --quick > db.sql
tar czf site.tar.gz --exclude=runtime/cache --exclude=runtime/log --exclude=runtime/compile .看不到 secret.key? → 先执行 ls -l data/secret.key,没有就别往下走。
三种情况都要做:搬文件#
| 带什么 | 在哪 | 丢了会怎样 |
|---|---|---|
secret.key | data/ | 加密数据全解不开 |
database.config.php | data/ | 连不上库(可重建) |
| 上传的附件 | runtime/upload/ | 图片全裂 |
| 数据库 | 上面导出的 db.sql | 内容全没 |
| 你自己的主题 | view/ | 页面退回默认样式 |
不用带:runtime/cache/、runtime/log/、runtime/compile/(会自动重建)。
在新服务器还原:
cd /www/wwwroot/example.com
tar xzf site.tar.gz -C .
mysql -u 用户 -p 新库名 < db.sql
chown -R www:www .
find . -type d -exec chmod 755 {} \;
find . -type f -exec chmod 644 {} \;
chmod -R 775 runtime data搬完往下看,按你的情况挑一节做。
情况 A:换了域名#
适用:域名换了,比如老域名不用了,改用新域名。
A-1 改数据库连接#
只改 data/database.config.php 这一个文件。
写法看这一章靠后的「怎么改数据库连接」。
A-2 改域名配置#
改这个文件:data/site.config.php
vi data/site.config.php全文改成下面这样(把 cc.zx15.com 换成你的新域名):
<?php
/**
* aucms - 站点配置
*
* app.url ------- 固定站点域名,所有链接以它为准
* trusted_hosts - 主机白名单(新域名必须写在这里)
* cache.prefix -- 缓存键前缀(同机多站必须各不相同)
*/
return array(
'app' => array(
'url' => 'https://cc.zx15.com',
),
'cache' => array(
'prefix' => 'cczx15com:',
),
'security' => array(
'trusted_hosts' => array(
'cc.zx15.com',
),
),
);| 这一行 | 作用 | 改错了会怎样 |
|---|---|---|
app.url | 规范域名。sitemap、canonical、分页、邮件里的链接全用它 | 站内链接还指向旧域名 |
trusted_hosts | 允许哪些域名访问本站 | 漏了新域名 → 自己把自己 403 挡在外面 |
cache.prefix | 缓存键的名字前缀 | 同机两个站重名 → 缓存串站 |
⚠️ 最大的坑:新域名必须写进 trusted_hosts#
系统只在 trusted_hosts 为空时,才自动把 app.url 的域名加进去。
你一旦手动写了白名单,它就不再自动补:
app.url = https://cc.zx15.com
trusted_hosts = ['zz.zx15.com'] ← 忘了加新域名
→ 用 https://cc.zx15.com 访问 = 403「非法的访问域名」换域名后,新域名一定也要写进白名单里。
A-3 让旧域名跳到新域名#
白名单里删掉旧域名,访问它会直接 403,搜索引擎收录的老链接会全部失效。
正确做法是在 nginx 层做 301:
server {
listen 80;
server_name zz.zx15.com www.zz.zx15.com;
return 301 https://cc.zx15.com$request_uri;
}贴进 Nginx 站点配置 → 保存 → 重载。
跳转后传到 PHP 的已经是新域名,所以不需要把旧域名加回白名单。
老域名不要了?跳过这一步就行。
A-4 清掉正文里的旧域名#
文章正文里如果存过完整的旧域名链接(图片、附件),换域名后它们还会指向旧站。
先查有多少:
mysql -u 用户 -p -e "SELECT id, title FROM aucms_content WHERE content LIKE '%zz.zx15.com%'" 库名有结果就批量替换(先备份):
mysqldump -u 用户 -p 库名 > before-replace.sql
mysql -u 用户 -p -e "UPDATE aucms_content SET content = REPLACE(content, 'https://zz.zx15.com', 'https://cc.zx15.com')" 库名A-5 收尾#
- DNS 把新域名解析到新服务器 IP
- 清缓存 → 看 缓存怎么清、缓存名怎么改
- 做完再去刷「搬完怎么验收」
情况 B:域名不变#
适用:换了服务器、机房、IP,但域名还是原来那个。
B-1 改数据库连接#
只改 data/database.config.php。
写法看这一章靠后的「怎么改数据库连接」。
例外:新服务器的库名、账号、密码跟旧服务器完全一样 → 不用改, 直接从 B-2 开始。
B-2 不用动域名配置#
data/site.config.php 一个字都不用改。
域名没变,app.url / trusted_hosts 就都还是对的。B-3 只有这一种情况要改缓存名#
新服务器上跑了多个站、共用一个 Redis 时才需要:
| 条件 | 要不要改 |
|---|---|
| 新服务器只跑这一个站 | 不用改 |
| 新服务器跑多个站,各用各的 Redis | 不用改 |
| 新服务器跑多个站,共用一个 Redis | 改,每个站一个名字 |
怎么改 → 看 怎么改缓存名
B-4 切解析 + 收尾#
- DNS 把域名解析改到新服务器 IP
- 等解析生效(
ping 你的域名,看 IP 是不是新的) - 清缓存 → 看 缓存怎么清、缓存名怎么改
- 做完再去刷「搬完怎么验收」
情况 C:只换数据库账号密码#
适用:服务器没动,只是改了 MySQL 密码、或换了个数据库账号。
C-1 只改这一个文件#
vi data/database.config.php只改这三行,别的都不动:
'database' => '你的库名',
'username' => '你的账号',
'password' => '你的新密码',C-2 验证#
php aucms db:check看到 "连接 成功" 就对了。
C-3 清缓存#
php aucms cache:clearC-4 其他都不用动#
| 文件 | 要不要改 |
|---|---|
data/site.config.php | 不用(域名没变) |
config/database.php | 不用(会被覆盖) |
| 域名解析 | 不用 |
| Nginx 配置 | 不用 |
怎么改数据库连接#
只改这一个文件:data/database.config.php
用 MySQL 的话,全文改成下面这样(把中文替换成你的):
<?php
return array(
'default' => 'mysql',
'prefix' => 'aucms_',
'connections' => array(
'mysql' => array(
'driver' => 'mysql',
'write' => array(
'host' => '127.0.0.1',
'port' => 3306,
'database' => '你的库名',
'username' => '你的账号',
'password' => '你的密码',
'charset' => 'utf8mb4',
),
),
),
);用 SQLite(不用装数据库)的话:
<?php
return array(
'default' => 'sqlite',
'prefix' => 'aucms_',
'connections' => array(
'sqlite' => array(
'driver' => 'sqlite',
'write' => array('database' => 'data/aucms.db'),
),
),
);改完必跑(看到 "连接 成功" 才继续):
php aucms db:check⚠️ 两个必踩的坑#
坑 1:别只改 config/database.php
config/database.php 是参考模板(写着所有选项的说明)。
只要 data/database.config.php 存在,它就会覆盖前者。
你在 config 里改半天密码,一点用都没有。
想只留一个配置文件?把 data/database.config.php 删掉(先备份),
再改 config/database.php。
坑 2:prefix(表前缀)必须跟库里一致
prefix 写成 'nova_',库里表名却是 'aucms_content'
→ 报 "表不存在"不确定前缀是什么?去库里看一眼表名:
mysql -u 用户 -p -e "SHOW TABLES" 库名 | head -5搬完怎么验收#
全部 200 才算通。
BASE=https://你的域名
for u in / /list/news /article/1.html /sitemap.xml /robots.txt /admin/login; do
printf "%-30s %s\n" "$u" "$(curl -s -o /dev/null -w '%{http_code}' $BASE$u)"
done再看这四样:
| 检查 | 怎么看 |
|---|---|
| 链接是新的(情况 A) | 随便打开一篇文章,看地址栏 |
| 图片没裂 | 首页和详情页刷一遍 |
| 后台能存 | 后台改个站名,保存,刷新看还在不在 |
| 密钥在 | ls -l data/secret.key |
对不上? → 看 排错手册
最容易翻车的 5 个点#
| 症状 | 原因 |
|---|---|
| 登录不上、数据乱码 | data/secret.key 没带过来 |
| 改了密码还是连不上库 | 只改了 config/database.php,没改 data/database.config.php |
| 报"表不存在" | prefix 表前缀跟库里不一致 |
| 清完缓存整页 500 | root 跑了 cache:rebuild,没 chown 回来 |
| 新域名 403 | trusted_hosts 里漏了新域名 |
server_debug.php 复现一次,页面会直接告诉你异常文件与行号。