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?
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
mysql -u root -p < alldb.sql
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
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
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"
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.
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 :)
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'
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
mysqldump -uroot -proot --all-database> allDB.sql
note: -u "votre nom d'utilisateur" - p "votre mot de passe"
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:
ExcludeDatabases