问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

freeradius与mySQL联用的最简单例程失败,不知原因出在哪里

发布网友 发布时间:2022-04-23 04:58

我来回答

2个回答

懂视网 时间:2022-04-09 09:00

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

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

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 ‘ ‘ 换行符*/

 

/*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 zwfayf@‘%‘;

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文件时,设置字段值用制表符 括起来(outfile ‘e:\test.csv‘fields terminated by ‘,‘ optionally enclosed by ‘ ‘ lines terminated by ‘ ‘),

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

这样打开导出的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 ‘ ‘  //设置行结束符为换行符

 

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由于数据涉及到公司的机密,故再次就不一一附图。

 

本文至此结束。



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

标签:mysql数据库应用

热心网友 时间:2022-04-09 06:08

1. 创建数据库

mysql -u root -p
CREATE DATABASE radius;
GRANT ALL ON radius.* TO radius@localhost IDENTIFIED BY "radpass";
exit

上述命令创建了一个名为radius的数据库,并且创建了一个名为radius@localhost,密码为radpass的数据库用户,并赋予相应权限。

2. MySQL中表结构的定义

针对FreeRadius2,数据表的设计和结构定义在下面的文件中:
/etc/raddb/sql/mysql/schema.sql 主数据库定义,7个表,包括
radcheck 用户检查信息表
radreply 用户回复信息表
radgroupcheck 用户组检查信息表

radgroupreply 用户组检查信息表

rasergroup 用户和组关系表
radacct 计费情况表
radpostauth 认证后处理信息,可以包括认证请求成功和拒绝的记录。

/etc/raddb/sql/mysql/nas.sql 网络设备定义,只有一个表
nas 网络设备表
下面的表用于一些扩展功能,可以按需导入。
ippool.sql ip池
wimax.sql wimax设备支持
cui.sql cui 支持
详细的表定义参见: http://wiki.freeradius.org/MySQL_DDL_script
3. 导入和建立表结构

mysql -u root -p radius < /etc/raddb/sql/mysql/schema.sql mysql -u root -p radius < /etc/raddb/sql/mysql/nas.sql
上述命令执行schema.sql和nas.sql的sql语句,建立相应的数据库结构。

4.FreeRadius2配置,重要!!
- radius主配置文件包括sql部分: /etc/raddb/radiusd.conf$INCLUDE sql.conf

否则会出现错误:
Failed to load mole "sql".
同时还会影响freeradius其他模块的安装,出现错误:
E: Sub-process /usr/bin/dpkg returned an error code (1)

- 数据库设置 /etc/raddb/sql.conf,和数据库定义相符(数据库服务器、用户密码、表名称等等):
database = "mysql"

login = "radius"

password = "radpass"

- 数据库功能性定义文件: /etc/raddb/sites-available/default
实现相关模块对数据库的支持
authorize(认证),accounting(审计),session(会话,用于监测同时连接),post_auth(记录) 子段加入sql关键字,如:authorize {
preprocess
chap
mschap
suffix
eap
sql
pap
}
--配置数据库记录所有(包括拒绝reject)认证请求默认情况下,SQL模块仅记录认证成功的请求(可能是基于防止数据库快速增加和ddos攻击的考虑),如果我们基于统计的考虑需要开启这个功能的话,非常简单,还是在 /etc/raddb/sites-available/default 中的 post_auth区段中,找到或增加Post_Auth_Type REJECT 子类型,增加sql 关键字就可以了,它的原理是,在认证后,如果失败,就进入Post-Auth-Type REJECT子类型,如果定义了sql,系统会调用 /sql/mysql/dialup.conf 文件中的 postauth_query= 定义的sql语句进行处理。 post-auth { .... sql .... Post-Auth-Type REJECT {
# Login failed: log to SQL database.
sql
}} 5. 测试添加测试用帐号:mysql -u root -puse radiusinsert into radcheck (username,attribute,value,op) values ('userdbtest','Cleartext-Password','password123',':=')使用测试帐号进行测试:启动服务器或者使用调试模式:service radiusd restart测试客户端:radtest userdb password123 localhost 10 testing123
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
临沂比较有名的男装品牌 呼伦贝尔市悦动网络科技有限公司怎么样? 呼伦贝尔中汇实业有限公司怎么样? 呼伦贝尔油玉不绝电子商务有限公司怎么样? 如何避免wps卡顿? 属鼠的男人找对象是属什么,属鼠的人和什么属相合 96年鼠的姻缘在哪年 属相相合年份运势提升 2024属鼠找对象属什么最佳 黑客攻击网站能报案吗 黑客攻击报案有用吗 如何用tensorflow和tf-slim实现图像分类 write sentences about the past using used to怎么写 DataPreprocess.m是什么类型文件,如何执行? error C2664: “CPreProcessCommand::ParseCmd”: 不能将参数 1 从“char *”转换为“LPCTSTR &” 串的应用kmp算法。求一个字符串在另一个字符串中第一次出现的位置。_百... 如何创建DSP工程文件 python如何调用另一个py文件的所有函数? r语言rpart函数是怎么处理缺失值的 KMP算法详细代码 C或C++的a.out 如何仅在特定的方法使用RestEasy的PreProcessInterceptor 模板说是什么? 支持向量机中所谓的支持向量究竟是什么? weka 3.4 预处理面板(preprocess)中 如何打开csv文件? “影视后期制作者”的英文怎么写 求翻译词组 自己家的车撞了自己家的车保险赔吗 我自己开车把车的后保险杠撞坏了,保险公司赔吗? 我自己把汽车撞坏了,该怎么走保险? 自己把车撞了走交强险? include的命令 世界上最复杂的程序算法有哪些? 梦见一家大饭店? 周公解梦,求解梦!奇梦求解。 周公解梦梦见一家人在一起饭店一起吃饭什么意思啊? 梦见去富人老婆开的饭店去吃饭是什么? 梦见自己跟老公准备接手一家餐馆? 如何恢复系统数据库? SQL数据库系统破坏后如何恢复?已被重装系统。 oa系统怎么恢复数据库? 数据库系统故障时,应如何恢复 如何还原数据库 如何修复数据库 电脑重装系统后如何恢复Mysql数据库 重装系统后,怎么恢复oracle数据库? 怎么还原,恢复或导入MySQL数据库 如何恢复master数据库 怎么修复已经损坏的SQL数据库? 什么牌子的大闸蟹最好吃? 初次见面敬酒词?