mysql sql大文件導(dǎo)入正確姿勢
在 MySQL 中導(dǎo)入大文件時,mysql source 導(dǎo)入大文件速度太慢,可能會遇到性能問題或內(nèi)存限制。以下是一些優(yōu)化導(dǎo)入大文件的建議,需要的朋友可以參考一下
1. 使用 LOAD DATA INFILE
LOAD DATA INFILE
是 MySQL 提供的快速導(dǎo)入數(shù)據(jù)的方式,比逐條 INSERT
語句快得多。
LOAD DATA INFILE '/path/to/your/file.csv' INTO TABLE your_table FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\n' IGNORE 1 ROWS; -- 如果有標題行,可以忽略
2. 調(diào)整 MySQL 配置
如果文件非常大,可能需要調(diào)整 MySQL 的配置參數(shù):
- max_allowed_packet: 增加允許的最大數(shù)據(jù)包大小。
- innodb_buffer_pool_size: 增加 InnoDB 緩沖池的大小,以提高性能。
- bulk_insert_buffer_size: 增加批量插入緩沖區(qū)的大小。
SET GLOBAL max_allowed_packet = 1G; SET GLOBAL innodb_buffer_pool_size = 2G; SET GLOBAL bulk_insert_buffer_size = 256M;
3. 分批導(dǎo)入
如果文件過大,可以將其拆分為多個小文件,分批導(dǎo)入。
4. 禁用索引和外鍵檢查
在導(dǎo)入數(shù)據(jù)時,禁用索引和外鍵檢查可以顯著提高性能。
ALTER TABLE your_table DISABLE KEYS; SET FOREIGN_KEY_CHECKS = 0; -- 導(dǎo)入數(shù)據(jù) ALTER TABLE your_table ENABLE KEYS; SET FOREIGN_KEY_CHECKS = 1;
5. 使用命令行工具
可以使用 mysql
命令行工具導(dǎo)入數(shù)據(jù):
mysql -u username -p database_name < /path/to/your/file.sql
6. 使用 mysqldump 和 mysqlimport
對于大型 SQL 文件,可以使用 mysqldump
導(dǎo)出數(shù)據(jù),再使用 mysqlimport
導(dǎo)入。
mysqldump -u username -p database_name > backup.sql mysql -u username -p database_name < backup.sql
7. 使用第三方工具
有一些第三方工具可以幫助導(dǎo)入大文件,如 pt-archiver
或 mydumper
/myloader
。
8. 優(yōu)化表結(jié)構(gòu)
確保表結(jié)構(gòu)合理,避免不必要的索引和約束,以提高導(dǎo)入速度。
9. 使用事務(wù)
將多個 INSERT
語句放在一個事務(wù)中,可以減少提交次數(shù),提高性能。
START TRANSACTION; INSERT INTO your_table VALUES (...); INSERT INTO your_table VALUES (...); -- 更多 INSERT 語句 COMMIT;
10. 監(jiān)控和調(diào)整
在導(dǎo)入過程中,監(jiān)控系統(tǒng)資源使用情況(如 CPU、內(nèi)存、磁盤 I/O),并根據(jù)需要調(diào)整配置。
通過這些方法,可以有效地導(dǎo)入大文件到 MySQL 數(shù)據(jù)庫中。
11.解決方案
- 關(guān)閉二進制日志和事務(wù)自動提交
- 手動開啟事務(wù),導(dǎo)入數(shù)據(jù)
- 提交事務(wù)
- 重新開啟二進制日志和事務(wù)自動提交
set sql_log_bin=off; set autocommit=0; start transaction; source 文件.sql; commit; set sql_log_bin=on; set autocommit=1;
到此這篇關(guān)于mysql sql大文件導(dǎo)入正確姿勢的文章就介紹到這了,更多相關(guān)mysql 大文件導(dǎo)入內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- 利用Sqoop實現(xiàn)MySQL數(shù)據(jù)導(dǎo)入Hive的全流程
- 使用mysqldump導(dǎo)出導(dǎo)入mysql表結(jié)構(gòu)或者數(shù)據(jù)
- MySQL解決數(shù)據(jù)導(dǎo)入導(dǎo)出含有外鍵的方案
- 如何解決mysql執(zhí)行導(dǎo)入sql文件速度太慢的問題
- 解決SQL文件導(dǎo)入MySQL數(shù)據(jù)庫1118錯誤的問題
- mysql導(dǎo)入sql文件失敗的解決方案
- 如何解決mysql導(dǎo)入sql文件慢、錯等問題
- Navicat導(dǎo)入導(dǎo)出Mysql?結(jié)構(gòu)、數(shù)據(jù)、結(jié)構(gòu)+數(shù)據(jù)完整步驟
- MySQL導(dǎo)入.CSV數(shù)據(jù)中文亂碼的解決方式
- Mysql命令行導(dǎo)出SQL文件和導(dǎo)入文件詳細步驟
- MySQL數(shù)據(jù)導(dǎo)入導(dǎo)出的三種辦法總結(jié)
- mysql導(dǎo)入導(dǎo)出數(shù)據(jù)的示例詳解
相關(guān)文章
MySQl數(shù)據(jù)庫必知必會sql語句(加強版)
本文給大家分享了一篇關(guān)于mysql數(shù)據(jù)庫必會sql語句加強版內(nèi)容,非常不錯,具有參考借鑒價值,需要的朋友參考下吧2017-04-04MySQL實現(xiàn)統(tǒng)計過去12個月每個月的數(shù)據(jù)信息
這篇文章主要介紹了MySQL實現(xiàn)統(tǒng)計過去12個月每個月的數(shù)據(jù)信息,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-12-12MYSQL數(shù)據(jù)表損壞的原因分析和修復(fù)方法小結(jié)(推薦)
MYSQL數(shù)據(jù)表損壞的原因分析和修復(fù)方法小結(jié),碰到的朋友可以參考,下面整理一些比較全,希望對大家有所幫助。2011-01-01centos7環(huán)境下源碼安裝mysql5.7.16的方法詳解
這篇文章主要介紹了centos7環(huán)境下源碼安裝mysql5.7.16的方法,詳細分析了centos7環(huán)境下MySQL安裝的相關(guān)步驟、操作命令、配置方法與注意事項,需要的朋友可以參考下2020-02-02