嘗試將表格資料從一個MySQL 資料庫移至另一個檔案時,可能會出現檔案大小限制。如果 mysqldump 的輸出超出了允許的上傳大小,則需要一種方法將輸出分割為更小的檔案。
一種解決方案涉及在 mysqldump 中使用 --extended-insert=FALSE 選項。這將創建一個 .sql 文件,可以使用 split(1) 和合適的 --lines 選項來拆分該文件。但是,如果 cat(1) 無法在遠端伺服器上使用,則此方法變得不可行。
或者,可以使用 bash 腳本將轉儲檔案分割為每個資料表的單獨檔案。腳本使用 csplit 根據特定模式(例如表格結構或表格名稱)劃分檔案。
以下是一個範例腳本:
#!/bin/bash START="/-- Table structure for table/" 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*
此腳本假設輸入轉儲檔案包含表格結構和資料。它在表邊界處分割文件,並將每個表的資料分配給具有適當文件名的單獨文件。
以上是如何將 Mysqldump 輸出拆分為更小的檔案以便於伺服器上傳?的詳細內容。更多資訊請關注PHP中文網其他相關文章!