如何將大型 MySQL 轉儲檔案拆分為較小的檔案以克服上傳大小限制?

DDD
發布: 2024-11-11 20:23:03
原創
441 人瀏覽過

How do I split a large MySQL dump file into smaller files to overcome upload size limits?

將Mysqldump 輸出分割成較小的檔案以上傳到容量有限的遠端伺服器

需要將大量資料從一個MySQL 資料庫傳輸到另一個MySQL 資料庫這種情況經常出現,但限製檔案上傳大小等限制可能會帶來挑戰。這在使用 phpMyAdmin 時尤其重要,因為它只允許小於 2MB 的壓縮 .sql 檔案。幸運的是,有一個解決方案可以克服這個障礙。

為了解決這個問題,mysqldump 的輸出可以被精心分割成可管理的區塊,使它們能夠以更小的形式上傳。不幸的是,由於無法在遠端伺服器上將檔案重新連接在一起,因此無法使用 split(1) 實用程式。

替代解決方案:將 MySQL 轉儲輸出進行片段化

以下 bash 腳本中展示了 split(1) 的實用替代方案。它巧妙地將資料庫轉儲文件拆分為單獨的 .sql 文件,每個文件對應一個不同的表。該腳本利用 csplit(一種用於分割檔案的多功能工具),並策略性地使用 START 來識別表邊界。

#!/bin/bash

# Adjust this to your specific scenario:
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 a specific 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*
登入後複製

該解決方案精心地將轉儲文件拆分為單一表特定的 .sql 文件,確保成功上傳到即使文件容量有限也可以遠端伺服器。

以上是如何將大型 MySQL 轉儲檔案拆分為較小的檔案以克服上傳大小限制?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板