Memisahkan Output mysqldump Besar kepada Fail yang Lebih Kecil
Ia menjadi perlu untuk memindahkan jadual dari satu pangkalan data ke pangkalan data yang lain, tetapi output dump dari mysqldump adalah selalunya terlalu besar untuk had muat naik tertentu. Artikel ini meneroka penyelesaian bijak untuk membahagikan output mysqldump yang besar kepada fail yang boleh diurus dan lebih kecil.
Satu pendekatan berpotensi yang dicadangkan oleh skrip shell ialah membahagikan dump kepada fail berasingan untuk setiap jadual. Ini boleh dicapai menggunakan arahan csplit dan menentukan penanda struktur jadual sebagai titik pemisah.
Pertimbangkan skrip bash ini yang menggunakan teknik ini:
#!/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*
Skrip ini menggunakan csplit untuk memisahkan fail dump ke dalam fail jadual individu, dengan setiap fail dinamakan sempena jadual yang sepadan. Ini membolehkan pemasangan semula mudah menjadi satu fail kemudian. Untuk menggunakan skrip ini, hanya sediakan laluan ke fail dump sebagai argumen pertama dan secara pilihan tentukan jadual tertentu untuk diekstrak sebagai argumen kedua.
Atas ialah kandungan terperinci Bagaimana untuk Memisahkan Dump MySQL yang Besar kepada Fail yang Lebih Kecil?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!