PHP脚本的处理
1、脚本的思路便是:查询特定账号数据,组装拼接成sql文本数据。这里要把稳,对查询的值要进行过滤处理,由于有些字段是包含一些造孽字符,比如:’(单引号),”(双引号),`(键盘左上角第二个),这些符号在拼接sql语句时,会由于找不到闭合的另一端,让值变了,导致sql语句拼接有问题,以是这部分字符要更换掉,我是用str_replace()函数将这些符号置为空。
2、我是利用is_numeri函数判断值是否是数字类型构造,是的话就加\"大众\"大众(双引号),但是is_numeri有个问题,碰着有些数值有e字母的,它也是返回true,
实锤了这样是有问题的,由于这样值没加\公众\公众是不能insert到MySQL中的,天坑。
后来我同时加上is_float(),is_string()函数同时来判断这个值是否须要加入双引号。
3、由于导出的数据量比较多,我是分了4个PHP进程来跑,一个进程跑一万个用户数据,这样能够节省很多韶光。但是要把稳的是,存储的sql文本也是须要进行区分的,由于多个进程同时写一个文本文件可能会涌现数据丢失(我是后面才创造,花了好多韶光补回去数据)。
4、利用tar -xcvf 命令对sql文件进行压缩打包,一个7G的文件,可以压缩到700多M,压缩效果还是不错的。
导入数据到MySQL1、由于数据量比较大,我也是分了几个进程跑数据。利用的是MySQL source 命令来导入这些大的sql文件
mysql>source D:/www/sql/data.sql;
sql文件里面包含了use 数据库,这里就不须要use 数据库了。
通过source命令导入多个文件,可以新建一个sou.sql文件,里面存放下面的命令
例如:
source c:/1.sql;source c:/2.sql;
这样就可以在一个source命令里面导入多个sql文件了。
期间也有一些问题:
涌现:mysql Got a packet bigger than 'max_allowed_packet' bytes
查了下,是由于单表数据量较大,大体定位到mysql会对单表数据量较大的SQL做限定
办理:
变动max_allowed_packet包大小
方案一,临时修正:输入命令 set global max_allowed_packet = 大小; (把稳,这里的大小只能填写字节。重启mysql做事后,配置将会失落效!
)
方案二,修正my.ini文件,在[mysqld]部分加入 max_allowed_packet=大小
2、由于source命令这种办法不能记录定位记录到缺点信息,所往后来我改用了linux shell办法导入
如下:
sql.sh
#!/bin/bashp=\公众d:backup/sql.sql\"大众 //绝对路径User='abc'Password='123' mysql -u $User -p$Password -e \"大众source $f\"大众 2>err1.txt;//输出错误到文件中,方便后面查询 echo 'OK!'
这样导入,可以找到一些缺点的提示,方便后面办理问题。
最近一贯忙数据的东西,创造在处理海量数据时,PHP的处理速率是可以了,紧张瓶颈是在MySQL,开了几个进程跑数据,MySQL做事器就顶不住了。后面我们在优化时,可以往MySQL方面进行研究。
本文首发于 微信公号 「phper的进阶之路」,更多干货,欢迎大家搜索关注!