Heim >Datenbank >MySQL-Tutorial >Wie teile ich Mysqldump-Ausgaben in kleinere Dateien auf, um das Hochladen auf den Server zu erleichtern?

Wie teile ich Mysqldump-Ausgaben in kleinere Dateien auf, um das Hochladen auf den Server zu erleichtern?

Barbara Streisand
Barbara StreisandOriginal
2024-11-17 03:06:031074Durchsuche

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

Mysqldump-Ausgaben in kleinere Dateien für den Server-Upload aufteilen

Beim Versuch, Tabellendaten von einer MySQL-Datenbank in eine andere zu verschieben, kann es zu Einschränkungen bei der Dateigröße kommen. Wenn die Ausgabe von mysqldump die zulässige Größe zum Hochladen überschreitet, ist eine Methode erforderlich, um die Ausgabe in kleinere Dateien aufzuteilen.

Eine Lösung besteht darin, die Option --extended-insert=FALSE mit mysqldump zu verwenden. Dadurch wird eine .sql-Datei erstellt, die mit split(1) und einer geeigneten Option --lines geteilt werden kann. Wenn cat(1) jedoch nicht auf dem Remote-Server verwendet werden kann, wird diese Methode undurchführbar.

Alternativ kann ein Bash-Skript verwendet werden, um die Dump-Datei in separate Dateien für jede Tabelle aufzuteilen. Das Skript verwendet csplit, um die Datei basierend auf bestimmten Mustern, wie z. B. Tabellenstruktur oder Tabellennamen, zu unterteilen.

Hier ist ein Beispielskript:

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

Dieses Skript geht davon aus, dass die Eingabe-Dumpdatei enthält Tabellenstrukturen und Daten. Es teilt die Datei an Tabellengrenzen auf und weist die Daten jeder Tabelle einer separaten Datei mit dem entsprechenden Dateinamen zu.

Das obige ist der detaillierte Inhalt vonWie teile ich Mysqldump-Ausgaben in kleinere Dateien auf, um das Hochladen auf den Server zu erleichtern?. 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