una tablas source informaciĆ³n importar exportar estructura desde datos consola como comando mysql database-backups mysql-backup

tablas - Exportar e importar todas las bases de datos MySQL a la vez



importar base de datos mysql workbench (8)

Exportar:

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

Busque la documentación de mysqldump . Es posible que desee utilizar algunas de las opciones mencionadas en los comentarios:

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

Importar:

mysql -u root -p < alldb.sql

Quiero mantener una copia de seguridad de todas mis bases de datos MySQL. Tengo más de 100 bases de datos MySQL. Quiero exportarlos todos al mismo tiempo y, de nuevo, importarlos a mi servidor MySQL al mismo tiempo. ¿Cómo puedo hacer eso?


¿Por qué analizar la salida formateada mientras el comando mysql puede hacer directamente lo que quieres?

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

Lista los nombres de la base de datos y solo esto.


Basándome en estas respuestas, he creado un script que hace copias de seguridad de todas las bases de datos en archivos separados, pero luego las comprimí en un archivo con la fecha como nombre.

Esto no pedirá contraseña, puede ser usado en cron. Para almacenar la contraseña en .my.cnf verifique esta respuesta https://serverfault.com/a/143587/62749

Hecho también con comentarios para aquellos que no están muy familiarizados con los scripts de 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"


Cuando estás volcando toda la base de datos. Obviamente está teniendo grandes datos. Así que puedes preferir a continuación para mejor:

Creación de copia de seguridad:

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

Si error

- Advertencia: omitiendo los datos de la tabla mysql.event. Especifique la opción --events explícitamente.

Utilizar:

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

Restaurando copia de seguridad:

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

Espero que te ayude :)


Otra solución:

Realiza una copia de seguridad de cada base de datos en un archivo diferente

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


Tenga cuidado al exportar e importar a diferentes versiones de MySQL, ya que las tablas mysql pueden tener diferentes columnas. Los privilegios de subvención pueden dejar de funcionar si no tienes suerte. Creé este script (mysql_export_grants.sql) para volcar las concesiones para importar en la nueva base de datos, por si acaso:

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


Todas las respuestas que veo en esta pregunta pueden tener problemas con los juegos de caracteres en algunas bases de datos debido al problema de redireccionar la salida de mysqldump a un archivo dentro del operador de shell > .

Para resolver este problema, debe hacer la copia de seguridad con un comando como este

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

Para hacer una buena restauración de BD sin ningún problema con los juegos de caracteres

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


mysqldump -uroot -proot databasename> databasename.sql

nota: -u "tu nombre de usuario" -p "tu contraseña"