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!