喜歡就 關注 我們吧!
簡介:
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 中,隨時可以在微信羣 進行交流,掃下面二維碼 ,備註 “技術進羣” 就可以通過審覈。
進羣的小夥伴請加右側私人微信(備註:技術進羣)
----投稿分隔線----
投稿,關注公衆號回覆“投稿”,專員對接
-----商務合作分隔線----
商務合作,關注公衆號回覆“合作”,專員對接