mysql 導入數據太慢,來教你實用乾貨

喜歡就 關注 我們吧!

簡介: 

Hello 各位 ,我是公號「八點半技術站」的創作者 - Bruce.D (姓氏:豆)。

感謝微信給予的個人認證,專注於PHP、數據庫技術領域知識經驗分享。

技術的交流、不僅僅限制於閱讀,在此歡迎各路大神、小白,來「wx技術羣」分享自己的編程經驗心得 與 技術實戰乾貨。

概述:

本篇講解:如何快速導入由邏輯備份產生的SQL腳本,其他文件形式暫不講解

日常開發中,大家肯定遇到過這些需求:“ 數據遷移、數據恢復、新建從庫 ” 等等一系列任務,因爲做這些需求我們肯定知道,會涉及到 大量的數據 的處理。

大量的數據,會導致我們處理數據進度有時會很慢很慢,那麼我們總得找一些方案來解決,對吧。

其實,這也是有一些小技巧的,可以大大增加我們數據的處理速度,那麼就開始吧~~~

小技巧 - 方案一

開場先注意:導出 或 導入數據,儘可能的使用 MySQL 自帶命令工具 ,不要使用一些圖形化的工具 (Navicat...)。因爲 MySQL 命令行工具至少要比圖形化工具快 2 倍 。

命令工具行方式:

# 導出整個實例
mysqldump -u用戶名 -p密碼 --all-databases > all_database.sql


# 導出指定庫
mysqldump -u用戶名 -p密碼 --databases testdb > testdb.sql


# 導出指定表
mysqldump -u用戶名 -p密碼 testdb test_tb > test_tb.sql


# 導入指定SQL文件 (指定導入testdb庫中)
mysql -u用戶名 -p密碼 testdb < testdb.sql

小技巧 - 方案二

修改參數方式:

在 MySQL 中,有這麼一對參數很有意思,分別是:

“ innodb_flush_log_at_trx_commit ” 
      與
“ sync_binlog ”

安全性考慮,這個參數默認是 1 ,爲了快速導入sql 數據,可臨時修改默認參數值。

參數一: innodb_flush_log_at_trx_commit默認值爲1,可設置爲0、1、2

innodb_flush_log_at_trx_commit 設置爲 0,log buffer將每秒一次地寫入log file中,並且log file的flush(刷到磁盤)操作同時進行.該模式下,在事務提交的時候,不會主動觸發寫入磁盤的操作。

innodb_flush_log_at_trx_commit設置爲 1,每次事務提交時MySQL都會把log buffer的數據寫入log file,並且flush(刷到磁盤)中去。

innodb_flush_log_at_trx_commit設置爲 2,每次事務提交時MySQL都會把log buffer的數據寫入log file.但是flush(刷到磁盤)操作並不會同時進行。該模式下,MySQL會每秒執行一次 flush(刷到磁盤)操作。

參數二: sync_binlog默認值爲1,可設置爲[0,N)

當 sync_binlog =0,像操作系統刷其他文件的機制一樣,MySQL不會同步到磁盤中去而是依賴操作系統來刷新binary log。

當 sync_binlog =N (N>0) ,MySQL 在每寫 N次 二進制日誌binary log時,會使用fdatasync()函數將它的寫二進制日誌binary log同步到磁盤中去。

注意:這兩個參數可以在線修改,若想快速導入,可按照以下命令行

# 1.進入MySQL命令行 臨時修改這兩個參數
set global innodb_flush_log_at_trx_commit = 2;
set global sync_binlog = 2000;


# 2.執行SQL腳本導入
mysql -uroot -pxxxxxx testdb < testdb.sql


# 3.導入完成 再把參數改回來
set global innodb_flush_log_at_trx_commit = 1;
set global sync_binlog = 1;

小技巧 - 方案三

這種場景也很熟悉,就是新建從庫,並且不需要生成 binlog 日誌。

解決方式很簡單,在 sql 腳本開頭增加:

set sql_log_bin=0;

然後繼續執行導入,這樣速度也會加快。(如MySQL沒開啓binlog,則無需執行該語句)

到這裏也就結束了,首先恭喜你又閱讀完一篇文章,如果你認爲有收穫那麼收藏轉發起來,幫助需要的夥伴。

方案方式很多,就看你是否越意去研究、去發現,歡迎評論區留言~~~ 

往下拉,有乾貨

和我再戰 n+1 天

同時,爲了方便大家學習,我會把一些源碼、技術乾貨存儲到 github 中,隨時可以在微信羣 進行交流,掃下面二維碼 ,備註 “技術進羣” 就可以通過審覈。

進羣的小夥伴請加右側私人微信(備註:技術進羣)

----投稿分隔線----

投稿,關注公衆號回覆“投稿”,專員對接

-----商務合作分隔線----

商務合作,關注公衆號回覆“合作”,專員對接

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章