基于radius的Mysql计费系统数据迁移

radius计费系统向蓝海计费系统数据迁移技术总结

本文仅供参考,在实际环境中测试成功。欢迎大家提出问题。

1.    首先要有一个清晰的思路和明确的目标

本次计费迁移主要将老计费radius management系统的用户,迁移到蓝海计费系统。由于老计费系统和蓝海计费有相似性、同时具有一定的差异性。所以要修正老计费系统数据格式符合蓝海计费的要求(蓝海计费已经提供了数据导入的标准格式)。这样才能将老计费平安的导入蓝海系统,顺利进行计费系统迁移。

2.    准备工作

2-1首先要收集新老计费系统的数据格式和数据库的相关权限。

2-2收集需要迁移的需求,本次迁移并不是将所有的用户迁移到蓝海系统。根据公司营长的需要按要求将数据导出老系统、再导入新系统。

2-3为了保证计费系统的安全性,需要将老系统的数据库备份到测试环境进行测试。同时要做好数据库的导出时间点。

2-4先做部分数据的产品导入。观测导入效果后再研究后续的工作。

2-5由于数据导入蓝海计费系统,在后期的运营中也要进行数据检测。

2-6收集新旧系统的相关数据,本次主要收集数据的套餐信息、资费信息。

3风险

3-1本次数据迁移,如果失败会导致所有迁移用户不能正确使用网络。蓝海系统手动录入的用户不受影响。为了本次迁移的顺利完成,通过和营帐进行商议。先将某一个很小的小区的10个用户进行迁移,做好随时恢复的准备,根据用户反映做出有效处理。

3-2在数据迁移完成后的一段时间内,暂定1个月或者更长时间任何人不得删除老计费的数据并保证老计费一直处于运行状态。

3-3如果迁移失败,会导致所有涉及迁移的用户不能正常拨号。故必须做好计费恢复、割接事前通知、事中做好客服的安抚工作。

3-4迁移时间尽量选择在用户上网人数较少的时间段。

4时间

4-1本次迁移按照公司安排,在测试迁移成功的基础上进行数据的一次性迁移。计划耗时10个小时,尽可能将时间压缩到最小。

5资源调度

5-1本次迁移需要技术部研发部相关人员参加、计费营帐资深管理员、网络割接部门的同事、网管部门同事、客服同事做好通知和解释工作,有效防止网络中断。

6.实施步骤

6-1用putty通过ssh连接到老计费的linux系统上,

6-2用获得的数据库帐号执行数据库备份操作,命令如下:

Mysqldump –h127.0.0.1 –uroot –pxxxx radius>radius_201512310800.sql;

6-3在搭建的测试数据库环境执行如下数据库还原操作。

Create database radius;

Mysql –h127.0.0.1 –uroot –p***** radius<radius_201512310800.sql;

6-4新建一个业务表格,将营帐给的最新资费套餐导入此表。Xls格式的导入不再详述。

/*createtable srvname

(

idint primary key auto_increment,

srvidint(11),

srvnamevarchar(50)

)

SELECT* FROM srvname

altertable srvname add column srvname2 varchar(50)

altertable srvname add column srvid_old int(11)

xls数据导入到srvname表中

6-5将新旧业务套餐和资费进行转换并生成临时表

#测试将旧业务码转换为新业务码

SELECT* FROM  rm_services

SELECTid

FROM(SELECT * FROM srvname WHERE srvname NOT LIKE ‘%年%‘  ) AS t_srv_flage

WHERESUBSTRING(srvname,LOCATE(‘~‘,srvname)+1,1) IN (‘1‘,‘z‘)

#设置flag,剔除年的业务代码和008 3天 3月 6月的业务代码

UPDATEsrvname SET flag=SUBSTRING(srvname,LOCATE(‘~‘,srvname)+1,1)

WHERE

idIN (

SELECTid

FROM(SELECT * FROM srvname WHERE srvname NOT LIKE ‘%年%‘  ) AS t_srv_flage

WHERESUBSTRING(srvname,LOCATE(‘~‘,srvname)+1,1) IN (‘1‘,‘z‘))

ALTERTABLE srvname ADD COLUMN flag CHAR(1)

SELECT* FROM srvname WHERE flag IS NOT NULL

6-6将新旧计费对接成功的数据写入临时表srvname_temp

CREATETEMPORARY TABLE srvname_temp

AS

SELECT

a.srvidAS srvid_new,a.srvname AS srvname_new,a.srvid_old AS srvname_abc,

b.srvidAS srvid_old,b.srvname AS srvname_old,

a.flag

FROMsrvname AS a

LEFTJOIN

rm_servicesAS b

ONa.srvname_old=b.srvname

WHEREa.flag IS NOT NULL

SELECT* FROM srvname_temp

6-7从测试环境的radius库将数据按条件查询出来并导出为csv格式的数据。编码格式选择GBk2312

#导入蓝海计费的最终数据。

/*总结:

FIELDSTERMINATED BY ‘,‘ 字段间分割符

OPTIONALLYENCLOSED BY ‘"‘ 将字段包围对数值型无效

LINESTERMINATED BY ‘\n‘ 换行符*/

/*1queries executed, 0 success, 1 errors, 0 warnings

查询:select u. username, k.value AS 明文密码,u.password as 密文密码, u.srvid as old_srvid, t.srvid_newas new_srvid, t.srvid...

错误代码: 1064

Youhave an error in your SQL syntax; check the manual that corresponds to yourMySQL server version for the right syntax to use near ‘select * from radcheck

select* from rm_users

leftjoin rm_services as s

on‘at line 22

执行耗时  : 0 sec

传送时间  : 0 sec

总耗时      : 0.002 sec

grantfile on *.* to [email protected]‘%‘;

flushprivileges;

mysql服务器没有d盘导致

*/

/*

Excel显示数字时,如果数字大于12位,它会自动转化为科学计数法;如果数字大于15位,它不仅用于科学技术费表示,还会只保留高15位,其他位都变0。

Excel打开csv文件时,只要字段值都是数字,它就认为该字段类型是数值。但我们存放在数据库中的纯数字char有可能会超过15位,这样导出csv文件后,用excel打开看到的字段值就不对了。

网上的解决方法

1、将单元格格式设为文本,但行不通,还是会以科学计数法显示

2、将单元格格式设为特殊,类型邮政编码,这样不会以科学计数法显示,但是数字超过15位时低位还是会变0;

3、新建一个新工作表,用数据导入自文本文件功能,将csv导入到工作表中(分隔符逗号,每一列格式都设为文本),这样可以正确显示,但是每次导出新csv文件都要这么做比较麻烦,而且我们也不可能让客户去进行这个操作。

参考这篇文章 java导出csv用excel打开后数字不用科学计数法显示

我在mysql导出csv文件时,设置字段值用制表符\t括起来(outfile ‘e:\\test.csv‘fields terminated by ‘,‘ optionally enclosed by ‘\t‘ lines terminated by ‘\r\n‘),

这样excel打开csv文件时,会将数值用文本格式显示,而不是数值格式,因为我们的数值前后都有制表符\t,而不是单纯的数字。

这样打开导出的csv文件就可以正常显示了。不建议这样使用*/

SELECT

u.username AS ‘账号‘,

k.valueAS ‘密码‘,

IF(u.`firstname`!=‘‘,u.`firstname`,‘测试‘)AS ‘姓名‘,

IF(u.`taxid`,u.`taxid`,‘610000000000000000‘)AS ‘证件号码‘, //处理身份证号码为空的字段

IF(u.mobile,u.mobile,‘13000000000‘)AS ‘手机号码‘, //处理手机号码为空的字段

IF(u.`address`!=‘‘,u.`address`,‘xxx‘)AS‘联系地址‘, //处理地址为空的字段

‘‘AS ‘账号余额‘,

u.`staticip`AS ‘ip地址‘,

u.`createdon`AS ‘开始时间‘,

u.`expiration`AS ‘结束时间‘,

#if(SUBSTRING(u.`address`,1,2) IN (‘小区或社区名称‘),‘17‘,‘18‘) as ‘区域编号‘, //处理地址自动化分行政区域的字段,并自动按规范设置区域编号 17 18为区域编号,可以根据相关规范进行设定。

‘陕西省xx市xx区‘ AS ‘区域名称‘,

‘1‘AS ‘运营商编号‘,

‘本地‘AS ‘运营商名称‘,

‘5‘AS ‘项目编号‘,

‘BRAS‘AS‘项目名称‘, //计费类型

t.srvid_newAS ‘产品编号‘,

t.srvname_newAS  ‘产品名称‘,

u.`createdby`AS ‘开户人员‘,

‘‘AS‘用户备注1‘,

‘‘AS‘地址池名称‘,

REPLACE(u.`comment`,‘\\‘,‘‘) AS ‘用户备注‘,

‘‘AS‘发票号‘,

‘‘AS‘固话号码‘,

‘‘AS‘操作人员‘,

‘‘AS‘用户属性‘

#INTOOUTFILE ‘e://lanhai.csv‘  //设置导出的文件名

#FIELDSTERMINATED BY ‘,‘ //设置导出数据以逗号分割字段

#OPTIONALLYENCLOSED BY ‘"‘ //设置字段以””进行包裹

#LINESTERMINATED BY ‘\n‘  //设置行结束符为换行符\n

FROMrm_users AS u

LEFTJOIN radcheck AS k

ONu.username=k.username

LEFTJOIN srvname_temp AS t

ONu.`srvid`=t.srvid_old

WHEREk.`value` <>1

ANDSUBSTRING(u.username,1,9)=‘029010000‘

ANDu.`address`  LIKE ‘文景%‘

AND  u.`expiration`>‘2015-05-31‘

6-8将导出的csv在蓝海计费里面通过数据库管理下的数据导入功能将数据导入。注意导入的过程中蓝海计费的提示信息。如果发现错误,请认真进行分析。

6-9由于数据涉及到公司的机密,故再次就不一一附图。

本文至此结束。

时间: 2024-10-29 02:41:32

基于radius的Mysql计费系统数据迁移的相关文章

关于ssdcrm老系统数据迁移到新系统的系列实施办法

