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
2
3
4
5
6
7
8
9
10
11
12
13
grep "password" /var/log/mysqld.log
mysql -uroot -p9fr%ys1%ltKp

# 修改密码,开放外网访问权限
use mysql;
ALTER USER 'root'@'localhost' IDENTIFIED BY 'ROOTPASSWORD';
UPDATE user SET host='%' WHERE user='root';
FLUSH PRIVILEGES;

# 新增其他用户
CREATE USER 'quant'@'%' IDENTIFIED BY 'XXX';
GRANT ALL PRIVILEGES ON quant.* TO 'quant'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;

迁移文件

数据无价,先备份

1
mysqldump -uroot -pROOTPASSWD --all-databases > DB_all_backup_20250724.sql

SCP整个文件夹太慢了,先tar或zip打包再scp过去。

/data/wwwroot 文件夹

1
2
tar -zcf wwwroot.tar.gz wwwroot/
scp wwwroot.tar.gz root@120.79.20.0:/data/

Nginx配置文件

1
2
3
4
scp /usr/local/nginx/conf/vhost/* root@120.79.20.0:/etc/nginx/conf.d
scp -r /usr/local/nginx/conf/ssl/ root@120.79.20.238:/etc/nginx
# 修改配置文件中证书指向
sed -i 's/\/usr\/local\/nginx\/conf\/ssl/\/etc\/nginx\/ssl/g' `grep ssl -rl ./`

迁移数据

虽然可以通过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年创建的机器能够继续传承下去吧。