-
需求
需要将MS数据从清河东机房搬运到新机房的MS服务,由于数据是二进制格式,只能用软件运算的方法进行搬运。
mv迁移工具不能针对某个用户的历史邮件进行迁移,它不是以用户为对象的,是以ms的卷为基本单位的。此次变更不迁移单副本、归档 、欢迎类型的邮件 (业务上无法实现),优化了迁移部分错误处理。迁移之前必须保证源MS存储卷已经关闭了入信。
-
例子
目前需要将172.16.x.x第11卷的邮件历史数据迁移到192.168.220.x的ms上。
迁移操作步骤如下:
一、在182.x中心机上用confutil工具修改hosts.conf配置文件,在172.16.210.x参数下面增加如下相关参数,然后同步到全网。
![](https://i-blog.csdnimg.cn/blog_migrate/3908b8d1e89b3cd8a929e32030f4a390.png)
mvNodeId=1 #这个值和msNodeId的值保持一致
[App3-rm-mi-01/mv/CONFIG_INFO]
dst_ms_server=MS118:1,MS119:1,MS220:1,MS22:0 #配置方法 目标MS[节点ID 1]:[自定义权重],目标MS[节点ID n]:[自定义权重]
src_ms_server=MS1:1 #源MS节点ID(也就是msNodeId的值),但是这个只能配置1个MS节点
#move_vol:num_11
vol_filter=0,0,0,0,0,0,0,0,0,0,1,0,0,0 # 表示针对第11个卷进行数据迁移
二、登录到172.16.210.x这台机进行操作
检查一下系统是否已经装上了sqlite3数据库,如果没有就要自行安装,默认是已经装上了。
rpm -qa|grep sqlite
启动服务就意味着开始进行迁移了
sbin/mvsvr --start
三、启动入库脚本
检查源机器是否装有python-2.7的版本
/usr/local/SaltStack/python-2.7.5/bin/python -V
如果没有就需要同步从中心机同步过来
scp -r xx@172.16.183.x:/usr/local/SaltStack /usr/local/
添加环境变量到/etc/profile里面
cat >> /etc/profile << EOF
export LD_LIBRARY_PATH= oracle_client/lib: lib:/usr/local/SaltStack/openssl102o/lib
export _PYTHON=/usr/local/SaltStack/python-2.7.5/bin/python
export _PBIN=/usr/local/SaltStack/python-2.7.5/bin
export _PIP=/usr/local/SaltStack/python-2.7.5/bin/pip
export _PATH=/usr/local/SaltStack
EOF
如果是直接从183.x同步程序就不用安装PyMySQL模块
$_PIP install PyMySQL
源脚本是在172.16.183.45上,如果脚本有更新,记得同步到中心机上
scp xx@172.16.183.45: workManager_threading.py /home/scripts/
用ROOT用户执行下面的脚本开始进行入库
cd /home/xx
$_PYTHON workManager_threading.py work
或者
/usr/local/SaltStack/python-2.7.5/bin/python workManager_threading.py work
停止进程
ps -ef |grep workManager_threading |grep -v "grep" |awk '{print "kill -9 " $2}'|sh
/home/mashbd_platform/src/main/KMCT-SC-64 shell xxx @mv_ms token "ps -ef |grep workManager_threading|grep -v grep|awk '{print \"kill -9 \"\$2}'|sh "
查看哪个日志文件正在入库
tail -1000 mvlog/recode_log | grep READLINE
grep READLINEmvlog/recode_log
============================================================================
四、数据库信息查看
1、打开sqlite3数据库:
命令:
1)sqlite3 info_db
2).help 查看各个命令使用方法
3) .tables 列出表名
4) 使用sql语句可以查询出对应表的数据,如"select * from tb_user_mid_map"
查询当前搜索路径:
select * from tb_current_search_path;
清空表数据
delete from tb_current_search_path;
结果:
131|255|255|0|2
msid|dir_1|dir_2|dir_3|flag (flag=1\2\3 分别是首次搜索、搜索中、搜索结束)
详细表结构就看概要设计文档13.2,顺序与文档中的表格字段书序一致
2、表名
(1)tb_current_search_path 当前搜索的路径信息,一个卷一条记录
(2)tb_idx_file 当前搜集到的索引信息
(3)tb_user_mid_map 待更新的MID
(4)tb_user_delete_mid_map 待删除的MID
(5)tb_except_idx_file 没有处理的索引文件
3、命令
(1)sqlite3 var/mv/move_info_db
(2).tables
(3)select * from [表名]
五、迁移服务日志查看
1、处理一封邮件的日志:
grep DealOneMid logs/mv.log | grep msg=found
grep DealOneMid logs/mv.log | grep msg=success
grep DealOneMid logs/mv.log | grep msg=SKIP
grep DealOneMid logs/mv.log | grep msg=error
2、更新MI信息的日志
grep UpdateMI logs/mv.log | grep msg=success
grep UpdateMI logs/mv.log | grep msg=error
3、删除源邮件的日志
#grep DeleteMail logs/mv.log | grep msg=success
#grep DeleteMail logs/mv.log | grep msg=error
grep DeleteOldMail logs/mv.log | grep msg=error
grep DeleteOldMail logs/mv.log | grep msg=success
说明:DeleteOldMail是删除源存储上的邮件;DeleteMail是更新mi失败后回退处理,删除保存到目标的ms新邮件,防止垃圾数据。
4、查看用户是否存在
grep GetRouteByUin logs/mv.log
5、查看迁移情况的日志
grep 'vol_id=1| finish search' logs/mv.log # vol_id=1表示第一个卷
6、统计迁移成功的邮件和邮件大小
grep DealOneMid logs/mv.log | grep msg=success | grep -v closefile | wc -l
grep DealOneMid logs/mv.log | grep msg=success | grep -v closefile | grep -Po '(?<=old_mail_size=)(.*?)(?=\|)' | awk '{a+=$1}END{print a/1024/1024/1024 "GB"}'
数据库查询
mysql -h172.16.16.x -ums_user -pxxx' move_db
select sum(old_mail_size)/1024/1024/1024 from log_20180815;
select count(id) from log_20180815;