將大型mysqldump 輸出拆分為較小的檔案
有必要將表從一個資料庫傳輸到另一個資料庫,但mysqldump的轉儲輸出是對於某些上傳限制來說通常太大。本文探討了一個巧妙的解決方案,將龐大的 mysqldump 輸出拆分為可管理的較小檔案。
shell 腳本建議的一種潛在方法是將轉儲拆分為每個表的單獨檔案。這可以使用 csplit 命令並指定表結構標記作為分割點來實現。
考慮使用此技術的 bash 腳本:
#!/bin/bash #### # Split MySQL dump SQL file into one file per table # based on https://gist.github.com/jasny/1608062 #### #adjust this to your case: START="/-- Table structure for table/" # or #START="/DROP TABLE IF EXISTS/" if [ $# -lt 1 ] || [[ == "--help" ]] || [[ == "-h" ]] ; then echo "USAGE: extract all tables:" echo " DUMP_FILE" echo "extract one table:" echo " DUMP_FILE [TABLE]" exit fi if [ $# -ge 2 ] ; then #extract one table csplit -s -ftable "/-- Table structure for table/" "%-- Table structure for table \`\`%" "/-- Table structure for table/" "%40103 SET TIME_ZONE=@OLD_TIME_ZONE%1" else #extract all tables csplit -s -ftable "$START" {*} fi [ $? -eq 0 ] || exit mv table00 head FILE=`ls -1 table* | tail -n 1` if [ $# -ge 2 ] ; then # cut off all other tables mv $FILE foot else # cut off the end of each file csplit -b '%d' -s -f$FILE $FILE "/40103 SET TIME_ZONE=@OLD_TIME_ZONE/" {*} mv ${FILE}1 foot fi for FILE in `ls -1 table*`; do NAME=`head -n1 $FILE | cut -d$'x60' -f2` cat head $FILE foot > "$NAME.sql" done rm head foot table*
此腳本使用 csplit 來分割轉儲文件分成單獨的表文件,每個文件以相應的表命名。這允許稍後輕鬆地重新組裝成單一檔案。若要使用此腳本,只需提供轉儲檔案的路徑作為第一個參數,並可選擇指定要擷取的特定資料表作為第二個參數。
以上是如何將大型 MySQL 轉儲拆分為較小的檔案?的詳細內容。更多資訊請關注PHP中文網其他相關文章!