Maison >base de données >tutoriel mysql >Comment puis-je diviser une grande sortie de mysqldump en fichiers plus petits pour faciliter le transfert et l'importation ?

Comment puis-je diviser une grande sortie de mysqldump en fichiers plus petits pour faciliter le transfert et l'importation ?

DDD
DDDoriginal
2024-11-11 19:55:03592parcourir

How can I split a large mysqldump output into smaller files for easier transfer and import?

Méthode pour diviser une grande sortie mysqldump en fichiers plus petits

Lors du transfert de grandes tables MySQL entre bases de données, la sortie compressée de mysqldump peut dépasser le fichier maximum taille autorisée pour l’importation dans la destination. Pour surmonter ce défi, les utilisateurs peuvent utiliser les méthodes suivantes :

Diviser le fichier de vidage à l'aide de csplit

Un script bash peut être utilisé pour diviser un fichier mysqldump en fichiers séparés pour chaque tableau. Ce script exploite l'utilitaire csplit pour créer des fichiers basés sur des modèles spécifiques :

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*

Utilisation de --extended-insert=FALSE avec mysqldump

Cette option génère un SQL fichier qui peut être divisé en fichiers importables. Split peut être utilisé avec l'option --lines pour contrôler le nombre de lignes par fichier. Des essais et erreurs ou des outils de compression tels que bzip2 peuvent être utilisés pour déterminer le nombre de lignes approprié pour chaque taille de fichier.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn