Rumah > pangkalan data > tutorial mysql > Bagaimana untuk Memisahkan Dump MySQL yang Besar kepada Fail yang Lebih Kecil?

Bagaimana untuk Memisahkan Dump MySQL yang Besar kepada Fail yang Lebih Kecil?

DDD
Lepaskan: 2024-11-24 22:39:11
asal
252 orang telah melayarinya

How to Split a Large MySQL Dump into Smaller Files?

Memisahkan Output mysqldump Besar kepada Fail yang Lebih Kecil

Ia menjadi perlu untuk memindahkan jadual dari satu pangkalan data ke pangkalan data yang lain, tetapi output dump dari mysqldump adalah selalunya terlalu besar untuk had muat naik tertentu. Artikel ini meneroka penyelesaian bijak untuk membahagikan output mysqldump yang besar kepada fail yang boleh diurus dan lebih kecil.

Satu pendekatan berpotensi yang dicadangkan oleh skrip shell ialah membahagikan dump kepada fail berasingan untuk setiap jadual. Ini boleh dicapai menggunakan arahan csplit dan menentukan penanda struktur jadual sebagai titik pemisah.

Pertimbangkan skrip bash ini yang menggunakan teknik ini:

#!/bin/bash

####
# Split MySQL dump SQL file into one file per table
# based on https://gist.github.com/jasny/1608062
####

#adjust this to your case:
START="/-- Table structure for table/"
# or 
#START="/DROP TABLE IF EXISTS/"


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 menggunakan csplit untuk memisahkan fail dump ke dalam fail jadual individu, dengan setiap fail dinamakan sempena jadual yang sepadan. Ini membolehkan pemasangan semula mudah menjadi satu fail kemudian. Untuk menggunakan skrip ini, hanya sediakan laluan ke fail dump sebagai argumen pertama dan secara pilihan tentukan jadual tertentu untuk diekstrak sebagai argumen kedua.

Atas ialah kandungan terperinci Bagaimana untuk Memisahkan Dump MySQL yang Besar kepada Fail yang Lebih Kecil?. 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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan