下文主要給大家?guī)?lái)PHP+MySQL批量數(shù)據(jù)實(shí)現(xiàn)導(dǎo)入導(dǎo)出方法,希望這些內(nèi)容能夠帶給大家實(shí)際用處,這也是我編輯PHP+MySQL批量數(shù)據(jù)實(shí)現(xiàn)導(dǎo)入導(dǎo)出方法這篇文章的主要目的。好了,廢話(huà)不多說(shuō),大家直接看下文吧。
創(chuàng)新互聯(lián)公司是一家專(zhuān)注于成都做網(wǎng)站、成都網(wǎng)站設(shè)計(jì)與策劃設(shè)計(jì),巴楚網(wǎng)站建設(shè)哪家好?創(chuàng)新互聯(lián)公司做網(wǎng)站,專(zhuān)注于網(wǎng)站建設(shè)十余年,網(wǎng)設(shè)計(jì)領(lǐng)域的專(zhuān)業(yè)建站公司;建站業(yè)務(wù)涵蓋:巴楚等地區(qū)。巴楚做網(wǎng)站價(jià)格咨詢(xún):028-86922220PHP腳本的處理
1、腳本的思路就是:查詢(xún)特定賬號(hào)數(shù)據(jù),組裝拼接成sql文本數(shù)據(jù)。這里要注意,對(duì)查詢(xún)的值要進(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ù)字類(lèi)型結(jié)構(gòu),是的話(huà)就加""(雙引號(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è)用戶(hù)數(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ù)到MySQL
1、由于數(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ì)失效?。?/p>
方案二,修改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ò)誤到文件中,方便后面查詢(xún) echo 'OK!'
這樣導(dǎo)入,可以找到一些錯(cuò)誤的提示,方便后面解決問(wèn)題。
對(duì)于以上關(guān)于PHP+MySQL批量數(shù)據(jù)實(shí)現(xiàn)導(dǎo)入導(dǎo)出方法,大家是不是覺(jué)得非常有幫助。如果需要了解更多內(nèi)容,請(qǐng)繼續(xù)關(guān)注我們的行業(yè)資訊,相信你會(huì)喜歡上這些內(nèi)容的。
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線(xiàn),公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性?xún)r(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專(zhuān)為企業(yè)上云打造定制,能夠滿(mǎn)足用戶(hù)豐富、多元化的應(yīng)用場(chǎng)景需求。