Ricostruzione dello slave mediante LVM
Ecco il metodo che usiamo per ricostruire gli slave MySQL usando Linux LVM. Ciò garantisce un'istantanea coerente, pur richiedendo tempi di inattività minimi sul master.
Impostare la percentuale massima di pagine sporche innodb su zero sul server MySQL principale. Ciò costringerà MySQL a scrivere tutte le pagine sul disco, accelerando notevolmente il riavvio.
set global innodb_max_dirty_pages_pct = 0;
Per monitorare il numero di pagine sporche, eseguire il comando
mysqladmin ext -i10 | grep dirty
Una volta che il numero smette di diminuire, hai raggiunto il punto per continuare. Quindi reimpostare il master per cancellare i vecchi registri bin / registri di inoltro:
RESET MASTER;
Eseguire lvdisplay per ottenere LV Path
lvdisplay
L'output sarà simile a questo
--- Logical volume ---
LV Path /dev/vg_mysql/lv_data
LV Name lv_data
VG Name vg_mysql
Arrestare il database principale con il comando
service mysql stop
Successivamente fai uno snapshot, mysql_snapshot sarà il nuovo nome del volume logico. Se i binlog sono posizionati sull'unità del sistema operativo, anche quelli devono essere istantanei.
lvcreate --size 10G --snapshot --name mysql_snapshot /dev/vg_mysql/lv_data
Riavvia master con comando
service mysql start
Ripristina l'impostazione di pagine sporche sul valore predefinito
set global innodb_max_dirty_pages_pct = 75;
Eseguire di nuovo lvdisplay per assicurarsi che l'istantanea sia presente e visibile
lvdisplay
Produzione:
--- Logical volume ---
LV Path /dev/vg_mysql/mysql_snapshot
LV Name mysql_snapshot
VG Name vg_mysql
Montare l'istantanea
mkdir /mnt/mysql_snapshot
mount /dev/vg_mysql/mysql_snapshot /mnt/mysql_snapshot
Se hai uno slave MySQL esistente in esecuzione, devi interromperlo
service mysql stop
Successivamente è necessario cancellare la cartella di dati MySQL
cd /var/lib/mysql
rm -fr *
Torna al maestro. Ora sincronizza di nuovo l'istantanea con lo slave MySQL
rsync --progress -harz /mnt/mysql_snapshot/ targethostname:/var/lib/mysql/
Una volta completato rsync, è possibile smontare e rimuovere l'istantanea
umount /mnt/mysql_snapshot
lvremove -f /dev/vg_mysql/mysql_snapshot
Creare l'utente di replica sul master se il vecchio utente di replica non esiste o la password è sconosciuta
GRANT REPLICATION SLAVE on *.* to 'replication'@'[SLAVE IP]' identified by 'YourPass';
Verificare che i file di dati / var / lib / mysql siano di proprietà dell'utente mysql, in tal caso è possibile omettere il comando seguente:
chown -R mysql:mysql /var/lib/mysql
Successivamente registra la posizione del binlog
ls -laF | grep mysql-bin
Vedrai qualcosa di simile
..
-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
Qui il file di registro principale è il numero di file più alto in sequenza e la posizione del registro bin è la dimensione del file. Registra questi valori:
master_log_file=mysql-bin.000020
master_log_post=65657162
Quindi avviare lo slave MySQL
service mysql start
Eseguire il comando change master sullo slave eseguendo quanto segue:
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 avvia lo schiavo
SLAVE START;
Controlla lo stato degli slave:
SHOW SLAVE STATUS;
Assicurarsi che Slave IO sia in esecuzione e che non vi siano errori di connessione. In bocca al lupo!
BR, Juha Vehnia
Di recente l'ho scritto sul mio blog che si trova qui ... Ci sono alcuni dettagli in più, ma la storia è la stessa.
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