wake-up-neo.com

Exportieren und importieren Sie alle MySQL-Datenbanken gleichzeitig

Ich möchte alle meine MySQL-Datenbanken sichern. Ich habe mehr als 100 MySQL-Datenbanken. Ich möchte alle gleichzeitig exportieren und erneut auf einen MySQL-Server importieren. Wie kann ich das machen?

307
NewUser

Export:

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

Schlagen Sie in der Dokumentation nach mysqldump nach. Möglicherweise möchten Sie einige der in den Kommentaren genannten Optionen verwenden:

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

Einführen:

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

Andere Lösung:

Es sichert jede Datenbank in einer anderen Datei

#!/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

Alle Antworten, die ich zu dieser Frage sehe, können Probleme mit den Zeichensätzen in einigen Datenbanken haben, da der Exit von mysqldump auf eine Datei innerhalb des Shell-Operators > umgeleitet wird.

Um dieses Problem zu lösen, sollten Sie das backup mit einem solchen Befehl ausführen

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

Um eine gute BD restore durchzuführen ohne Probleme mit Zeichensätzen. Natürlich können Sie den Standard-Zeichensatz nach Bedarf ändern.

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

Basierend auf diesen Antworten habe ich ein Skript erstellt, das alle Datenbanken in separaten Dateien sichert, sie dann aber in ein Archiv mit Datum als Namen komprimiert.

Dies fragt nicht nach dem Passwort, kann in cron verwendet werden. Um das Passwort in .my.cnf zu speichern, überprüfen Sie diese Antwort https://serverfault.com/a/143587/62749

Auch gemacht mit Kommentaren für diejenigen, die mit bash-Skripten nicht sehr vertraut sind.

#!/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

Warum wird die formatierte Ausgabe analysiert, während der Befehl mysql direkt das tun kann, was Sie möchten?

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

Listet die Datenbanknamen und nur diesen auf.

7
msn

Wenn Sie die gesamte Datenbank sichern. Offensichtlich hat es große Daten. So können Sie unten für besseres bevorzugen:

Backup erstellen:

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

Wenn Fehler

- Warnung: Überspringt die Daten der Tabelle mysql.event. Geben Sie die Option --events explizit an.

Benutzen:

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

Wiederherstellen der Sicherung:

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

Hoffe es wird helfen :)

3
ashikpatel

Seien Sie vorsichtig, wenn Sie aus verschiedenen MySQL-Versionen exportieren und in andere MySQL-Versionen importieren, da die mysql-Tabellen möglicherweise unterschiedliche Spalten haben. Die Berechtigungsberechtigungen funktionieren möglicherweise nicht, wenn Sie kein Glück haben Die Zuweisungen für den Import in die neue Datenbank sichern, für den Fall:

#!/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'

Exportieren Sie alle Datenbanken in 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

hinweis: -u "Ihr Benutzername" - p "Ihr Passwort"

Ich schrieb diesen Kommentar bereits vor mehr als 4 Jahren und entschloss mich nun, es zu einer Antwort zu machen.

Das script from jruzafa kann etwas vereinfacht werden:

#!/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

Hinweis:

  1. Die ausgeschlossenen Datenbanken - überwiegend die Systemtabellen - werden in der Variablen ExcludeDatabases bereitgestellt.
  2. Bitte beachten Sie, dass das Passwort in der Befehlszeile angegeben wird. Dies gilt als unsicher. Studiere diese Frage .
0
Al Bundy