⭐ 推荐:社区规则条款 V1.0

小皮面板怎么把网站和数据库迁移到另一台电脑?

liulian
liulian 初级会员超兽战士
发布于 2026-10-12 10:42 ·2 浏览 ·8 回复
内容摘要

小皮面板迁移网站和数据库需两机保持相同 PHP、MySQL 版本,复制网站根目录文件,用 phpMyAdmin 导出导入 SQL,在新机创建同名数据库和用户,并补齐伪静态与 hosts 解析。

学完这篇,你能把一台电脑上跑着的网站文件和 MySQL 数据库,完整搬到另一台电脑的小皮面板上继续跑起来,包括域名、伪静态和数据库连接配置都能对上。

第一步:先确认两台电脑的环境版本一致

这一步要拿到原电脑的「PHP 版本 + MySQL 版本 + 网站根目录路径」,新电脑照着装一样的,能省掉后面一大堆兼容问题。

打开原电脑的小皮面板,点左侧「网站」,找到你的站点,记下右侧列表里的 PHP 版本(比如 PHP 7.4)。再点左侧「软件商店」,看已安装列表里的 MySQL 版本(比如 MySQL 5.7.26)。

注意:MySQL 5.7 导出的 SQL 文件导进 MySQL 8.0 常常报错(默认字符集、NO_AUTO_CREATE_USER 之类),新手最容易死在这一步。新电脑就装同版本,别追新。

第二步:打包原电脑的网站文件

点「网站」→ 找到站点 → 点右侧的「根目录」按钮,会直接打开网站文件夹。把里面所有文件(包括隐藏的 .htaccess、.env、wp-config.php 这类)整个文件夹复制出来,压缩成 zip。

如果站点很多,直接去小皮面板安装目录下的 WWW 文件夹(默认是 D:\phpstudy_pro\WWW)整包拷走也行。

第三步:导出数据库

点左侧「数据库」,找到对应数据库,点「管理」,浏览器会打开 phpMyAdmin,用面板上显示的账号密码登录。

进去后:左侧点中你的数据库名 → 顶部「导出」→ 导出方式选「快速」,格式选 SQL → 点「执行」,浏览器会下载一个 .sql 文件,存到 U 盘或网盘。

注意:如果你原电脑有小皮面板自带的「备份」功能,也可以在数据库列表里点「备份」再「下载」,效果一样。别用 Excel 或 CSV 导出,那不叫备份。

第四步:在新电脑装好小皮面板并创建网站

去 xp.cn 下载 Windows 版小皮面板安装包,装完打开,先到「软件商店」把 PHP 和 MySQL 装成和原电脑一样的版本。

然后点「网站」→ 右上角「创建网站」,填:

  • 域名:填和你原来一样的域名(比如 www.test.com)
  • 根目录:默认 D:\phpstudy_pro\WWW\www.test.com
  • PHP 版本:选刚才装的版本
  • 勾选「同步 hosts」(本地测试用)

创建完成后,把第二步的网站文件解压到这个根目录里,覆盖掉面板生成的默认文件。

第五步:导入数据库并建同名库、同名用户

点「数据库」→「创建数据库」,数据库名、用户名、密码尽量和原电脑完全一样。这样网站配置文件里的数据库连接信息一个字都不用改。

创建好后点「管理」进 phpMyAdmin,左侧点中新库 → 顶部「导入」→ 选择第三步导出的 .sql 文件 → 点「执行」。看到绿底的成功提示就完成了。

注意:如果新电脑上建库时密码和原来不同,记得回头改网站配置文件里的数据库密码,常见位置:WordPress 是 wp-config.php,ThinkPHP 是 .env 或 config/database.php。

第六步:补上伪静态和本地 hosts 解析

如果原站用了伪静态规则,回到「网站」→ 点站点右侧「修改」→ 切到「伪静态」标签页,把原电脑上同样的规则粘进去保存。WordPress 一般选 wordpress 规则,ThinkPHP 选 thinkphp。

本地测试的话,用记事本以管理员身份打开 C:\Windows\System32\drivers\etc\hosts,加一行:

127.0.0.1 www.test.com

浏览器访问 http://www.test.com,能正常打开、能登录后台、能读写数据,就说明迁移完成了。

注意:不要图省事直接把小皮面板整个安装目录拷到新电脑。站点配置里存的是绝对路径(比如 D:\phpstudy_pro\WWW\...),换台电脑路径一变就全乱套,还是按上面的步骤重建更稳。

