MySQL命令行導(dǎo)入SQL文件的流程步驟
1. 使用命令行直接導(dǎo)入
mysql -u your_username -p your_database < your_file.sql
2.分割大型 SQL 文件
如果 SQL 文件非常大,可以將其分割成多個小文件:
# 使用 split 命令分割文件(每 1000 行一個文件) split -l 1000 large_file.sql chunk_ # 逐個導(dǎo)入分割后的文件 for file in chunk_*; do echo "Importing $file..." mysql -u your_username -p your_database < $file done
3.使用進(jìn)度顯示工具(推薦)
對于大型 SQL 文件,可以使用 pv 命令(Pipe Viewer)來顯示導(dǎo)入進(jìn)度:
# 安裝 pv(如果尚未安裝) sudo apt-get install pv # Ubuntu/Debian sudo yum install pv # CentOS/RHEL # 使用 pv 導(dǎo)入 pv your_file.sql | mysql -u your_username -p your_database
使用pv監(jiān)控導(dǎo)入進(jìn)度
安裝好后,你可以用下面這個命令來導(dǎo)入并查看進(jìn)度:
pv ssy-edu_2025-09-12_11-39-04_mysql_data.sql | mysql -ussy -qh -p ssy-qh
執(zhí)行后,pv會顯示一個進(jìn)度條,包括已用時間、進(jìn)度百分比、數(shù)據(jù)傳輸速率和預(yù)計剩余時間(ETA)。
顯示更多信息
如果你想看更詳細(xì)的信息,可以加上-pterb參數(shù):
pv -pterb ssy-edu_2025-09-12_11-39-04_mysql_data.sql | mysql -ussy -qh -p ssy-qh
-p:顯示進(jìn)度條-t:顯示已用時間-e:顯示預(yù)計剩余時間(ETA)-r:顯示數(shù)據(jù)傳輸速率-b:顯示已傳輸?shù)淖止?jié)數(shù)
如果暫時無法安裝pv
| 查看MySQL進(jìn)程狀態(tài) | mysql -u user -p -e 'SHOW PROCESSLIST;' | 查看當(dāng)前執(zhí)行的SQL語句和狀態(tài) |
4.其他優(yōu)化點
先清空數(shù)據(jù)庫再導(dǎo)入 是一個非常合理且推薦的做法,尤其是在你反復(fù)遇到 Table already exists 錯誤和查詢中斷的情況下。這可以確保一個干凈的初始狀態(tài),避免很多沖突。
但是,請務(wù)必謹(jǐn)慎操作,因為清空數(shù)據(jù)庫會永久刪除所有現(xiàn)有數(shù)據(jù)。
非常重要:首先備份?。ㄈ绻阈枰A舢?dāng)前數(shù)據(jù))
如果你當(dāng)前數(shù)據(jù)庫里有需要保留的數(shù)據(jù),請先備份:
# 使用 mysqldump 備份整個數(shù)據(jù)庫 mysqldump -u your_username -p your_database > backup_before_import.sql
或者只備份某些重要的表。
使用 MySQL 命令(逐行執(zhí)行)
-- 方法A:
-- 1. 連接到 MySQL
mysql -u your_username -p
-- 2. 選擇你的數(shù)據(jù)庫
USE your_database_name;
-- 3. 禁用外鍵檢查,避免刪除時因外鍵約束而失敗
SET FOREIGN_KEY_CHECKS = 0;
-- 4. 生成并執(zhí)行刪除所有表的命令
-- 這會查詢出所有表名,并生成一系列的 DROP TABLE 語句
SELECT CONCAT('DROP TABLE IF EXISTS `', table_name, '`;')
FROM information_schema.tables
WHERE table_schema = 'your_database_name';
-- 【注意】上面一句只會生成命令,不會執(zhí)行。你需要復(fù)制輸出的結(jié)果,然后粘貼執(zhí)行。
-- 或者使用以下更自動化的方法:-- 方法B:使用命令行工具(更高效,一鍵完成)
# 此命令會直接清空整個數(shù)據(jù)庫
mysql -u your_username -p -e "SET FOREIGN_KEY_CHECKS = 0; \
SELECT CONCAT('DROP TABLE IF EXISTS \`', table_name, '\`;') \
FROM information_schema.tables \
WHERE table_schema = 'your_database_name'" | \
grep '^DROP' | \
mysql -u your_username -p your_database_name一句更強(qiáng)力的清空命令(包括視圖和存儲過程):
# 1. 刪除整個數(shù)據(jù)庫(這會刪除所有數(shù)據(jù)和表結(jié)構(gòu)) mysql -u your_username -p -e "DROP DATABASE your_database_name;" # 2. 創(chuàng)建一個新的空數(shù)據(jù)庫 mysql -u your_username -p -e "CREATE DATABASE your_database_name CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;"
這是最徹底的方法,推薦使用。
以上就是MySQL命令行導(dǎo)入SQL文件的流程步驟的詳細(xì)內(nèi)容,更多關(guān)于MySQL命令行導(dǎo)入SQL文件的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
關(guān)于MySQL 大批量插入時如何過濾掉重復(fù)數(shù)據(jù)
這篇文章主要介紹關(guān)于MySQL 大批量插入時如何過濾重復(fù)數(shù)據(jù),比如線上庫有6個表存在重復(fù)數(shù)據(jù),其中2個表比較大,96萬+和30萬+,因為之前處理過相同的問題,就直接拿來了上次的Python去重腳本,腳本很簡單,就是連接數(shù)據(jù)庫,查出來重復(fù)數(shù)據(jù),循環(huán)刪除,需要的朋友可以參考下2021-09-09
MySql報錯:Duplicate entry ‘10‘ for key&nbs
經(jīng)常遇到這個問題,今天我把這個問題記錄下來,以后如果有其他人遇到相同的問題,不至于困惑,在操作數(shù)據(jù)庫的時候,經(jīng)常會出現(xiàn)Duplicate entry ‘10’ for key 'PRIMARY’這樣的報錯,本文將給大家講講如何解決這個問題,需要的朋友可以參考下2023-10-10
windows下MySQL數(shù)據(jù)庫移動到其它盤
大家好,本篇文章主要講的是windows下MySQL數(shù)據(jù)庫移動到其它盤,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏2021-12-12
MySQL進(jìn)行g(shù)roup by字段返回大量異常結(jié)果的問題解決
本文主要介紹了MySQL進(jìn)行g(shù)roup by字段返回大量異常結(jié)果的問題解決,文中通過代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2024-05-05
MySQL數(shù)據(jù)庫查詢之多表查詢總結(jié)
最近遇到了多表查詢的需求,也稱為關(guān)聯(lián)查詢,指兩個或更多個表一起完成查詢操作,下面這篇文章主要給大家介紹了關(guān)于MySQL數(shù)據(jù)庫查詢之多表查詢的相關(guān)資料,文中通過實例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-08-08

