Rumah > Artikel > pangkalan data > Bagaimanakah saya boleh membahagikan fail dump MySQL yang besar kepada fail yang lebih kecil untuk mengatasi had saiz muat naik?
Memisahkan Output Mysqldump kepada Fail yang Lebih Kecil untuk Muat Naik ke Pelayan Jauh dengan Kapasiti Terhad
Keperluan untuk memindahkan data besar daripada satu pangkalan data MySQL ke pangkalan data yang lain selalunya timbul, tetapi had seperti saiz muat naik fail terhad boleh menimbulkan cabaran. Ini amat penting apabila menggunakan phpMyAdmin, yang membenarkan hanya fail .sql yang dimampatkan yang lebih kecil daripada 2MB. Nasib baik, wujud penyelesaian untuk mengatasi halangan ini.
Untuk menyelesaikan isu ini, output mysqldump boleh dipecahkan dengan teliti kepada bahagian yang boleh diurus, membolehkannya dimuat naik dalam bentuk yang lebih kecil. Malangnya, utiliti split(1) tidak boleh digunakan kerana ketidakupayaan untuk menggabungkan fail kembali bersama pada pelayan jauh.
Penyelesaian Alternatif: Memecahkan Output Dump MySQL
Alternatif praktikal untuk split(1) dipamerkan dalam skrip bash berikut. Ia dengan cekap membahagikan fail pembuangan pangkalan data kepada fail .sql individu, setiap satu sepadan dengan jadual yang berbeza. Skrip memanfaatkan csplit, alat serba boleh untuk membelah fail dan secara strategik menggunakan MULA untuk mengenal pasti sempadan jadual.
#!/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*
Penyelesaian ini membahagikan fail dump dengan teliti kepada fail .sql khusus jadual individu, memastikan muat naik yang berjaya ke pelayan jauh walaupun dengan kapasiti fail terhad.
Atas ialah kandungan terperinci Bagaimanakah saya boleh membahagikan fail dump MySQL yang besar kepada fail yang lebih kecil untuk mengatasi had saiz muat naik?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!