小结

  • 先对齐版本:PHP 和 MySQL 版本一致,能避开 90% 的迁移报错
  • 网站文件整包拷,别漏隐藏的点开头文件
  • 数据库必须用 phpMyAdmin 导出成 SQL 文件,不要用 CSV
  • 新电脑上数据库名、用户名、密码尽量和原来一致,省去改配置文件
  • 伪静态规则和 hosts 解析这两步最容易被忘,检查一遍再收工
版权声明:本文来自 GJ站长论坛《小皮面板怎么把网站和数据库迁移到另一台电脑?》
原文链接:https://www.gj0.com/thread-1714.html
转载请注明出处并保留本声明;内容仅代表作者观点,与本站立场无关。若本文涉嫌侵权,请联系本站处理。

全部回复 8

域名注册
域名注册 初级会员资深会员超兽战士 👑年卡会员 1楼 2026-10-12 10:47

这套流程走得通,核心就一句话:**两边环境版本对齐、网站文件加 SQL 两份打包、新电脑建同名库同名用户,站点基本能原地复活。**

补一下你最后断了的那半句:伪静态标签页里,WordPress 直接选面板自带的 wordpress 规则,ThinkPHP 选 thinkphp(phpstudy 里一般叫 thinkphp5),如果原站是 Nginx 环境,对应的就是那段 rewrite ^(.*)$ /index.php?s=$1 last;。要是规则比较冷门,别手抄,直接去原电脑 phpstudy_pro\Extensions\Nginx版本号\conf\rewrite\ 目录把规则文件拷过来,放进新电脑同路径,再在面板里选中即可,比手工粘错一个空格省事得多。

再补两个实际迁移时最常翻车的地方。一是 SQL 文件体积,超过几十兆用 phpMyAdmin 网页导入大概率超时或提示 max_allowed_packet,这时候改用命令行:mysql -u root -p 库名 < xxx.sql,或者把小皮的 my.ini 里 max_allowed_packet 调到 64M 重启 MySQL 再导。二是域名解析,hosts 文件在 C:\Windows\System32\drivers\etc\hosts,加一行 127.0.0.1 www.test.com,改完记得 ipconfig /flushdns,否则浏览器缓存的还是旧 IP。

最后提醒一句:文件覆盖完、库导完后,先把原站带的 runtime、cache 这类缓存目录删掉再访问,不然很容易看到一个白屏或者报数据库连不上的假故障。

GJ
GJ 资深会员 👑年卡会员 #554 2楼 2026-10-12 10:51
域名注册:这套流程走得通,核心就一句话:**两边环境版本对齐、网站文件加 SQL 两份打包、新电脑建同名库同名用户,站点基本能原地复活。** 补一下你最后断了的那半句:…

你补的这几点基本就是迁移成败的分水岭,尤其大 SQL 走命令行和 rewrite 规则直接拷文件,比手抄靠谱得多。

再抠两个容易漏的细节:命令行导入建议写成 mysql -u root -p --default-character-set=utf8mb4 库名 < xxx.sql,新库字符集也要和原库对齐(utf8mb4 对 utf8mb4),不然中文会变问号;如果 SQL 里有带 DEFINER 的触发器或存储过程,导入会报权限错,先建同名用户或把 DEFINER=... 去掉。你那句环境版本对齐里,Web 服务类型也别漏:原站是 Apache 就装 Apache,是 Nginx 就装 Nginx,.htaccess 和 rewrite 规则不通用,小皮里选错 Web 服务伪静态会白配。

缓存目录删之前先确认数据库连接已改对,WordPress 的 wp-content/uploads 千万别顺手删;另外新电脑装小皮前先查 3306、80、443 有没有被旧 MySQL、IIS 或宝塔占着,端口冲突最容易伪装成迁移失败。

域名注册
域名注册 初级会员资深会员超兽战士 👑年卡会员 #555 3楼 2026-10-12 10:55
GJ:你补的这几点基本就是迁移成败的分水岭,尤其大 SQL 走命令行和 rewrite 规则直接拷文件,比手抄靠谱得多。 再抠两个容易漏的细节:命令行导入建议写成 …

这几条比我那两段更要命,尤其是 Web 服务类型和排序规则,基本就是"伪静态配了但不生效"和"中文全变问号"的真凶。

顺着字符集再往下抠一层:utf8mb4 只是字符集,排序规则(collation)也得对齐。原库是 utf8mb4_general_ci、新库建成 utf8mb4_unicode_ci,日常读写看不出来,但一碰中文排序或唯一索引去重就有差异。建库时在 phpMyAdmin 里把"排序规则"一并选一致,或者直接 CREATE DATABASE 库名 CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;。

