Exportar e importar todas as bases de dados MySQL de uma só vez

Quero manter uma cópia de segurança de todas as minhas bases de dados MySQL. Tenho mais de 100 bases de dados MySQL. Eu quero exportar todos eles ao mesmo tempo e novamente importar todos eles para o meu servidor MySQL ao mesmo tempo. Como posso fazer isso?

Author: NetVicious, 2012-02-29

8 answers

Exportação:

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

Procura a documentaçãopara o mysqldump . Você pode querer usar algumas das opções mencionadas nos comentários:

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

Importação:

mysql -u root -p < alldb.sql
 623
Author: Shakti Singh, 2015-05-08 03:20:03

Outra solução:

Ele faz backup de cada banco de dados em um arquivo 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
 174
Author: jruzafa, 2016-07-13 07:28:29

Todas as respostas que vejo nesta pergunta podem ter problemas com os conjuntos de caracteres em algumas bases de dados devido ao problema de redireccionar a saída de mysqldump para um ficheiro dentro do operador da shell >.

Para resolver este problema, deve fazer a cópia de segurança com um comando como este

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

Para fazer um bom BD restaurar sem qualquer problema com conjuntos de caracteres

mysql -uroot -p --default-character-set=utf8 database
mysql> SET names 'utf8'
mysql> SOURCE backup.sql
 14
Author: NetVicious, 2018-07-23 10:14:46

Porquê analisar o resultado formatado enquanto o comando mysql pode fazer directamente o que deseja?

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

Lista os nomes das bases de dados e só isto.

 8
Author: msn, 2016-07-13 08:48:07

Com base nestas respostas fiz um script que faz backup de todas as bases de dados em ficheiros separados, mas depois comprimi-los num arquivo com a data como nome.

Isto não vai pedir a senha, pode ser usado no cron. Para guardar a senha em .my.cnf assinale esta resposta https://serverfault.com/a/143587/62749

Feito também com comentários para aqueles que não estão muito familiarizados com 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"
 7
Author: PeterM, 2017-04-13 12:13:50

Tenha cuidado ao exportar e importar para diferentes versões MySQL porque as tabelas mysql podem ter colunas diferentes. Conceder privilégios pode falhar se estiver sem sorte. Criei este programa (mysql_ export_ grants.SQL ) para transferir as subvenções para importação para a nova base de dados, no caso de:

#!/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
Author: Internal Server Error, 2016-07-13 08:43:23
Quando estás a largar toda a base de dados. É óbvio que tem grandes dados. Então você pode preferir abaixo para melhor:

A Criar A Cópia De Segurança:

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

Em caso de erro

[[4]]-- Warning: Skipping the data of table mysql.evento. Indique explicitamente a opção --events.

Utilizar:

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

A Repor A Cópia De Segurança:

gunzip < alldb.sql.gz | mysql -u [user] -p[password]
Espero que ajude.
 2
Author: ashikpatel, 2016-09-13 22:36:56

Mysqldump-uroot-proot databasename > databasename.SQL

Nota: - u "o teu nome de utilizador" - P "sua senha"

 0
Author: Majutharan Majutharan, 2017-09-20 11:47:57