Reconstruindo o escravo usando LVM
Aqui está o método que usamos para reconstruir escravos MySQL usando Linux LVM. Isso garante uma captura instantânea consistente e exige um tempo de inatividade mínimo no mestre.
Defina o percentual máximo de páginas sujas do innodb como zero no servidor MySQL mestre. Isso forçará o MySQL a gravar todas as páginas no disco, o que acelerará significativamente a reinicialização.
set global innodb_max_dirty_pages_pct = 0;
Para monitorar o número de páginas sujas, execute o comando
mysqladmin ext -i10 | grep dirty
Quando o número parar de diminuir, você alcançará o ponto de continuar. Em seguida, redefina o mestre para limpar os antigos registros de bandeja / logs de retransmissão:
RESET MASTER;
Execute lvdisplay para obter o LV Path
lvdisplay
A saída ficará assim
--- Logical volume ---
LV Path /dev/vg_mysql/lv_data
LV Name lv_data
VG Name vg_mysql
Encerre o banco de dados mestre com o comando
service mysql stop
Em seguida, tire uma foto, mysql_snapshot será o novo nome do volume lógico. Se houver binlogs na unidade do SO, eles também precisam ser instantâneos.
lvcreate --size 10G --snapshot --name mysql_snapshot /dev/vg_mysql/lv_data
Inicie o master novamente com o comando
service mysql start
Restaurar a configuração de páginas sujas para o padrão
set global innodb_max_dirty_pages_pct = 75;
Execute lvdisplay novamente para garantir que o instantâneo esteja lá e visível
lvdisplay
Resultado:
--- Logical volume ---
LV Path /dev/vg_mysql/mysql_snapshot
LV Name mysql_snapshot
VG Name vg_mysql
Monte o instantâneo
mkdir /mnt/mysql_snapshot
mount /dev/vg_mysql/mysql_snapshot /mnt/mysql_snapshot
Se você possui um escravo do MySQL em execução, precisa interrompê-lo
service mysql stop
Em seguida, você precisa limpar a pasta de dados do MySQL
cd /var/lib/mysql
rm -fr *
De volta ao mestre. Agora rsync o instantâneo para o escravo do MySQL
rsync --progress -harz /mnt/mysql_snapshot/ targethostname:/var/lib/mysql/
Depois que o rsync for concluído, você pode desmontar e remover o instantâneo
umount /mnt/mysql_snapshot
lvremove -f /dev/vg_mysql/mysql_snapshot
Crie um usuário de replicação no mestre se o usuário de replicação antigo não existir ou a senha for desconhecida
GRANT REPLICATION SLAVE on *.* to 'replication'@'[SLAVE IP]' identified by 'YourPass';
Verifique se os arquivos de dados / var / lib / mysql pertencem ao usuário mysql, caso contrário, você pode omitir o seguinte comando:
chown -R mysql:mysql /var/lib/mysql
Em seguida, grave a posição do binlog
ls -laF | grep mysql-bin
Você verá algo como
..
-rw-rw---- 1 mysql mysql 1073750329 Aug 28 03:33 mysql-bin.000017
-rw-rw---- 1 mysql mysql 1073741932 Aug 28 08:32 mysql-bin.000018
-rw-rw---- 1 mysql mysql 963333441 Aug 28 15:37 mysql-bin.000019
-rw-rw---- 1 mysql mysql 65657162 Aug 28 16:44 mysql-bin.000020
Aqui, o arquivo de log principal é o número de arquivo mais alto na sequência e a posição do log de posição é o tamanho do arquivo. Registre estes valores:
master_log_file=mysql-bin.000020
master_log_post=65657162
Em seguida, inicie o MySQL escravo
service mysql start
Execute o comando change master no escravo, executando o seguinte:
CHANGE MASTER TO
master_host="10.0.0.12",
master_user="replication",
master_password="YourPass",
master_log_file="mysql-bin.000020",
master_log_pos=65657162;
Finalmente inicie o escravo
SLAVE START;
Verifique o status do escravo:
SHOW SLAVE STATUS;
Verifique se o Slave IO está em execução e se não há erros de conexão. Boa sorte!
Juha Vehnia BR
Eu escrevi isso recentemente no meu blog, que é encontrado aqui ... Existem mais alguns detalhes lá, mas a história é a mesma.
http://www.juhavehnia.com/2015/05/rebuilding-mysql-slave-using-linux-lvm.html
--opt --single-transaction --comments --hex-blob --dump-date --no-autocommit --all-databases