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!