背景

在上一篇博客 【Maven学习】Nexus OSS私服仓库的安装和配置 中,我们已经在机房搭建好了新的Nexus OSS私服仓库。下面是两个版本的Nexus OSS私服仓库的对比图。

老的Nexus OSS私服仓库

nexus linux 仓库迁移 nexus 数据迁移_sed

新的Nexus OSS私服仓库

nexus linux 仓库迁移 nexus 数据迁移_nexus linux 仓库迁移_02

明显老的Nexus OSS私服仓库的内容比新的Nexus OSS私服仓库的内容多。因此我们现在的工作就是将办公室上的老的Nexus服务器上的所有的数据迁移到机房的Nexus服务器。这一篇博客记录下整个Nexus OSS私服仓库的备份与迁移的过程。

迁移中会遇到三个文件夹 , 打包、拉走 启动即可。

名称

目录名

重要配置文件

nexus主目录

nexus-2.6.4-02

conf/nexus.properties里面有sonatype-work的地址

sonatype-work目录

sonatype-work

nexus/conf/nexus.xml里面有storage的地址

storage目录

storage

里面主要是各种程序的jar包等

迁移流程如下

nexus linux 仓库迁移 nexus 数据迁移_服务器_03

首先我们在老的Nexus OSS私服仓库的这台Linux服务器上,查看相关的目录信息。

nexus linux 仓库迁移 nexus 数据迁移_服务器_04

如上图所示,在老的Nexus OSS私服仓库的这台Linux服务器上,

nexus主目录的地址为:/usr/local/nexus-2.12.1-01

nexus linux 仓库迁移 nexus 数据迁移_nexus linux 仓库迁移_05

/usr/local/nexus-2.12.1-01/config/nexus.properties 文件中,指定了sonatype-work的地址

/usr/local/sonatype-work/nexus/storage目录,查看里面的目录结构

  1. [root@kf1appsvr storage]# pwd
  2. /usr/local/sonatype-work/nexus/storage
  3. [root@kf1appsvr storage]# ll
  4. total 52
  5. drwxr-xr-x 6 root root4096 Dec 4 08:49 android-beta
  6. drwxr-xr-x 6 root root4096 Dec 4 08:49 android-dev
  7. drwxr-xr-x 6 root root4096 Dec 4 08:49 android-release
  8. drwxr-xr-x 6 root root4096 Dec 4 08:49 android-snapshots
  9. drwxr-xr-x 10 root root4096 Dec 4 08:49 android_public
  10. drwxr-xr-x 4 root root4096 Dec 4 08:49 apache-snapshots
  11. drwxr-xr-x 30 root root4096 Dec 4 08:49 central
  12. drwxr-xr-x125 root root4096 Nov30 17:08 central-m1
  13. drwxr-xr-x 6 root root4096 Dec 4 08:49 public
  14. drwxr-xr-x 4 root root4096 Dec 4 08:49 releases
  15. drwxr-xr-x 4 root root4096 Dec 4 08:49 snapshots
  16. drwxr-xr-x 5 root root4096 Dec 4 08:49 thirdparty
  17. drwxr-xr-x 2 root root4096 Jan11 2017 xtc_devs

nexus linux 仓库迁移 nexus 数据迁移_sed_06

将此目录结构和Nexus管理界面对比,可以一一对应,如下所示。

nexus linux 仓库迁移 nexus 数据迁移_bundle_07

从上面分析来看,我们只需要将nexus主目录和sonatype-work目录都备份好即可。但是两个Linux服务器的nexus配置的java路径之类的可能不同,我就不备份nexus主目录了。

我只备份sonatype-work目录,Nexus的构件仓库都保存在sonatype-work目录中,该目录的位置由nexus/conf/nexus.properties配置文件指定。

使用 tar命令将 sonatype-work目录 打包压缩为一个 tar.gz文件,命令如下所示

[root@kf1appsvr local]# tar -zcvf sonatype-work-2017-12-14.tar.gz ./sonatype-work/

备份中,整个备份过程比较缓慢,因为两年传上去的的文件和文件夹太多了。

nexus linux 仓库迁移 nexus 数据迁移_sed_08

打包完毕


nexus linux 仓库迁移 nexus 数据迁移_sed_09


生成了 sonatype-work-2017-12-14.tar.gz 文件,占用了2770940709 字节,差不多2.6G

nexus linux 仓库迁移 nexus 数据迁移_bundle_10

sonatype-work 目录打包成一个压缩包 sonatype-work-2017-12-14.tar.gz,现在我们要将这个压缩包复制到新的Nexus OSS私服仓库的Linux服务器上。

我们是有 scp命令来进行复制操作,关于scp命令的操作可以参考之前的文章 git学习------> Gitlab如何进行备份恢复与迁移?

使用scp命令从远程服务器copy文件或者目录到本地

scp 用户名 @IP 地址 : 文件名 1 远程用户名 @IP 地址 : 文件名 2

[用户名 @IP 地址 :] 可以不输入 , 可能需要输入远程用户名所对应的密码 .

可能有用的几个参数 :

  • -v 和大多数 linux 命令中的 -v 意思一样 , 用来显示进度 . 可以用来查看连接 , 认证 , 或是配置错误 .
  • -C 使能压缩选项 .
  • -P 选择端口 . 注意 -p 已经被 rcp 使用 .
  • -4 强行使用 IPV4 地址 .
  • -6 强行使用 IPV6 地址 .

例如我使用如下命令,从远程服务器copy刚才的备份文件sonatype-work-2017-12-14.tar.gz到了新服务器的/usr/local 目录下

scp root@老的linux的ip地址:/usr/local/sonatype-work-2017-12-14.tar.gz /usr/local/

我们登录到新的Nexus OSS私服仓库那台linux服务器,然后执行上面的命令

nexus linux 仓库迁移 nexus 数据迁移_bundle_11

敲了命令之后,需要我们确认是否connecting,我们敲一个yes,接着需要我们输入老的Nexus OSS私服仓库那台linux服务器的密码,如下所示

nexus linux 仓库迁移 nexus 数据迁移_服务器_12

敲完之后,如果密码正确的话,则将刚才的备份文件copy到这台新的linux服务器。稍等一段时间之后则可以copy完毕,如下图所示:

nexus linux 仓库迁移 nexus 数据迁移_服务器_13

真心尴尬,根目录 / 的磁盘空间用完了,导致复制过程终止,我们将这个复制到一半的文件删除掉。

我发现 /data2 的磁盘空间很充裕,因此我将文件复制到 /data2目录下,如下图所示

nexus linux 仓库迁移 nexus 数据迁移_服务器_14

复制完毕之后,查看 /data2 目录,发现 复制过来的 sonatype-work-2017-12-14.tar.gz 文件也是 2770940709个字节,完整复制过来了。

nexus linux 仓库迁移 nexus 数据迁移_bundle_15

因为 根目录 / 下的磁盘空间不足,因此我们将刚才的压缩包解压到 /data2目录下。如下所示:

tar -zxvf sonatype-work-2017-12-14.tar.gz

nexus linux 仓库迁移 nexus 数据迁移_nexus linux 仓库迁移_16

解压过程

nexus linux 仓库迁移 nexus 数据迁移_bundle_17

解压好后,会生成一个 sonatype-work目录。如下图所示:

nexus linux 仓库迁移 nexus 数据迁移_bundle_18

因为我们新的Nexus OSS私服仓库之前制定的仓库地址为

1. 2. [root@localhost nexus-2.12.1-01]# ll
3. 总用量 40
4. drwxr-xr-x3 10011001 4096 12月13 16:27 bin
5. drwxr-xr-x2 10011001 4096 12月13 18:06 conf
6. drwxr-xr-x2 10011001 4096 12月13 16:27 lib
7. -rw-r--r--1 10011001 11006 3月 3 2016 LICENSE.txt
8. drwxr-xr-x2 10011001 4096 12月13 18:08 logs
9. drwxr-xr-x4 10011001 4096 12月13 16:27 nexus
10. -rw-r--r--1 10011001 782 3月 3 2016 NOTICE.txt
11. drwxr-xr-x5 10011001 4096 12月13 18:08 tmp
12. [root@localhost nexus-2.12.1-01]# pwd
13. /usr/local/nexus-2.12.1-01
14. [root@localhost nexus-2.12.1-01]# cat conf/nexus.properties 
15. #
16. # Sonatype Nexus (TM) Open Source Version
17. # Copyright (c) 2008-present Sonatype, Inc.
18. # All rights reserved. Includes the third-party code listed at http://links.sonatype.com/products/nexus/oss/attributions.
19. #
20. # This program and the accompanying materials are made available under the terms of the Eclipse Public License Version 1.0,
21. # which accompanies this distribution and is available at http://www.eclipse.org/legal/epl-v10.html.
22. #
23. # Sonatype Nexus (TM) Professional Version is available from Sonatype, Inc. "Sonatype" and "Sonatype Nexus" are trademarks
24. # of Sonatype, Inc. Apache Maven is a trademark of the Apache Software Foundation. M2eclipse is a trademark of the
25. # Eclipse Foundation. All other trademarks are the property of their respective owners.
26. #
27.  
28. # Sonatype Nexus
29. # ==============
30. # This is the most basic configuration of Nexus.
31.  
32. # Jetty section
33. application-port=8081
34. application-host=0.0.0.0
35. nexus-webapp=${bundleBasedir}/nexus
36. nexus-webapp-context-path=/nexus
37.  
38. # Nexus section
39. nexus-work=${bundleBasedir}/../sonatype-work/nexus
40. runtime=${bundleBasedir}/nexus/WEB-INF
41. [root@localhost nexus-2.12.1-01]#

nexus linux 仓库迁移 nexus 数据迁移_服务器_19

现在我们将老的Nexus OSS私服仓库的备份仓库 解压到了 /data2目录下,因此我们需要修改nexus/conf/nexus.properties配置文件,重新指定仓库的目录为 /data2/sonatype-work/nexus

nexus linux 仓库迁移 nexus 数据迁移_服务器_20

我们修改 /usr/local/nexus-2.12.1-01/conf/nexus.properties 文件

[root@localhost nexus]# vim /usr/local/nexus-2.12.1-01/conf/nexus.properties

修改后的配置文件如下所示

1. 2. # Sonatype Nexus (TM) Open Source Version
3. # Copyright (c) 2008-present Sonatype, Inc.
4. # All rights reserved. Includes the third-party code listed at http://links.sonatype.com/products/nexus/oss/attributions.
5. #
6. # This program and the accompanying materials are made available under the terms of the Eclipse Public License Version 1.0,
7. # which accompanies this distribution and is available at http://www.eclipse.org/legal/epl-v10.html.
8. #
9. # Sonatype Nexus (TM) Professional Version is available from Sonatype, Inc. "Sonatype" and "Sonatype Nexus" are trademarks
10. # of Sonatype, Inc. Apache Maven is a trademark of the Apache Software Foundation. M2eclipse is a trademark of the
11. # Eclipse Foundation. All other trademarks are the property of their respective owners.
12. #
13.  
14. # Sonatype Nexus
15. # ==============
16. # This is the most basic configuration of Nexus.
17.  
18. # Jetty section
19. application-port=8081
20. application-host=0.0.0.0
21. nexus-webapp=${bundleBasedir}/nexus
22. nexus-webapp-context-path=/nexus
23.  
24. # Nexus section
25. #nexus-work=${bundleBasedir}/../sonatype-work/nexus
26. #新的地址为
27. nexus-work=/data2/sonatype-work/nexus
28. runtime=${bundleBasedir}/nexus/WEB-INF

nexus linux 仓库迁移 nexus 数据迁移_sed_21

使用 /etc/init.d/nexus2 restart 命令 重启Nexus服务

1. 2. Usage: /etc/init.d/nexus2 { console | start | stop | restart | status | dump }
3. [root@localhost nexus]# /etc/init.d/nexus2 restart
4. ****************************************
5. WARNING - NOT RECOMMENDED TO RUN AS ROOT
6. ****************************************
7. Stopping Nexus OSS...
8. Stopped Nexus OSS.
9. Starting Nexus OSS...
10. Started Nexus OSS.
11. [root@localhost nexus]#

nexus linux 仓库迁移 nexus 数据迁移_sed_22

重启完后,刷新浏览器查看新的Nexus服务器,如下所示

nexus linux 仓库迁移 nexus 数据迁移_bundle_23

对比下,老的Nexus服务器

nexus linux 仓库迁移 nexus 数据迁移_服务器_24

除了IP地址不一样之外,其他的都一样,迁移成功!