Reconstruyendo el esclavo usando LVM
Aquí está el método que usamos para reconstruir esclavos MySQL usando Linux LVM. Esto garantiza una instantánea consistente al tiempo que requiere un tiempo de inactividad mínimo en su maestro.
Establezca el porcentaje máximo de páginas sucias innodb en cero en el servidor MySQL maestro. Esto obligará a MySQL a escribir todas las páginas en el disco, lo que acelerará significativamente el reinicio.
set global innodb_max_dirty_pages_pct = 0;
Para controlar la cantidad de páginas sucias, ejecute el comando
mysqladmin ext -i10 | grep dirty
Una vez que el número deja de disminuir, has alcanzado el punto para continuar. A continuación, restablezca el maestro para borrar los registros de bin / registros de retransmisión antiguos:
RESET MASTER;
Ejecute lvdisplay para obtener la ruta LV
lvdisplay
La salida se verá así
--- Logical volume ---
LV Path /dev/vg_mysql/lv_data
LV Name lv_data
VG Name vg_mysql
Apague la base de datos maestra con el comando
service mysql stop
A continuación, tome una instantánea, mysql_snapshot será el nuevo nombre de volumen lógico. Si los binlogs se colocan en la unidad del sistema operativo, también deben ser instantáneas.
lvcreate --size 10G --snapshot --name mysql_snapshot /dev/vg_mysql/lv_data
Iniciar maestro nuevamente con comando
service mysql start
Restaurar la configuración de páginas sucias al valor predeterminado
set global innodb_max_dirty_pages_pct = 75;
Ejecute lvdisplay nuevamente para asegurarse de que la instantánea esté allí y sea visible
lvdisplay
Salida:
--- Logical volume ---
LV Path /dev/vg_mysql/mysql_snapshot
LV Name mysql_snapshot
VG Name vg_mysql
Monta la instantánea
mkdir /mnt/mysql_snapshot
mount /dev/vg_mysql/mysql_snapshot /mnt/mysql_snapshot
Si tiene un esclavo MySQL en ejecución, debe detenerlo
service mysql stop
A continuación, debe borrar la carpeta de datos MySQL
cd /var/lib/mysql
rm -fr *
De vuelta al maestro. Ahora sincronice la instantánea con el esclavo MySQL
rsync --progress -harz /mnt/mysql_snapshot/ targethostname:/var/lib/mysql/
Una vez que rsync se haya completado, puede desmontar y eliminar la instantánea
umount /mnt/mysql_snapshot
lvremove -f /dev/vg_mysql/mysql_snapshot
Cree un usuario de replicación en el maestro si el antiguo usuario de replicación no existe o la contraseña es desconocida
GRANT REPLICATION SLAVE on *.* to 'replication'@'[SLAVE IP]' identified by 'YourPass';
Verifique que los archivos de datos / var / lib / mysql son propiedad del usuario mysql, de ser así, puede omitir el siguiente comando:
chown -R mysql:mysql /var/lib/mysql
Luego registre la posición del binlog
ls -laF | grep mysql-bin
Verás 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
Aquí el archivo de registro maestro es el número de archivo más alto en secuencia y la posición del registro de bin es el tamaño del archivo. Registre estos valores:
master_log_file=mysql-bin.000020
master_log_post=65657162
A continuación, inicie el esclavo MySQL
service mysql start
Ejecute el comando cambiar maestro en el esclavo ejecutando lo siguiente:
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 comienza el esclavo
SLAVE START;
Verifique el estado del esclavo:
SHOW SLAVE STATUS;
Asegúrese de que Slave IO se esté ejecutando y que no haya errores de conexión. ¡Buena suerte!
BR, Juha Vehnia
Recientemente escribí esto en mi blog que se encuentra aquí ... Hay pocos detalles más allí, pero la historia es la misma.
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