Maison > base de données > tutoriel mysql > le corps du texte

Comment diviser un gros dump MySQL en fichiers plus petits ?

DDD
Libérer: 2024-11-24 22:39:11
original
219 Les gens l'ont consulté

How to Split a Large MySQL Dump into Smaller Files?

Diviser la grande sortie de mysqldump en fichiers plus petits

Il devient nécessaire de transférer des tables d'une base de données à une autre, mais la sortie de vidage de mysqldump est souvent trop volumineux pour certaines limites de téléchargement. Cet article explore une solution intelligente pour diviser la sortie volumineuse de mysqldump en fichiers plus petits et gérables.

Une approche potentielle suggérée par les scripts shell consiste à diviser le dump en fichiers distincts pour chaque table. Ceci peut être réalisé en utilisant la commande csplit et en spécifiant les marqueurs de structure de table comme points de division.

Considérez ce script bash qui utilise cette technique :

#!/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*
Copier après la connexion

Ce script utilise csplit pour diviser le fichier de vidage. dans des fichiers de table individuels, chaque fichier étant nommé d'après la table correspondante. Cela permet un réassemblage facile en un seul fichier ultérieurement. Pour utiliser ce script, fournissez simplement le chemin d'accès au fichier de vidage comme premier argument et spécifiez éventuellement une table spécifique à extraire comme deuxième argument.

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!

source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal