起因
最近有台云服务器到期, 续费太贵, 打算换一台便宜的, 之前服务器上使用docker
部署了几个网站, 涉及到数据和程序迁移的问题, 在此做个记录
持久化数据迁移
首先使用scp
指令进行数据卷的迁移, 也就是跨服务器数据拷贝
假设两台机器IP分别为:
服务器A: 114.238.161.75,
服务器B: 143.224.34.73。
比如我在A服务器上操作,需要将B服务器上/home/lk/
目录下所有的文件全部复制到本地的/root
目录下,命令为:
1 | scp -r root@143.224.34.73:/home/lk /root |
具体过程为:
1 | [root@XX ~]# scp -r root@43.224.34.73:/home/lk /root |
或者在A服务器上将/root/lk
目录下所有的文件传输到B的/home/lk/cpfile
目录下,命令为:
1 | scp -r /root/lk root@143.224.34.73:/home/lk/cpfile |
具体过称为:
1 | [root@XX lk]# scp -r /root/lk root@43.224.34.73:/home/lk/cpfile |
此外 加上-p
参数还可以保留原文件的修改时间,访问权限:
1 | scp -r -p root@143.224.34.73:/home/lk /root |
scp后台运行
方式一 使用
nohup
, 同时尾部加&
1
nohup scp -r -p root@143.224.34.73:/home/lk /root &
nohup: 表示忽略
hup
信号, 终端关闭任务进程也不销毁&: 表示后台运行
方式二 使用
bg
+disown
1
2
3
41.输入ctrl + z 暂停任务
2.输入jobs查看任务号
3.使用 bg %任务号 将该任务号放入后台
4.使用 disown -h %任务号 使后台任务忽略hup信号如下:
注: 执行
disown
后, 任务被移出jobs
, 使用jobs
指令已经无法查看该任务, 可以使用ps
进程查看指令判断任务是否已经结束:1
ps -aux
Docker容器迁移
首先 需要将容器保存为镜像
1
docker commit 容器名称 镜像名称
然后 将保存的镜像进行压缩
1
2
3
4docker save -o xxx.tar 镜像名称
//如果多个镜像同时打包
docker save [images] [images] > [name.tar]使用
scp
指令将压缩包传至新服务器1
scp -r xxx.tar root@143.224.34.73:/home/lk/cpfile
在新服务器中进行镜像恢复(新服务器需要先安装Docker)
1
2
3docker load < xxx.tar
或
docker load -i xxx.tar最后创建并运行容器
1
docker run --name 容器名 -p 12309:80 -d 镜像名
数据库迁移
详情查看《mysql使用命令导入和导出sql文件》
注意事项
docker
容器在创建时配置的挂载目录, 如果宿主中挂载的目录不存在则自动创建并写入默认数据, 如果目录已经存在则使用已存在的目录和数据
也就是说我们在进行容器迁移重新运行时, 不用担心原先目录下的数据会被覆盖重写
但是有一点需要注意的是, 原先目录中的配置文件如果包含原服务器中的ip
配置, 需要手动修改
比如我们迁移一个wordpress
, 在新服务器中使用以下参数进行启动:
1 | docker run -id \ |
由于源文件目录和文件未被覆盖重写, 那么上面数据库相关的配置参数不起作用, 我们需要手动进如源文件目录, 对wp-config.php
中数据库配置进行修改, 否则无法访问
数据库内网访问保证访问速度
一般来说 我们最好避免直接使用公网ip
访问数据库, 而是使用Docker
内部桥接网络的方式以容器名替代ip
的方式进行访问, 这样既能减少迁移的风险, 又能加快数据的读取
网站的访问流畅度和数据库的访问速度有非常大的关系, 经测试, 使用桥接网络访问数据库的速度远快于使用公网映射访问
大部分人刚开始会将网站的访问速度归结于服务器硬件配置、带宽、程序语言甚至是数据库的数据量太大和sql
查询语句不合理上, 殊不知 数据库的访问速度也是重中之重
本文为作者原创 转载时请注明出处 谢谢
微信公众号二维码如下: