Aufteilen der Mysqldump-Ausgabe in kleinere Dateien zum Hochladen auf einen Remote-Server mit begrenzter Kapazität
Die Notwendigkeit, umfangreiche Daten von einer MySQL-Datenbank in eine andere zu übertragen kommt häufig vor, aber Einschränkungen wie eingeschränkte Datei-Upload-Größen können eine Herausforderung darstellen. Dies ist besonders wichtig, wenn Sie phpMyAdmin verwenden, das nur komprimierte .sql-Dateien zulässt, die kleiner als 2 MB sind. Glücklicherweise gibt es eine Lösung, um dieses Hindernis zu überwinden.
Um dieses Problem zu lösen, kann die Ausgabe von mysqldump sorgfältig in überschaubare Teile fragmentiert werden, sodass sie in ihrer kleineren Form hochgeladen werden können. Leider kann das Dienstprogramm split(1) nicht verwendet werden, da die Dateien auf dem Remote-Server nicht wieder zusammengefügt werden können.
Eine alternative Lösung: Fragmentierung der MySQL-Dump-Ausgabe
Eine praktische Alternative zu split(1) wird im folgenden Bash-Skript vorgestellt. Es teilt eine Datenbank-Dump-Datei geschickt in einzelne .sql-Dateien auf, die jeweils einer bestimmten Tabelle entsprechen. Das Skript nutzt csplit, ein vielseitiges Tool zum Aufteilen von Dateien, und setzt START strategisch ein, um Tabellengrenzen zu identifizieren.
#!/bin/bash # Adjust this to your specific scenario: 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 a specific 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*
Diese Lösung teilt die Dump-Datei sorgfältig in einzelne tabellenspezifische .sql-Dateien auf und gewährleistet so ein erfolgreiches Hochladen auf den Remote-Server auch bei eingeschränkter Dateikapazität.
Das obige ist der detaillierte Inhalt vonWie teile ich eine große MySQL-Dump-Datei in kleinere Dateien auf, um die Größenbeschränkungen beim Hochladen zu überwinden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!