web-dev-qa-db-fra.com

Exporter et importer toutes les bases de données MySQL en même temps

Je souhaite conserver une copie de sauvegarde de toutes mes bases de données MySQL. J'ai plus de 100 bases de données MySQL. Je veux tout exporter en même temps et les importer tous simultanément sur mon serveur MySQL Comment puis je faire ça?

307
NewUser

Exportation:

mysqldump -u root -p --all-databases > alldb.sql

Recherchez la documentation pour mysqldump . Vous voudrez peut-être utiliser certaines des options mentionnées dans les commentaires:

mysqldump -u root -p --opt --all-databases > alldb.sql
mysqldump -u root -p --all-databases --skip-lock-tables > alldb.sql

Importation:

mysql -u root -p < alldb.sql
671
Shakti Singh

Autre solution:

Il sauvegarde chaque base de données dans un fichier différent

#!/bin/bash

USER="zend"
PASSWORD=""
#OUTPUT="/Users/rabino/DBs"

#rm "$OUTPUTDIR/*gz" > /dev/null 2>&1

databases=`mysql -u $USER -p$PASSWORD -e "SHOW DATABASES;" | tr -d "| " | grep -v Database`

for db in $databases; do
    if [[ "$db" != "information_schema" ]] && [[ "$db" != "performance_schema" ]] && [[ "$db" != "mysql" ]] && [[ "$db" != _* ]] ; then
        echo "Dumping database: $db"
        mysqldump -u $USER -p$PASSWORD --databases $db > `date +%Y%m%d`.$db.sql
       # gzip $OUTPUT/`date +%Y%m%d`.$db.sql
    fi
done
193
jruzafa

Toutes les réponses que je vois à cette question peuvent avoir des problèmes avec les jeux de caractères dans certaines bases de données en raison du problème de redirection de la sortie de mysqldump vers un fichier dans l'opérateur Shell >.

Pour résoudre ce problème, vous devriez faire le backup avec une commande comme celle-ci

mysqldump -u root -p --opt --all-databases -r backup.sql

Faire une bonne BD restaurer sans aucun problème avec les jeux de caractères. De toute évidence, vous pouvez modifier le jeu de caractères par défaut selon vos besoins.

mysql -uroot -p --default-character-set=utf8 database
mysql> SET names 'utf8'
mysql> SOURCE backup.sql
19
NetVicious

Sur la base de ces réponses, j'ai créé un script qui sauvegarde toutes les bases de données dans des fichiers séparés, puis les compresse en une archive dont la date est le nom.

Cela ne demandera pas de mot de passe, peut être utilisé dans cron. Pour enregistrer le mot de passe dans .my.cnf cochez cette réponse https://serverfault.com/a/143587/62749

Fait aussi avec des commentaires pour ceux qui ne sont pas très familiers avec les scripts bash.

#!/bin/bash

# This script will backup all mysql databases into 
# compressed file named after date, ie: /var/backup/mysql/2016-07-13.tar.bz2

# Setup variables used later

# Create date suffix with "F"ull date format
suffix=$(date +%F)
# Retrieve all database names except information schemas. Use Sudo here to skip root password.
dbs=$(Sudo mysql --defaults-extra-file=/root/.my.cnf --batch --skip-column-names -e "SHOW DATABASES;" | grep -E -v "(information|performance)_schema")
# Create temporary directory with "-d" option
tmp=$(mktemp -d)
# Set output dir here. /var/backups/ is used by system, 
# so intentionally used /var/backup/ for user backups.
outDir="/var/backup/mysql"
# Create output file name
out="$outDir/$suffix.tar.bz2"

# Actual script

# Check if output directory exists
if [ ! -d "$outDir" ];then
  # Create directory with parent ("-p" option) directories
  Sudo mkdir -p "$outDir"
fi

# Loop through all databases
for db in $dbs; do
  # Dump database to temporary directory with file name same as database name + sql suffix
  Sudo mysqldump --defaults-extra-file=/root/.my.cnf --databases "$db" > "$tmp/$db.sql"
done

# Go to tmp dir
cd $tmp

# Compress all dumps with bz2, discard any output to /dev/null
Sudo tar -jcf "$out" * > "/dev/null"

# Cleanup
cd "/tmp/"
Sudo rm -rf "$tmp"
8
PeterM

Pourquoi analyser une sortie formatée alors que la commande mysql peut faire directement ce que vous voulez?

databases=`mysql -u $USER -p$PASSWORD --batch --skip-column-names -e "SHOW DATABASES;" | grep -E -v "(information|performance)_schema"`

Répertorie les noms de base de données et seulement cela.

7
msn

Lorsque vous videz toutes les bases de données. Évidemment, c'est d'avoir de grandes données. Donc, vous pouvez préférer ci-dessous pour mieux:

Création d'une sauvegarde:

mysqldump -u [user] -p[password]--single-transaction --quick --all-databases | gzip > alldb.sql.gz

Si erreur

- Attention: saute les données de la table mysql.event. Spécifiez l'option --events explicitement.

Utilisation:

mysqldump -u [user] -p --events --single-transaction --quick --all-databases | gzip > alldb.sql.gz

Restauration de la sauvegarde:

gunzip < alldb.sql.gz | mysql -u [user] -p[password]

J'espère que ça va aider :)

3
ashikpatel

Soyez prudent lorsque vous exportez et importez vers différentes versions de MySQL, car les tables mysql peuvent avoir différentes colonnes. dump les subventions pour l'importation dans la nouvelle base de données, juste au cas où:

#!/bin/sh
stty -echo
printf 'Password: ' >&2
read PASSWORD
stty echo
printf "\n"
if [ -z "$PASSWORD" ]; then
        echo 'No password given!'
        exit 1
fi
MYSQL_CONN="-uroot -p$PASSWORD"
mysql ${MYSQL_CONN} --skip-column-names -A -e"SELECT CONCAT('SHOW GRANTS FOR ''',user,'''@''',Host,''';') FROM mysql.user WHERE user<>''" | mysql ${MYSQL_CONN} --skip-column-names -A | sed 's/$/;/g'
3

Exporter toutes les bases de données dans Ubuntu

1 - mysqldump -u root -p --databases database1 database2 > ~/Desktop/databases_1_2.sql

OR

2 - mysqldump -u root -p --all_databases > ~/Desktop/all_databases.sql

enter image description here

0
Indal Raj

mysqldump -uroot -proot --all-database> allDB.sql

note: -u "votre nom d'utilisateur" - p "votre mot de passe"

0

J'ai écrit ce commentaire il y a déjà plus de 4 ans et j'ai maintenant décidé d'y répondre.

Le script de jruzafa peut être un peu simplifié:

#!/bin/bash

USER="zend"
PASSWORD=""
#OUTPUT="/Users/rabino/DBs"

#rm "$OUTPUTDIR/*gz" > /dev/null 2>&1

ExcludeDatabases="Database|information_schema|performance_schema|mysql"
databases=`mysql -u $USER -p$PASSWORD -e "SHOW DATABASES;" | tr -d "| " | egrep -v $ExcludeDatabases`

for db in $databases; do
    echo "Dumping database: $db"
    mysqldump -u $USER -p$PASSWORD --databases $db > `date +%Y%m%d`.$db.sql
    # gzip $OUTPUT/`date +%Y%m%d`.$db.sql
done

Note:

  1. Les bases de données exclues - principalement les tables système - sont fournies dans la variable ExcludeDatabases
  2. Veuillez noter que le mot de passe est fourni dans la ligne de commande. Ceci est considéré comme peu sûr. Etudiez cette question .
0
Al Bundy