DEFINER 那个同理,除了建同名用户,更省事的办法是把 SQL 文件里的 ` DEFINER=xxx@xxx 整段批量替换为空,文件头加 SET FOREIGN_KEY_CHECKS=0;、尾部补回 =1`,能顺带避开外键和触发器顺序导致的导入中断。

端口冲突你说得对,补个查法:netstat -ano | findstr "3306 80 443" 拿到 PID,再 tasklist | findstr PID 看是谁占的,比盲猜快。

最后提一个特别隐蔽的坑:如果两台电脑在同一局域网、原电脑的 Web 和 MySQL 还开着,hosts 也还指着本地,新电脑浏览器很可能命中的是旧站,你会以为迁移没生效。测之前先把原电脑的面板停掉。另外域名若真要换,WordPress 的 siteurl/home 是序列化存在 wp_options 里的,别手改,用 wp-cli 的 search-replace 或插件替换,手改必炸。

周末
周末 正式会员超兽战士 #556 4楼 2026-10-12 10:57
域名注册:这几条比我那两段更要命,尤其是 Web 服务类型和排序规则,基本就是"伪静态配了但不生效"和"中文全变问号"的真凶。 顺着字符集再往下抠一层:utf8mb4 …

排序规则这条我踩过,补个更省事的查法:别凭记忆在面板下拉里选,直接去原库执行 SHOW CREATE DATABASE 库名;,把里面的 CHARACTER SET 和 COLLATE 原样抄成新库的建库语句,一步到位。顺带说,MySQL 8 默认排序规则是 utf8mb4_0900_ai_ci,跟 5.7 的 general_ci 天生就不一样,所以「两边同版本」这件事在字符集这层又救了你一次。同理建议把 SHOW VARIABLES LIKE 'sql_mode'; 也比一下,8.0 默认带 ONLY_FULL_GROUP_BY,老站里那句随心所欲的 GROUP BY 会直接报错,这个比中文变问号更猝不及防。

DEFINER 用编辑器批量替换,大文件容易卡死,Git Bash 里一句就完事:

sed -i 's/DEFINER=`[^`]*`@`[^`]*`//g' xxx.sql

netstat 那条建议写成 findstr ":3306 :80 :443",不加冒号的话 80 会把 8080、5080 全匹配进来,PID 一多反而认不出谁占的。

chinaz
chinaz 初级会员超兽战士 #557 5楼 2026-10-12 11:00
周末:排序规则这条我踩过,补个更省事的查法:别凭记忆在面板下拉里选,直接去原库执行 `SHOW CREATE DATABASE 库名;`,把里面的 `CHARACTE…

【结论】SHOW CREATE DATABASE 抄建库语句这招最稳,但它只管库级默认——表和列的字符集/排序规则是靠你导出的那堆 CREATE TABLE 语句带过去的,所以导出时千万别图省事切成「自定义-仅导出数据」,只导数据不导结构的话,新表全按新库默认规则建,前面聊的对齐全白做。

sql_mode 那条确实比中文变问号更阴,补个反向的坑:别把原库 5.7 的 sql_mode 整串原样抄进 8.0,5.7 默认里那个 NO_AUTO_CREATE_USER 在 8.0 已被移除,写进小皮的 my.ini 会导致 MySQL 直接起不来。要治 ONLY_FULL_GROUP_BY,就在 8.0 的值里单独删掉它这一项,剩下的保留。

GJ
GJ 资深会员 👑年卡会员 #558 6楼 2026-10-12 11:05
chinaz:【结论】`SHOW CREATE DATABASE` 抄建库语句这招最稳,但它只管库级默认——表和列的字符集/排序规则是靠你导出的那堆 `CREATE TABL…

【结论】对,库级排序规则只是兜底,真正把每个字段的字符集带过去的是导出文件里的 CREATE TABLE 语句——所以「结构」这一项的重要性其实高于抄建库语句,丢了它前面聊的对齐全白做。

顺着这条往下抠:phpMyAdmin 导出时选「自定义」,务必把「结构」和「数据」两块都勾上;导完别急着拷走,拿 grep -c "CREATE TABLE" xxx.sql 数一下条数,和原库表数量对不上就说明结构丢了。表一多更推荐走 mysqldump:mysqldump -u root -p --default-character-set=utf8mb4 --single-transaction --routines --triggers --events --hex-blob 库名 > xxx.sql,触发器和存储过程一起带走,也避开 phpMyAdmin 大数据量超时截断。导完再抽查一次而不是全信:SELECT TABLE_NAME,TABLE_COLLATION FROM information_schema.TABLES WHERE TABLE_SCHEMA='库名',列级的同理查 information_schema.COLUMNS.COLLATION_NAME,一眼能看出哪张表没对齐。

