小皮面板跨服务器迁移数据库该怎么操作
学完这篇,你能把一台服务器上小皮面板里的 MySQL 数据库,完整搬到另一台服务器的小皮面板上,包括导出、传输、导入和后续配置修改。
第一步:先摸清源库的家底
这一步要确认要搬的东西有多大、什么版本,避免中途才发现导不动。登录源服务器的小皮面板,左侧菜单点「数据库」,在数据库列表里记下数据库名、用户名、密码;点右边「管理」可以进 phpMyAdmin,首页右侧会显示 MySQL 版本号(比如 5.7.40 或 8.0.32)。
同时在面板左侧「终端」(或用 SSH 工具)执行:
mysql -V
df -h /www
第一条看 MySQL 版本,第二条看 /www 分区剩余空间。导出文件大小一般是原库的 0.5~1 倍,空间至少要留出这个数。
注意:源服务器和目标服务器的 MySQL 大版本最好一致。5.7 导到 8.0 经常会因为排序规则(utf8mb4_general_ci 与 utf8mb4_0900_ai_ci)报错,能凑一致就凑一致。
第二步:在源服务器导出 SQL 文件
这一步要把数据库导出成一个 .sql 文件,得到一个可以搬走的备份。在小皮面板里可以先点数据库右侧的「备份」按钮做一份面板备份(备份文件默认在 /www/backup/database/),但更推荐用命令行导出,参数可控。
cd /www/backup
mysqldump -u root -p --single-transaction --default-character-set=utf8mb4 \
--routines --triggers --events --databases 你的库名 > 你的库名_$(date +%F).sql
回车后输入数据库 root 密码。如果提示 mysqldump: command not found,改用完整路径:
/www/server/mysql/bin/mysqldump -u root -p ... > 你的库名.sql
导出完检查一下:
ls -lh 你的库名_*.sql
tail -n 5 你的库名_*.sql
文件大小不是 0、末尾能看到 Dump completed 字样就成功了。
注意:
--databases参数会让文件里带上CREATE DATABASE语句,导入时不用再手动建库;不加这个参数则必须自己先建库。另外--routines --triggers --events三个参数别省,否则存储过程、触发器、定时事件会丢。
第三步:把文件传到目标服务器
这一步要把导出的 SQL 文件搬到新服务器上,得到一份落在目标机磁盘上的备份文件。两种方式,选一种就行。
方式一,命令行 scp(推荐,断点稳):
scp /www/backup/你的库名_2024-01-01.sql root@目标服务器IP:/www/backup/
输入目标服务器的 SSH 密码即可。
方式二,用面板传:先在源面板「文件」里进入 /www/backup,右键该 sql 文件选「下载」存到本地;再登录目标服务器的小皮面板,左侧「文件」进入 /www/backup,点「上传」把文件传上去。
注意:上传大文件前先看目标服务器
/www剩余空间。如果 sql 文件超过 100MB,不要走 phpMyAdmin 上传,会撞上 php.ini 的upload_max_filesize限制,直接用命令行导入。
第四步:在目标服务器建库并导入
这一步要在新服务器的 MySQL 里创建同名库,并把数据灌进去,得到一份可用的数据库。登录目标服务器小皮面板,左侧点「数据库」→「添加数据库」,填和源库一致的数据库名、用户名、密码,字符集选 utf8mb4,访问权限按需选「本地服务器」或「所有人」。
然后打开面板的「终端」,执行导入:
cd /www/backup
mysql -u root -p 你的库名 < 你的库名_2024-01-01.sql
如果导出时用了 --databases,命令里可以省略库名:
mysql -u root -p < 你的库名_2024-01-01.sql
导入过程中屏幕没有输出是正常的,结束后验证:
mysql -u root -p -e "use 你的库名; show tables; select count(*) from 你的表名;"
表数量和行数和源库对得上就说明成功了。
注意:如果报
ERROR 1153 (08S01) Got a packet bigger than 'max_allowed_packet' bytes,需要改大参数:编辑/www/server/mysql/my.cnf,在[mysqld]段加一行max_allowed_packet = 256M,然后在面板「软件商店」→「MySQL」→「重启」,再重新导入。
注意:命令行建的库不一定自动出现在面板数据库列表里,用面板的「同步」功能或直接添加同名库让面板接管,否则以后没法在面板里管理它。
第五步:改网站配置并收尾
这一步让网站连上新库,并把权限补全,得到一台真正跑起来的站点。打开网站的配置文件——WordPress 是根目录下的 wp-config.php,Discuz 是 config/config_global.php——把 DB_NAME、DB_USER、DB_PASSWORD、DB_HOST 改成新服务器的值。如果数据库和网站同一台机器,DB_HOST 填 127.0.0.1。
如果导入的库是手动建的,补一条授权:
mysql -u root -p -e "GRANT ALL PRIVILEGES ON 你的库名.* TO '用户名'@'%' IDENTIFIED BY '密码'; FLUSH PRIVILEGES;"
最后打开网站首页、登录后台、发一条测试内容,确认读写正常。
注意:MySQL 在 Windows 和 Linux 上对表名大小写敏感度不同(
lower_case_table_names),从 Windows 迁到 Linux 时,如果代码里表名大小写不统一,会出现「表不存在」。迁移前先在源库确认表名规范,或在新服务器my.cnf里设lower_case_table_names = 1。
小结
- 迁移前先确认 MySQL 版本和磁盘空间,版本越一致越省事。
- 导出务必带上
--routines --triggers --events --default-character-set=utf8mb4。 - 传输优先用 scp,大文件别走 phpMyAdmin。
- 导入报
max_allowed_packet错误就调大参数并重启 MySQL。 - 导入后改网站配置文件里的数据库连接信息,并用
FLUSH PRIVILEGES刷新授权。 - 迁移完成前别删源服务器的数据和备份文件。
原文链接:https://www.gj0.com/thread-1066.html
转载请注明出处并保留本声明;内容仅代表作者观点,与本站立场无关。若本文涉嫌侵权,请联系本站处理。