1、腳本的思路就是:查詢特定賬號(hào)數(shù)據(jù),組裝拼接成sql文本數(shù)據(jù)。這里要注意,對(duì)查詢的值要進(jìn)行過(guò)濾處理,因?yàn)橛行┳侄问前恍┓欠ㄗ址热纾骸▎我?hào)),”(雙引號(hào)),`(鍵盤(pán)左上角第二個(gè)),這些符號(hào)在拼接sql語(yǔ)句時(shí),會(huì)因?yàn)檎也坏介]合的另一端,讓值變了,導(dǎo)致sql語(yǔ)句拼接有問(wèn)題,所以這部分字符要替換掉,我是用str_replace()函數(shù)將這些符號(hào)置為空。
2、我是使用is_numeri函數(shù)判斷值是否是數(shù)字類型結(jié)構(gòu),是的話就加 (雙引號(hào)),但是is_numeri有個(gè)問(wèn)題,遇到有些數(shù)值有e字母的,它也是返回true,

實(shí)錘了這樣是有問(wèn)題的,因?yàn)檫@樣值沒(méi)加 是不能insert到MySQL中的。
后來(lái)我同時(shí)加上is_float(),is_string()函數(shù)同時(shí)來(lái)判斷這個(gè)值是否需要加入雙引號(hào)。
3、由于導(dǎo)出的數(shù)據(jù)量比較多,我是分了4個(gè)PHP進(jìn)程來(lái)跑,一個(gè)進(jìn)程跑一萬(wàn)個(gè)用戶數(shù)據(jù),這樣能夠節(jié)省很多時(shí)間。但是要注意的是,存儲(chǔ)的sql文本也是需要進(jìn)行區(qū)分的,因?yàn)槎鄠€(gè)進(jìn)程同時(shí)寫(xiě)一個(gè)文本文件可能會(huì)出現(xiàn)數(shù)據(jù)丟失(我是后面才發(fā)現(xiàn),花了好多時(shí)間補(bǔ)回去數(shù)據(jù))。
4、使用tar -xcvf 命令對(duì)sql文件進(jìn)行壓縮打包,一個(gè)7G的文件,可以壓縮到700多M,壓縮效果還是不錯(cuò)的。PHP視頻教程
導(dǎo)入數(shù)據(jù)到MySQL1、由于數(shù)據(jù)量比較大,我也是分了幾個(gè)進(jìn)程跑數(shù)據(jù)。使用的是MySQL source 命令來(lái)導(dǎo)入這些大的sql文件
mysql source D:/www/sql/data.sql;
sql文件里面包含了use 數(shù)據(jù)庫(kù),這里就不需要use 數(shù)據(jù)庫(kù)了。
通過(guò)source命令導(dǎo)入多個(gè)文件,可以新建一個(gè)sou.sql文件,里面存放下面的命令
例如:
source c:/1.sql; source c:/2.sql;
這樣就可以在一個(gè)source命令里面導(dǎo)入多個(gè)sql文件了。
期間也有一些問(wèn)題:
出現(xiàn):
mysql Got a packet bigger than max_allowed_packet bytes
查了下,是因?yàn)閱伪頂?shù)據(jù)量較大,大體定位到mysql會(huì)對(duì)單表數(shù)據(jù)量較大的SQL做限制
解決:
更改max_allowed_packet包大小
方案一,臨時(shí)修改:輸入命令 set global max_allowed_packet = 大小; (注意,這里的大小只能填寫(xiě)字節(jié)。重啟mysql服務(wù)后,配置將會(huì)失效!)
方案二,修改my.ini文件,在[mysqld]部分加入 max_allowed_packet=大小
2、由于source命令這種方式不能記錄定位記錄到錯(cuò)誤信息,所以后來(lái)我改用了linux shell方式導(dǎo)入
如下:sql.sh
#!/bin/bash p= d:backup/sql.sql //絕對(duì)路徑 User= abc Password= 123 mysql -u $User -p$Password -e source $f 2 err1.txt;//輸出錯(cuò)誤到文件中,方便后面查詢 echo OK!
這樣導(dǎo)入,可以找到一些錯(cuò)誤的提示,方便后面解決問(wèn)題。 mysql視頻教程
以上就是PHP+MySQL實(shí)現(xiàn)海量數(shù)據(jù)導(dǎo)入導(dǎo)出的總結(jié)的詳細(xì)內(nèi)容,PHP教程
鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。
|
新聞熱點(diǎn)
疑難解答
圖片精選