Como migrar usuários e dados de uma database MySQL

Eu já tive muitos problemas para migrar usuários de uma database MySQL. Por isso escrevi esse tutorial e espero que essa tarefa se torne muito mais fácil para você. Ao final deixe seu comentário pois ele faz toda a diferença e diga o que achou do artigo, se o mesmo te ajudou…

Primeiro vamos migrar os usuários da database MySQL

No banco de dados execute o seguinte comando:

$ mysql -uroot -N -p -s > myusersgrantsquery
Enter password:
SELECT CONCAT(‘SHOW GRANTS FOR ”’,user,”’@”’,host,”’;’) FROM mysql.user;
quit


Isso irá criar não só um arquivo de nome myusersgrantsquery mas também um número de queries similares à essas:

SHOW GRANTS FOR ‘user1’@’localhost’;
SHOW GRANTS FOR ‘user2’@’127.0.0.1’;
SHOW GRANTS FOR ‘user3’@’::1′;

Criando o arquivo grant

Ainda não temos o que queremos e precisamos. Por isso precisamos executar uma consulta que crie todos os nossos usuários no novo servidor que irá hospedar a database MySQL.

A query que acabamos de criar não só nos dará a consulta que usaremos mais tarde para criarmos os usuários mas também criará nossas declarações de permissão de concessão em um arquivo chamado “grantfile”

$ mysql -uroot -N -p -s -r < myusersgrantsquery > mygrantsfile
Enterpassword:

Após digitar o comando será criado um arquivo de nome mygrantsfile contendo várias queries similares à essas:

GRANT ALL PRIVILEGES ON . TO ‘user1’@’127.0.0.1’ IDENTIFIED BY PASSWORD ‘*036F72A3D67924C06C5FD5C1E8D22EBAC8E14623’ WITH GRANT OPTION

GRANT USAGE ON *.* TO ‘user2’@’127.0.0.1’ IDENTIFIED BY PASSWORD ‘*8024AC712AD165BC6A1120E5D1312ECBF3121F17’

GRANT USAGE ON *.* TO ‘user3’@’127.0.0.1’ IDENTIFIED BY PASSWORD ‘*0024A5312C4165B13D812CC5D1312E6AF3101F16’


Estamos quase lá mas ainda falta o ponto e vírgula no final de cada linha do arquivo. Portanto, para corrigir, execute o seguinte comando:
$ sed -i ‘/[^;] *$/s/$/;/’ mygrantsfile


Agora estamos prontos para migrar os dados no outro servidor, no entanto copie o arquivo mygrantsfile para o servidor de destino utilizando o comando scp ou rsync.

Criando os usuários e concedendo acessos e privilégios


Após a cópia faça login e execute o comando abaixo:
$ mysql -uroot -p < mygrantsfile


Realizado o procedimento acima você deve já realizou o procedimento para migrar todos os usuários no novo database MySQL.

Realizando um dump da database MySQL

Volte para o servidor de origem, pois o que queremos agora são todas as bases de dados exceto as do sistema.


Crie um shell script com nome alldbdump.sh:

#! /bin/bash

MYSQL_USER=root
MYSQL_PASS=<senha_root>
MYSQL_CONN="-u${MYSQL_USER} -p${MYSQL_PASS}"## Pega todas as bases de dados exceto as 
# mysql, information_schema, e performance_schema#

SQL="SELECT schema_name FROM information_schema.schemata WHERE schema_name NOT IN"
SQL="${SQL} ('mysql','information_schema','performance_schema')"

DBLISTFILE=/tmp/DatabasesToDump.txtmysql ${MYSQL_CONN}-ANe"${SQL}">${DBLISTFILE}

DBLIST=""forDBin`cat ${DBLISTFILE}`;doDBLIST="${DBLIST} ${DB}";
done

MYSQLDUMP_OPTIONS="--routines --triggers --single-transaction"
mysqldump ${MYSQL_CONN} ${MYSQLDUMP_OPTIONS} --databases ${DBLIST} -c | gzip -9 
> myalldatabases.sql.gz


Portanto se você quiser omitir outras bases adicione à essa parte do script:
SQL=”${SQL} (‘mysql’,’information_schema’,’performance_schema’, ‘db1_para_omitir’, ‘db2_para_omitir’)”


Assim nesse exemplo duas bases extras foram adicionadas, com isso essas bases serão excluídas do dump. :
db1_para_omitir e db2_para_omitir


Agora execute o script alldbdump.sh:
$ ./alldbdump.sh


No diretório atual você deve encontrar um arquivo do banco comprimido do tipo gzip myalldatabases.sql.gz.


Após compressão do arquivo, por conseguinte copie-o para o servidor de destino utilizando scp ou rsync.

Restaurando a database MySQL no servidor de destino.

No servidor de destino descomprima o arquivo copiado no passo anterior e então importe para o MySQL server conforme abaixo:

$ gzip -d myalldatabases.sql.gz
$ mysql -uroot -p < myalldatabases.sq


Pronto!


Se você quiser saber como recuperar dados das tabelas InnoDB no MySQL a partir dos arquivos ibdata e .frm clique aqui.