溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

PHP+MySQL批量數(shù)據(jù)實現(xiàn)導(dǎo)入導(dǎo)出方法

發(fā)布時間:2020-05-15 15:34:03 來源:PHP中文網(wǎng) 閱讀:218 作者:三月 欄目:編程語言

下文主要給大家?guī)鞵HP+MySQL批量數(shù)據(jù)實現(xiàn)導(dǎo)入導(dǎo)出方法,希望這些內(nèi)容能夠帶給大家實際用處,這也是我編輯PHP+MySQL批量數(shù)據(jù)實現(xiàn)導(dǎo)入導(dǎo)出方法這篇文章的主要目的。好了,廢話不多說,大家直接看下文吧。                                                      

PHP腳本的處理

1、腳本的思路就是:查詢特定賬號數(shù)據(jù),組裝拼接成sql文本數(shù)據(jù)。這里要注意,對查詢的值要進行過濾處理,因為有些字段是包含一些非法字符,比如:’(單引號),”(雙引號),`(鍵盤左上角第二個),這些符號在拼接sql語句時,會因為找不到閉合的另一端,讓值變了,導(dǎo)致sql語句拼接有問題,所以這部分字符要替換掉,我是用str_replace()函數(shù)將這些符號置為空。

2、我是使用is_numeri函數(shù)判斷值是否是數(shù)字類型結(jié)構(gòu),是的話就加""(雙引號),但是is_numeri有個問題,遇到有些數(shù)值有e字母的,它也是返回true,

PHP+MySQL批量數(shù)據(jù)實現(xiàn)導(dǎo)入導(dǎo)出方法

實錘了這樣是有問題的,因為這樣值沒加""是不能insert到MySQL中的。

后來我同時加上is_float(),is_string()函數(shù)同時來判斷這個值是否需要加入雙引號。

3、由于導(dǎo)出的數(shù)據(jù)量比較多,我是分了4個PHP進程來跑,一個進程跑一萬個用戶數(shù)據(jù),這樣能夠節(jié)省很多時間。但是要注意的是,存儲的sql文本也是需要進行區(qū)分的,因為多個進程同時寫一個文本文件可能會出現(xiàn)數(shù)據(jù)丟失(我是后面才發(fā)現(xiàn),花了好多時間補回去數(shù)據(jù))。

4、使用tar -xcvf 命令對sql文件進行壓縮打包,一個7G的文件,可以壓縮到700多M,壓縮效果還是不錯的。PHP視頻教程

導(dǎo)入數(shù)據(jù)到MySQL

1、由于數(shù)據(jù)量比較大,我也是分了幾個進程跑數(shù)據(jù)。使用的是MySQL source 命令來導(dǎo)入這些大的sql文件

    mysql>source D:/www/sql/data.sql;

sql文件里面包含了use 數(shù)據(jù)庫,這里就不需要use 數(shù)據(jù)庫了。

通過source命令導(dǎo)入多個文件,可以新建一個sou.sql文件,里面存放下面的命令

例如:

    source c:/1.sql;
    source c:/2.sql;

這樣就可以在一個source命令里面導(dǎo)入多個sql文件了。

期間也有一些問題:

出現(xiàn):

mysql Got a packet bigger than 'max_allowed_packet' bytes

查了下,是因為單表數(shù)據(jù)量較大,大體定位到mysql會對單表數(shù)據(jù)量較大的SQL做限制

解決:

更改max_allowed_packet包大小

方案一,臨時修改:輸入命令 set global max_allowed_packet = 大小; (注意,這里的大小只能填寫字節(jié)。重啟mysql服務(wù)后,配置將會失效!)

方案二,修改my.ini文件,在[mysqld]部分加入 max_allowed_packet=大小

2、由于source命令這種方式不能記錄定位記錄到錯誤信息,所以后來我改用了linux shell方式導(dǎo)入

如下:sql.sh

  #!/bin/bash
    p="d:backup/sql.sql" //絕對路徑
    User='abc'
    Password='123'
     
    mysql -u $User -p$Password -e "source $f"  2>err1.txt;//輸出錯誤到文件中,方便后面查詢     
    echo 'OK!'

這樣導(dǎo)入,可以找到一些錯誤的提示,方便后面解決問題。 

對于以上關(guān)于PHP+MySQL批量數(shù)據(jù)實現(xiàn)導(dǎo)入導(dǎo)出方法,大家是不是覺得非常有幫助。如果需要了解更多內(nèi)容,請繼續(xù)關(guān)注我們的行業(yè)資訊,相信你會喜歡上這些內(nèi)容的。

向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI