Rumah > pangkalan data > tutorial mysql > Bagaimana untuk Memisahkan Output Mysqldump kepada Fail yang Lebih Kecil untuk Muat Naik Pelayan Lebih Mudah?

Bagaimana untuk Memisahkan Output Mysqldump kepada Fail yang Lebih Kecil untuk Muat Naik Pelayan Lebih Mudah?

Barbara Streisand
Lepaskan: 2024-11-17 03:06:03
asal
1064 orang telah melayarinya

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

Memisahkan Output Mysqldump kepada Fail yang Lebih Kecil untuk Muat Naik Pelayan

Apabila cuba mengalihkan data jadual dari satu pangkalan data MySQL ke pangkalan data yang lain, had dalam saiz fail mungkin berlaku. Jika output daripada mysqldump melebihi saiz yang dibenarkan untuk muat naik, kaedah diperlukan untuk membahagikan output kepada fail yang lebih kecil.

Satu penyelesaian melibatkan penggunaan pilihan --extended-insert=FALSE dengan mysqldump. Ini mencipta fail .sql yang boleh dipecah menggunakan split(1) dengan pilihan --lines yang sesuai. Walau bagaimanapun, jika cat(1) tidak boleh digunakan pada pelayan jauh, kaedah ini menjadi tidak boleh dilaksanakan.

Sebagai alternatif, skrip bash boleh digunakan untuk memisahkan fail dump kepada fail berasingan untuk setiap jadual. Skrip menggunakan csplit untuk membahagikan fail berdasarkan corak tertentu, seperti struktur jadual atau nama jadual.

Berikut ialah skrip contoh:

#!/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*
Salin selepas log masuk

Skrip ini menganggap bahawa fail dump input mengandungi struktur jadual dan data. Ia membahagikan fail pada sempadan jadual dan memperuntukkan setiap data jadual kepada fail berasingan dengan nama fail yang sesuai.

Atas ialah kandungan terperinci Bagaimana untuk Memisahkan Output Mysqldump kepada Fail yang Lebih Kecil untuk Muat Naik Pelayan Lebih Mudah?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan