Rumah  >  Artikel  >  pangkalan data  >  Bagaimanakah saya boleh membahagikan fail dump MySQL yang besar kepada fail yang lebih kecil untuk mengatasi had saiz muat naik?

Bagaimanakah saya boleh membahagikan fail dump MySQL yang besar kepada fail yang lebih kecil untuk mengatasi had saiz muat naik?

DDD
DDDasal
2024-11-11 20:23:03441semak imbas

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

Memisahkan Output Mysqldump kepada Fail yang Lebih Kecil untuk Muat Naik ke Pelayan Jauh dengan Kapasiti Terhad

Keperluan untuk memindahkan data besar daripada satu pangkalan data MySQL ke pangkalan data yang lain selalunya timbul, tetapi had seperti saiz muat naik fail terhad boleh menimbulkan cabaran. Ini amat penting apabila menggunakan phpMyAdmin, yang membenarkan hanya fail .sql yang dimampatkan yang lebih kecil daripada 2MB. Nasib baik, wujud penyelesaian untuk mengatasi halangan ini.

Untuk menyelesaikan isu ini, output mysqldump boleh dipecahkan dengan teliti kepada bahagian yang boleh diurus, membolehkannya dimuat naik dalam bentuk yang lebih kecil. Malangnya, utiliti split(1) tidak boleh digunakan kerana ketidakupayaan untuk menggabungkan fail kembali bersama pada pelayan jauh.

Penyelesaian Alternatif: Memecahkan Output Dump MySQL

Alternatif praktikal untuk split(1) dipamerkan dalam skrip bash berikut. Ia dengan cekap membahagikan fail pembuangan pangkalan data kepada fail .sql individu, setiap satu sepadan dengan jadual yang berbeza. Skrip memanfaatkan csplit, alat serba boleh untuk membelah fail dan secara strategik menggunakan MULA untuk mengenal pasti sempadan jadual.

#!/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*

Penyelesaian ini membahagikan fail dump dengan teliti kepada fail .sql khusus jadual individu, memastikan muat naik yang berjaya ke pelayan jauh walaupun dengan kapasiti fail terhad.

Atas ialah kandungan terperinci Bagaimanakah saya boleh membahagikan fail dump MySQL yang besar kepada fail yang lebih kecil untuk mengatasi had saiz muat naik?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn