Heim  >  Artikel  >  Datenbank  >  Wie teile ich einen großen MySQL-Dump in kleinere Dateien auf?

Wie teile ich einen großen MySQL-Dump in kleinere Dateien auf?

DDD
DDDOriginal
2024-11-24 22:39:11216Durchsuche

How to Split a Large MySQL Dump into Smaller Files?

Große mysqldump-Ausgabe in kleinere Dateien aufteilen

Es wird notwendig, Tabellen von einer Datenbank in eine andere zu übertragen, die Dump-Ausgabe von mysqldump jedoch oft zu groß für bestimmte Upload-Limits. In diesem Artikel wird eine clevere Lösung untersucht, um umfangreiche mysqldump-Ausgaben in überschaubare, kleinere Dateien aufzuteilen.

Ein möglicher Ansatz, der von Shell-Scripting vorgeschlagen wird, besteht darin, den Dump für jede Tabelle in separate Dateien aufzuteilen. Dies kann mit dem Befehl csplit und der Angabe von Tabellenstrukturmarkierungen als Aufteilungspunkte erreicht werden.

Betrachten Sie dieses Bash-Skript, das diese Technik verwendet:

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

Dieses Skript verwendet csplit, um die Dump-Datei aufzuteilen in einzelne Tabellendateien, wobei jede Datei nach der entsprechenden Tabelle benannt ist. Dies ermöglicht ein späteres einfaches Zusammenfügen in einer einzigen Datei. Um dieses Skript zu verwenden, geben Sie einfach den Pfad zur Dump-Datei als erstes Argument an und geben Sie optional eine bestimmte zu extrahierende Tabelle als zweites Argument an.

Das obige ist der detaillierte Inhalt vonWie teile ich einen großen MySQL-Dump in kleinere Dateien auf?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn