2014年,我的学长和我共用一台服务器,这台服务器运行了我的世界水桶服、两个国赛项目、工大排课系统、网管招新系统、网管网络文化节主页、ACM评测系统、前端评测系统、狗脸识别模型、量化交易前端、Linux性能探针、东京内涝可视化,还有一堆试验性项目。
可以说这台1C2G的服务器承载了太多的回忆,也见证了我的成长。
但一方面舍不得这个IP地址,另一方面青岛区域的硬件和价格并不能满足需求。
与其备份后重装系统,不如直接迁移到新服务器,把机器传给后辈。
圈定迁移范围
最简单的方法是敲一个history命令,看之前处理了哪些文件、用了哪些服务。
1 | history | grep -v cd | grep -v ls | grep -v grep | grep -v exit | grep -v history | grep -v ll | grep -v df | grep -v du | grep -v pwd | grep -v ping | grep -v wget | grep -v top | grep -v tail |
展示了从2016年12月4日重置之后至今的全部命令,真怀念啊~
当然,也让我意识到之前做的项目大部分都没有任何意义……
然后,进入nginx日志记录,使用ls -lrt倒序查看,能看到哪些域名有访问流量。
一个更悲惨的现实是,除了各种扫描bot,基本没有任何流量……
也别忘了看看/usr/local目录下面。
这里圈定如下迁移范围和顺序:
- Nginx 配置和证书
- /root 文件夹
- /data/wwwroot 文件夹
- MySQL 数据
安装服务
其他类似Redis、Java等需要再装:
- MySQL
- Nginx
- Node
- hexo
- Docker
- Dataease
- 各种依赖镜像站:阿里云ACR容器镜像、npm镜像、pip镜像等
1 | npm config set registry https://registry.npmmirror.com |
创建MySQL用户
先修改root用户密码,再新增用户。
1 | grep "password" /var/log/mysqld.log |
迁移文件
数据无价,先备份
1 | mysqldump -uroot -pROOTPASSWD --all-databases > DB_all_backup_20250724.sql |
SCP整个文件夹太慢了,先tar或zip打包再scp过去。
/data/wwwroot 文件夹
1 | tar -zcf wwwroot.tar.gz wwwroot/ |
Nginx配置文件
1 | scp /usr/local/nginx/conf/vhost/* root@120.79.20.0:/etc/nginx/conf.d |
迁移数据
虽然可以通过source命令导入上面的DB_all_backup_20250724.sql文件实现传统方法数据迁移,但难以实现增量平滑迁移。
因此,计划使用Canal来迁移MySQL。
这个伪装Slave从库的方案还是2017年末时候,公司里面的导师提到了这个工具,终于有机会实践一把。
官方文档参考:QuickStart
OceanBase版本文档参考:文档
处理上游依赖
域名DNS更新
修改www、*、@的A记录到新域名,修改完成后隔一会再看看能否正常访问、ping域名是否路由到了新IP。
GitAction部署更新
由于这个博客是通过GitAction即时更新,git push后自动编译md并部署,因此需要在新机器上部署相关服务。
对于新机器,需要调整ssh配置,让其允许使用私钥登录
1 | vim /etc/ssh/sshd_config |
- StrictModes yes 改成 StrictModes no (去掉注释后改成 no)
- 找到 #PubkeyAuthentication yes 改成 PubkeyAuthentication yes (去掉注释)
- 找到 #AuthorizedKeysFile .ssh/authorized_keys 改成 AuthorizedKeysFile .ssh/authorized_keys (去掉注释)
保存后重启sshd
1 | systemctl restart sshd |
结尾
目前您看到的这篇文章已经指向了最新的机器IP,旧的那台机器也被我重置、传递给我的后辈。
第一个训练小任务肯定也还是在Linux环境中部署Minecraft玩一玩,想当年部署完毕后和学长1v1 PK,根本忽略了这是个沙盒游戏哈哈哈。
但愿这台从13年创建的机器能够继续传承下去吧。