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?
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
mysql -u root -p < alldb.sql
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
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
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"
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.
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 :)
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
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:
ExcludeDatabases
bereitgestellt.