由于最近不断有客户提到crm老系统数据迁移的问题,为了切实帮助大家解决这个实际困难.本技术组近期将分批写出处理办法.今天我们先介绍一下5x系统的评论信息如何迁移到7x新系统. 关于老系统评论导入新系统的解决办法 问题描述: 5x系统的各个模块中带的评论信息,保存在ec_modcomments表中(通过phpmyadmin访问).直接导出该表的ec_modcomments.sql文件. 7x系统中的表结构与老系统有区别.主要是crmid的值不同.比如:5x系统中,一条联系记录模块带的评论信息,它对

Django项目与mysql交互进行数据迁移时报错:AttributeError: &#39;str&#39; object has no attribute &#39;decode&#39;

问题描述 Django项目启动,当我们执行命令 python manage.py makemigrations 出现如下错误: File "/usr/local/lib/python3.6/dist-packages/django/db/backends/mysql/operations.py", line 147, in last_executed_query query = query.decode(errors='replace') AttributeError: 'str' o

数据迁移实战:基于Kettle的Mysql到DB2的数据迁移

From:https://my.oschina.net/simpleton/blog/525675 一.什么是ETL ETL,是英文 Extract-Transform-Load 的缩写,用来描述将数据从来源端经过抽取(extract).转换(transform).加载(load)至目的端的过程.ETL一词较常用在数据仓库,但其对象并不限于数据仓库. 二.Kettle简单说明 Kettle是一款国外开源的ETL工具,纯java编写,可以在Window.Linux.Unix上运行,数据抽取高效稳定

阿里云 CentOS下面 Mysql 数据迁移

本次Mysql数据迁移, 只是从阿里云的CentOS系统盘中,把mysql的data数据, 迁移到非系统盘中. 起因: 由于购买阿里云时候,  默认的系统盘只有20G.  后又购买了100G磁盘空间, 这时, 需要把原mysql数据, 迁移到新的磁盘分区中. 所有的操作步骤记录如下: 1. 新挂载磁盘分区: mount, 并设置为重启后自动加载. 2. 暂时关闭nginx服务器. 再关闭mysql服务器. 3. 修改/etc/my.cnf配置文件, 将里面的路径, 修改为新磁盘中的, 需要保存m

mysql数据迁移

一. 数据迁移简介所谓的数据迁移,就是指将原有的数据库系统迁移到另外一个业务系统上数据迁移的原因是多种多样的,有可能是业务变更.硬件升级.平台切换或升级mysql数据库 迁移的注意事项:(1).相同版本可以迁移(2).注意版本可以使用的引擎(3).低版本可以向高版本进行数据迁移,高版本一般兼容低版本的特性(4).高版本的数据不能向低版本进行数据迁移,会出现数据不兼容的情况(5).迁移是请注意导出数据和备份数据,出现迁移失败时,立即启动备份方案,保证公司业务的正常运行(6).在数据迁移时,要选择用

linux系统下迁移mysql数据库文件

linux下(这里是centos),mysql安装后,数据库的数据默认存放在/var/lib/mysql目录下,如果该目录下挂载的磁盘空间很少,不够用,需要迁移到其他的目录位置. 方法一: 参照windows下的方法,把/var/lib/mysql移到需要的目录,再修改/etc/my.cnf文件,指定数据目录.这方面的教程网上很多,大家可以去搜索一下. 方法二: 使用linux下的软连接方法,具体操作如下:(以迁移到/home/mysql/目录为例) 先停止mysql: /etc/init.d/

Linux文件系统应用---系统数据备份和迁移(用户角度)

1   前言 首先承诺:对于从Windows系统迁移过来的用户,困扰大家的  “Linux系统下是否可以把系统文件和用户文件分开到C盘和D盘中” 的问题也可以得到完满解决. 之前的文章对Linux的文件系统有过粗略的介绍,但是了解文件系统结构后,有什么用途呢?在本章节将围绕 "基于用户角度的Linux下的数据备份和迁移" 的场景,对Linux文件系统相关知识进行实地应用,产生生产力 . 在了解Linux文件系统之后,就可以 艺高人胆大 玩转Linux的文件目录了. 本文案例 --- &

ubuntu 下 mysql数据库的搭建 及 数据迁移

1.mysql的安装 我是使用apt-get直接安装的 :sudo apt-get install mysql-server sudo apt-get install mysql-client 2.配置mysql管理员密码 sudo mysqladmin -u root 当前密码 新密码 安装的时候貌似也没遇到什么障碍 3.查看mysql的状态 sudo netstat -tap | grep mysql 4.启动/停止/重启mysql sudo  /etc/init.d/mysql start

mysql学习之旅-数据迁移-备份-恢复

1.数据迁移 将/tmp/t3.txt中的数据导入到t3表中,数据以逗号为分割符 load data infile ‘/tmp/t3.txt’ into table t3 fields terminated by ','; 将table2表中的数据导出为文件data.txt,以逗号为分隔符 SELECT * INTO OUTFILE 'data.txt' ->     FIELDS TERMINATED BY ',' ->     FROM table2; #####在mysql命令行内执行