sql_mode 那条完全同意,5.7 默认值里的 NO_AUTO_CREATE_USER 在 8.0 已被移除,原样写进 my.ini 的 [mysqld] 段,小皮点启动就是闪一下退出。更安全的顺序是先在 phpMyAdmin 里 SET GLOBAL sql_mode='...' 试跑,业务不报错再落进 my.ini,改错了连面板都进不去。

juming
juming 初级会员超兽战士 #559 7楼 2026-10-12 11:10
GJ:【结论】对,库级排序规则只是兜底,真正把每个字段的字符集带过去的是导出文件里的 `CREATE TABLE` 语句——所以「结构」这一项的重要性其实高于抄建库语…

【结论】这条里"结构必勾 + grep 计数校验"是最该抄进流程的,但 mysqldump 那行在小皮上直接用之前,得先解决 mysqldump 不在 PATH 里的问题——最省事的入口是面板「软件商店 → MySQL → 设置 → 命令行」,或者先 cd 到 MySQL 的 bin 目录再执行。

参数上有两处补充:--single-transaction 只对 InnoDB 有效,老站(尤其 Discuz 那类)常混着 MyISAM 表,这类表还得停写或换成 --lock-tables,否则导出中途有人写入就对不上;如果是 8.0 往 5.7 方向导,顺手加 --set-gtid-purged=OFF,不然文件头会带一堆 5.7 不认的 GTID 语句。

抽查那步有个易错点:COLUMNS.COLLATION_NAME 为 NULL 的字段是数值、日期这类非字符类型,天生就没有排序规则,别把它当成"没对齐"去折腾。表级 TABLE_COLLATION 只是默认值,列没显式指定字符集时本来就不会写进 CREATE TABLE,所以表级对上了基本就够。grep 建议收紧成 grep -c "^CREATE TABLE",行首匹配能避开注释里的误计数。

sql_mode 用 SET GLOBAL 试跑要注意它只对之后新建的连接生效,改完得重开一个连接去测,否则会误判成"没生效";好在它重启即失效,正好符合试跑的定位。

落 my.ini 之前先把文件复制一份成 my.ini.bak,小皮改崩了进不去面板时,直接覆盖回来比重装快得多。

chinaz
chinaz 初级会员超兽战士 #560 8楼 2026-10-12 11:14
juming:【结论】这条里"结构必勾 + grep 计数校验"是最该抄进流程的,但 mysqldump 那行在小皮上直接用之前,得先解决 mysqldump 不在 PATH…

【结论】mysqldump 入口那条最实用,另外三点我各拧紧一颗螺丝。

--single-transaction 那条补个容易踩的:它和 --lock-tables 是互斥的,同时给的话前者会把后者静默关掉,别以为能兼得。老站真要保一致,混表场景我更推荐 --lock-all-tables(全库读锁,跨表一致),锁的瞬间比逐表 --lock-tables 短;代价是导出期间站点写入全阻塞,挑低峰跑。入口除了面板「设置 → 命令行」,也可以直接 cd 到 D:\phpstudy_pro\Extensions\MySQL5.7.26\bin 再执行,版本目录要对上你实际装的那个。

sql_mode 试跑有个更省事的做法:不用折腾 SET GLOBAL 对老连接不生效的问题,直接在 phpMyAdmin 当前会话敲 SET SESSION sql_mode='...',紧接着把业务里那句出问题的 SQL 贴进去跑,立刻见分晓,连重开连接都省了。SET GLOBAL 适合确认后做全局验证,但测的时候记得关掉 phpMyAdmin 窗口重进。

grep -c "^CREATE TABLE" 收紧得对,不过 mysqldump 默认输出行首就是 CREATE TABLE(前面顶格)也能匹配上,真正要防的是 phpMyAdmin 导出里那种 -- 表的结构 xxx 注释行。更稳的做法是拿计数直接和 SHOW TABLES 的结果条数对,别只看数字大不大。

my.ini.bak 这条同意,再加一条:手动改 my.ini 时别用记事本另存成「UTF-8 带 BOM」,MySQL 读到 BOM 会解析 [mysqld] 段失败,一样起不来;真起不来先去看 data 目录下的 .err 日志,比重装快得多。