国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 數(shù)據(jù)庫(kù) > MySQL > 正文

PHP+MySQL實(shí)現(xiàn)海量數(shù)據(jù)導(dǎo)入導(dǎo)出的總結(jié)

2020-03-22 17:40:45
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友
前段時(shí)間有個(gè)需求:將生產(chǎn)環(huán)境的部分?jǐn)?shù)據(jù)轉(zhuǎn)移到測(cè)試服務(wù)器進(jìn)行測(cè)試。由于只需要導(dǎo)入特定賬號(hào)的數(shù)據(jù),我就想著將寫(xiě)個(gè)腳本,將數(shù)據(jù)組裝成sql語(yǔ)句導(dǎo)出為sql文件,然后轉(zhuǎn)移到測(cè)試服務(wù)器,導(dǎo)入到html' target='_blank'>MySQL中。想象是美好的,過(guò)程是痛苦的,下面總結(jié)下幾點(diǎn)。

PHP腳本的處理

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ù)到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ì)失效!)

方案二,修改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)系我們修改或刪除,多謝。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 临澧县| 呼图壁县| 娄烦县| 霍邱县| 东乡| 铁岭县| 阜城县| 马关县| 安图县| 鄂托克旗| 玛多县| 武威市| 甘肃省| 忻城县| 民乐县| 连江县| 尤溪县| 瑞丽市| 运城市| 镇宁| 镇康县| 秦皇岛市| 海安县| 婺源县| 三亚市| 丹巴县| 永胜县| 崇仁县| 斗六市| 苗栗市| 南乐县| 彰化县| 巴林右旗| 土默特左旗| 景宁| 晴隆县| 贵南县| 腾冲县| 太保市| 连城县| 恩施市|