Soy muy nuevo en la administración de bases de datos.
Me enfrento a muchos problemas al configurar la replicación maestro-esclavo mysql.
También me enfrento a problemas habituales de solución de problemas de replicación mysql.
¿Alguien puede ayudar a entender cómo debo lidiar con todo esto?
mysql
replication
mysql-5
Abdul Manaf
fuente
fuente
Respuestas:
Proporcioné enlaces a tutoriales. Solo tenga en cuenta que en Ubuntu, el archivo my.cnf está en /etc/mysql/my.cnf y no en /etc/my.cnf como en el tutorial de howtoforge. En mi configuración, no utilicé FLUSH TABLES WITH READ LOCK; en el maestro Si su servidor maestro tiene mucha actividad de escritura, es posible que deba bloquear sus tablas ejecutando ese comando antes de realizar una copia de seguridad. Si usa FLUSH TABLES WITH READ LOCK ;, luego de su copia de seguridad, querrá ejecutar UNLOCK TABLES. Si tiene algún problema, avíseme.
Aquí está el tutorial que encontré sobre cómo forjar, hecho para Redhat / CentOS: http://www.howtoforge.com/mysql_database_replication
Otro tutorial que se veía bien para Ubuntu http://www.srcnix.com/2010/10/14/simple-mysql-replication-with-ubuntu-master-to-slave/
Aquí está la configuración que utilicé:
En el servidor MASTER
Configure el servidor maestro:
Reiniciar MySQL:
/etc/init.d/mysql restart
Conéctese a la consola de mysql: mysql -u root -ppassword
Crear y otorgar permisos al usuario de replicación.
Asegúrese de copiar esta información en algún lugar o dejarla visible
Volcar la base de datos a un archivo:
Copie el volcado de la base de datos al servidor esclavo usando scp o use ftp si lo desea:
En el servidor SLAVE
Edite la configuración de mysql:
Reiniciar MySQL:
/etc/init.d/mysql restart
Restaurar la copia de seguridad:
Conéctese a MySQL:
Ejecutar
SHOW SLAVE STATUS\G
:Luego, tenga en cuenta que la replicación puede fallar por varias razones. En el esclavo, puede monitorear el estado ejecutando el comando SHOW SLAVE STATUS \ G; O configurar un trabajo cron para monitorear el estado y enviar correos electrónicos si falla. Familiarícese con la salida de este comando. Si la replicación se ejecuta correctamente, debería ver "Slave_IO_State: esperando que el maestro envíe el evento".
Una vez que obtenga esta configuración correctamente, puedo proporcionarle un script para monitorear esa replicación.
Aquí hay un script para monitorear el registro de errores en MySQL. Si agrega la línea
reiniciar mysql: /etc/init.d/mysql restart
Luego puede usar el siguiente script para monitorear el archivo de registro. Si el registro cambia de alguna manera, recibirá un correo electrónico notificándole que ocurrió un error en el servidor esclavo. Si desea que el registro de errores se verifique regularmente, deberá agregar este script a su crontab.
Aquí hay un script de muestra: /somepath/monitor_mysql_log.sh
Para agregar a crontab.
Haga que el script sea ejecutable:
Actualizar crontab:
Y el script se ejecutará cada minuto.
El guión que proporcioné es un guión que acabo de armar rápidamente. Además, para que su servidor pueda enviar correos electrónicos, debe instalar algo como postfix o sendmail.
fuente
Mysqldump es rápido, pero la restauración de volcados puede ser muy lenta para una gran base de datos, y el bloqueo de tablas no es aceptable en un sitio en vivo. Una forma mucho mejor y más rápida de configurar esclavos es usar XtraBackup de Percona . XtraBackup impone poca carga en el maestro, no requiere bloqueos y la restauración en el esclavo es muy rápida. Este mecanismo produce un clon completo de toda la base de datos, incluidas cosas como tablas de usuarios, que romperán algunas cosas que se configuran mediante una instalación de stock, como el usuario debian-sys-maint, que no es necesariamente algo malo !
Como beneficio adicional, una vez que sepa cómo hacer esto, puede usar exactamente el mismo mecanismo para sus copias de seguridad diarias. Las copias de seguridad son más lentas que mysqldump, pero las restauraciones son mucho más rápidas, ¡eso es justo lo que necesita si se encuentra en una situación de pánico y necesita restaurar una copia de seguridad! Si alguna vez obtiene un error de replicación importante, solo use este procedimiento para destruir el esclavo y reconstruirlo; Realmente no lleva mucho tiempo.
Tendrá que configurar el repositorio apt / yum de Percona para su distribución, luego instalar el
xtrabackup
paquete tanto en maestro como en esclavo. También recomiendo encarecidamente el uso de la utilidad de compresión pigz (gzip paralelo, disponible en la mayoría de los repositorios estándar), ya que hace una gran diferencia en la velocidad de respaldo.El proceso es así (en Ubuntu, otras distribuciones pueden variar ligeramente), y supone que ya ha instalado MySQL en su esclavo:
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 el valor del acelerador para limitar el impacto de la copia de seguridad en el servicio en vivo)scp -l 400000
para no privar al maestro del ancho de banda de la red para clientes activos)service mysql stop
mv /var/lib/mysql /var/lib/mysql2
(o comprímalo en algún lugar si tiene poco espacio en disco)mkdir /var/lib/mysql; cd /var/lib/mysql
tar xvzif /path/to/backup/mysql.tgz
. Tenga en cuenta lai
opción sobre la operación tar: no funcionará sin ella . Esto llevará un tiempo si tiene una gran base de datos./usr/bin/innobackupex --apply-log --use-memory=6G --ibbackup=xtrabackup /var/lib/mysql
. Esto efectivamente ejecuta una recuperación de bloqueo en los archivos de los registros binarios. Esto solo toma unos segundos; use una cantidad de memoria menor si está en un servidor más pequeño.rm /path/to/backup/mysql.tgz; chown -R mysql:mysql /var/lib/mysql
service mysql start
cat xtrabackup_binlog_info
. Dirá 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;
(cambie para que coincida con los detalles del servidor de base de datos real)START SLAVE;
SHOW SLAVE STATUS\G
Tu esclavo ya está listo. Si es necesario, ahora puede configurar la replicación circular:
FLUSH TABLES WITH READ LOCK; SHOW MASTER STATUS;
Anote el nombre y la posición del archivo de registro (algo así como mysql-bin.000031 y 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;
insertando valores del esclavo que acabamos de ver.START SLAVE;
UNLOCK TABLES;
Ahora debería estar todo listo con una replicación circular.
En cuanto a la resolución de problemas, el kit de herramientas de Percona tiene todo tipo de cosas para ayudar, como la suma de comprobación para detectar la corrupción silenciosa, la medición de retraso y más. Las formas más comunes de corrupción de replicación se pueden evitar configurando
binlog_format = MIXED
en my.cnf. Dicho esto, en mi experiencia, la replicación no suele ser problemática.fuente