首頁  >  文章  >  資料庫  >  如何將 Mysqldump 輸出拆分為更小的檔案以便於伺服器上傳?

如何將 Mysqldump 輸出拆分為更小的檔案以便於伺服器上傳?

Barbara Streisand
Barbara Streisand原創
2024-11-17 03:06:03995瀏覽

How to Split Mysqldump Outputs into Smaller Files for Easier Server Upload?

將Mysqldump 輸出拆分為較小的檔案以供伺服器上傳

嘗試將表格資料​​從一個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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn