Eu sou muito novo na Administração de Banco de Dados.
Enfrento muitos problemas ao configurar a replicação master-slave do mysql.
Também enfrento problemas regulares de solução de problemas de replicação mysql.
Alguém pode ajudar a entender como devo lidar com tudo isso?
mysql
replication
mysql-5
Abdul Manaf
fonte
fonte
Respostas:
Forneci links para tutoriais. Lembre-se de que, no Ubuntu, o arquivo my.cnf está em /etc/mysql/my.cnf e não em /etc/my.cnf, como no tutorial da howtoforge. Na minha configuração, eu não usei FLUSH TABLES WITH READ LOCK; no mestre. Se o servidor principal tiver muita atividade de gravação, talvez seja necessário bloquear suas tabelas executando esse comando antes de fazer o backup. Se você usa FLUSH TABLES WITH READ LOCK ;, após o backup, você deseja executar UNLOCK TABLES. Se você tiver algum problema, me avise.
Aqui está o tutorial que encontrei no howto forge, feito para o Redhat / CentOS: http://www.howtoforge.com/mysql_database_replication
Outro tutorial que parecia bom para o Ubuntu http://www.srcnix.com/2010/10/14/simple-mysql-replication-with-ubuntu-master-to-slave/
Aqui está a configuração que eu usei:
No servidor MASTER
Configure o servidor principal:
Reinicie o MySQL:
/etc/init.d/mysql restart
Conecte-se ao console do mysql: mysql -u root -ppassword
Crie e conceda permissões ao usuário de replicação.
Certifique-se de copiar essas informações em algum lugar ou deixá-las visíveis
Despejar o banco de dados em um arquivo:
Copie o dump do banco de dados no servidor escravo usando scp ou use ftp, se desejar:
No servidor SLAVE
Edite a configuração do mysql:
Reinicie o MySQL:
/etc/init.d/mysql restart
Restaure o backup:
Conecte-se ao MySQL:
Execute
SHOW SLAVE STATUS\G
:Posteriormente, lembre-se de que a replicação pode falhar por vários motivos. No escravo, você pode monitorar o status executando o comando SHOW SLAVE STATUS \ G; Ou configurar um trabalho cron para monitorar o status e enviar e-mails, se houver falha. Familiarize-se com a saída deste comando. Se a replicação estiver sendo executada corretamente, você deverá ver "Slave_IO_State: Aguardando que o mestre envie o evento".
Depois de obter essa configuração corretamente, posso fornecer um script para monitorar essa replicação.
Aqui está um script para monitorar o log de erros no MySQL. Se você adicionar a linha
reinicie o mysql: /etc/init.d/mysql restart
Em seguida, você pode usar o seguinte script para monitorar o arquivo de log. Se o log mudar de alguma maneira, você receberá um email notificando que ocorreu um erro no servidor escravo. Se você deseja que o log de erros seja verificado regularmente, será necessário adicionar esse script ao seu crontab.
Aqui está um exemplo de script: /somepath/monitor_mysql_log.sh
Para adicionar ao crontab.
Torne o script executável:
Atualize o crontab:
E o script será executado a cada minuto.
O script que forneci é um script que acabei de montar rapidamente. Além disso, para que seu servidor possa enviar e-mails, você precisará instalar algo como postfix ou sendmail.
fonte
O Mysqldump é rápido, mas a restauração de despejos pode ser muito lenta para um grande banco de dados, e o bloqueio de tabelas não é aceitável em um site ativo. Uma maneira muito melhor e mais rápida de configurar escravos é usar o XtraBackup da Percona . O XtraBackup impõe pouca carga no mestre, não requer bloqueios e a restauração no escravo é muito rápida. Esse mecanismo produz um clone completo de todo o banco de dados, incluindo coisas como tabelas de usuários, que quebram algumas coisas configuradas por uma instalação de estoque, como o usuário debian-sys-maint, que não é necessariamente uma coisa ruim !
Como bônus, depois de saber como fazer isso, você pode usar exatamente o mesmo mecanismo para seus backups diários. Os backups são mais lentos que o mysqldump, mas as restaurações são muito mais rápidas, o que é exatamente o que você precisa se você estiver em uma situação em que estiver em pânico e precisar restaurar um backup! Se você receber algum erro grave de replicação, use este procedimento para descartar o escravo e reconstruí-lo; realmente não demora muito.
Você precisará configurar o repositório apt / yum do Percona para sua distribuição e instalar o
xtrabackup
pacote no master e no slave. Também recomendo fortemente o uso do utilitário de compactação pigz (gzip paralelo, disponível na maioria dos repositórios padrão), pois faz uma enorme diferença na velocidade de backup.O processo é assim (no Ubuntu, outras distribuições podem variar um pouco) e assume que você já instalou o MySQL no seu escravo:
mkdir -p /var/xtrabackup; /usr/bin/innobackupex --slave-info --stream=tar --throttle=1500 /var/xtrabackup 2> /tmp/xtrabackup.out | /usr/bin/pigz -p 4 -c --best -q > /var/backups/mysql.tgz
(ajuste o valor do acelerador para limitar o impacto do backup no serviço ativo)scp -l 400000
para não passar fome o mestre da largura de banda da rede para clientes ativos)service mysql stop
mv /var/lib/mysql /var/lib/mysql2
(ou compacte-o em algum lugar, se você estiver com pouco espaço em disco)mkdir /var/lib/mysql; cd /var/lib/mysql
tar xvzif /path/to/backup/mysql.tgz
. Observe ai
opção na operação tar - ela não funcionará sem ela . Isso levará um tempo se você tiver um grande banco de dados./usr/bin/innobackupex --apply-log --use-memory=6G --ibbackup=xtrabackup /var/lib/mysql
. Isso efetivamente executa uma recuperação de falha nos arquivos dos logs binários. Isso leva apenas alguns segundos; use uma quantidade menor de memória se estiver em um servidor menor.rm /path/to/backup/mysql.tgz; chown -R mysql:mysql /var/lib/mysql
service mysql start
cat xtrabackup_binlog_info
. Vai dizer algo comomysql-bin.000916 13889427
CHANGE MASTER TO MASTER_HOST='192.168.0.1', MASTER_USER='replica', MASTER_PASSWORD='r3plica', MASTER_LOG_FILE='mysql-bin.000916', MASTER_LOG_POS=13889427;
(Altere para corresponder aos detalhes reais do servidor de banco de dados)START SLAVE;
SHOW SLAVE STATUS\G
Seu escravo agora está pronto. Se necessário, agora você pode configurar a replicação circular:
FLUSH TABLES WITH READ LOCK; SHOW MASTER STATUS;
Anote o nome e a posição do arquivo de log (algo como mysql-bin.000031 e 17244785).CHANGE MASTER TO MASTER_HOST='192.168.0.2', MASTER_USER='replica', MASTER_PASSWORD='r3plica', MASTER_LOG_FILE='mysql-bin.000031', MASTER_LOG_POS=17244785;
:, inserindo valores do escravo que acabamos de ver.START SLAVE;
UNLOCK TABLES;
Agora você deve estar tudo pronto com uma replicação circular.
No que diz respeito à solução de problemas, o kit de ferramentas da Percona tem todo tipo de ajuda, como soma de verificação para detectar corrupção silenciosa, medição de atraso e muito mais. As formas mais comuns de corrupção de replicação podem ser evitadas configurando
binlog_format = MIXED
no my.cnf. Dito isto, na minha experiência, a replicação geralmente não é problemática.fonte