![movendo o banco de dados innodb ao vivo de um servidor para outro](https://rvso.com/image/668019/movendo%20o%20banco%20de%20dados%20innodb%20ao%20vivo%20de%20um%20servidor%20para%20outro.png)
Preciso mover um banco de dados innodb de um servidor para outro - ele também está indo de mysql > mariadb. Quero garantir que não haja nenhum problema e com isso utilizarei o mysqldump para exportar e depois importar no novo servidor. As configurações my.cnf são diferentes no novo servidor, portanto, copiar arquivos não é algo que desejo tentar. Também não estou totalmente preocupado com o tempo de inatividade, desde que garanta um bom despejo/importação sem problemas.
Como este é um banco de dados ativo, estou preocupado com erros no dump devido a transações ou qualquer outra coisa que, quando importada no novo servidor, causaria problemas de restrição/corrupção.
Qual é o melhor procedimento aqui? Aqui está o que eu estava pensando...
- reinicie o mysql sem acesso do usuário para que ninguém possa ler/gravar no banco de dados.
- mysqldump com
mysqldump -u [username] -p[password] -h [host] [databaseName] > [backup-name].sql
- importar com
mysql -u [username] -p[password] -h [host] [databaseName] < [filename].sql
É possível reiniciar o mysql e bloquear todos os usuários? Isso resolveria quaisquer transações remanescentes e garantiria que os dados fossem legítimos durante a importação? Basicamente, quero 'desligar' o acesso ao banco de dados para sempre assim que iniciar o processo de backup, pois, uma vez importado no novo servidor, ele nunca precisará ser acessado novamente e, mais importante, não quero que ele seja acessado durante o despejo/ restaurar para o outro servidor. Claro, eu gostaria de deixar o banco de dados no servidor original, caso surjam problemas de importação.
Responder1
Observe que você deve usar --hex-blob
with mysqldump
se tiver algum campo criptografado no banco de dados. Se --hex-blob
não for utilizado, os dados serão inutilizados quando importados.
Antes de fazer backup, faça um FLUSH TABLES WITH READ LOCK
para evitar quaisquer alterações. Você pode canalizar o backup para o novo servidor em uma única etapa, salvando a etapa de copiar o arquivo SQL.
mysqldump --single-transaction --routines --triggers --events --hex-blob db-name | mysql -h server db-name
Responder2
a primeira coisa que você deve fazer é fazer um backup do seu banco de dados e, em seguida, importá-lo para o novo servidor e testar o novo servidor primeiro, se estiver tudo bem, verifique também o tempo que você leva para criar um backup e restaurar no novo servidor, então você sabe quanto tempo levará para colocar o novo servidor em produção.
quando você estiver pronto para passar tudo para o novo servidor é melhor você desativar todas as conexões com seu banco de dados, a menos que localhost, pois você usará o mysqldump para acessar o banco de dados e fazer o backup, se todos os acessos ao banco de dados vierem do seu servidor web você pode desligar o servidor web, por outro lado, seria configurar o iptables para bloquear todo o tráfego em sua porta mysql, exceto localhost. então você faz backup do seu banco de dados, restaura para o novo servidor e coloca seu novo servidor ativo e certifica-se de que todas as suas conexões irão para o novo servidor.
Responder3
tudo isso depende se o seu banco de dados é grande ou pequeno o suficiente, também depende de qual serviço você está executando, mas acho que deve haver alguma janela de manutenção, durante os fins de semana tarde da noite, desligue seu apache/nginx, você também pode reiniciar seu banco de dados com a rede desabilitada, porta local com firewall ou diferente. exportar:
mysqldump -p --single-transaction --routines --triggers --events DATABASE | gzip > backup.sql.gz
importar:
zcat backup.sql.gz | mysql -f -p DATABASE
verifique novamente:
mysql_upgrade -p -f
gzipezcat irá ajudá-lo a fazer isso mais rápido.