¿Debería configurarse un esclavo de replicación MySQL de solo lectura?

22

Tengo la replicación ejecutándose en Percona Server 5.5 siguiendo esta guía y me pregunté si debería agregar read-only=1a mi esclavo my.cnfpara que sea de solo lectura.

La guía configura la replicación para la tabla mysql para que los usuarios se repliquen, pero estoy usando principalmente el esclavo para tomar mysqldumps, y en una emergencia reconfigurarlo para que sea maestro, por lo que no creo que necesitemos (o debamos) escribir habilitado en constantemente?

xref
fuente
+1 para recordatorios que a menudo se pasan por alto para que los esclavos sean de solo lectura
RolandoMySQLDBA

Respuestas:

31

Cuando un esclavo es de solo lectura , no está 100% protegido del mundo.

De acuerdo con la documentación de MySQL en read-only

Esta variable está desactivada por defecto. Cuando está habilitado, el servidor no permite actualizaciones, excepto de los usuarios que tienen el privilegio SUPER o (en un servidor esclavo) de las actualizaciones realizadas por subprocesos esclavos. En las configuraciones de replicación, puede ser útil habilitar read_only en servidores esclavos para garantizar que los esclavos acepten actualizaciones solo del servidor maestro y no de los clientes.

Por lo tanto, cualquier persona con el privilegio SUPER puede leer y escribir a voluntad a tal esclavo ...

Asegúrese de que todos los usuarios sin privilegios no tengan el privilegio SUPER.

Si desea revocar todos los privilegios SUPER de una sola vez, ejecute esto en Master y Slave:

UPDATE mysql.user SET super_priv='N' WHERE user<>'root';
FLUSH PRIVILEGES;

Con referencia al Esclavo, esto reservará el privilegio SUPER para justificar rooty evitar que los no privilegiados escriban de lo contrario estarían restringidos.

ACTUALIZACIÓN 2015-08-28 17:39 EDT

Acabo de enterarme recientemente que MySQL 5.7 presentará super_read_only .

Esto detendrá a los usuarios SUPER en sus pistas porque los 5.7 Docs dicen

Si la variable del sistema read_only está habilitada, el servidor permite actualizaciones de clientes solo de usuarios que tienen el privilegio SUPER. Si la variable del sistema super_read_only también está habilitada, el servidor prohíbe las actualizaciones de clientes incluso de usuarios que tienen SUPER. Consulte la descripción de la variable de sistema read_only para obtener una descripción del modo de solo lectura e información sobre cómo interactúan read_only y super_read_only.

Los cambios en super_read_only en un servidor maestro no se replican en servidores esclavos. El valor se puede establecer en un servidor esclavo independiente de la configuración en el maestro.

super_read_only fue agregado en MySQL 5.7.8.

RolandoMySQLDBA
fuente
1
Entonces, ¿es mejor hacer esclavos de solo lectura?
xref
66
Sí, es una buena práctica hacerlo
RolandoMySQLDBA
1
¿Cómo puedo usar la base de datos de informes en el esclavo con datos agregados de la base de datos operativa con la opción de solo lectura?
Geany
3

¿Debería configurarse un esclavo de replicación MySQL de solo lectura?

Sí, será mejor que ejecutes servidores esclavos con modos R / O disponibles. Los usuarios previamente privilegiados podían modificar los datos de un esclavo de todos modos, pero más tarde también obtuvieron su "perilla" de restricción de R / O.

Por qué es importante: es mejor fallar con la escritura que arrepentirse con una escritura incorrecta que podría hacer que el esclavo quede inutilizable de manera efectiva debido a la simple acumulación de datos o cosas como conflictos de claves que romperían la replicación (no más esclavos reales nuevamente).

También hay un software utilizado para la división de orquestación / carga que tomaría en cuenta el estado de R / O de los servidores en los grupos que han configurado para el enrutamiento de solicitudes adecuado entre esos servidores.

Esto es seguridad. Úsalo.

poige
fuente
1

El problema aquí, incluido MySQL 8.0, es que MySQL no lo obliga a configurar read_only = ONcuando ejecuta el start slavecomando. ¿Por qué es un problema? Debido a que casi todos los DBA de MySQL usan sus esclavos en RO, para evitar la corrupción de datos, y siempre existe un dba que accidentalmente ejecuta incorrectamente un SQL que modifica los datos en un esclavo, o una aplicación que no cambiará su configuración. Si quiero escribir en esclavos, porque tiene varios esquemas y necesito escribir en este esquema, entonces el read_onlycomando debe ser más inteligente, y déjenos hacer read_only for schema. Eso podría ser muy útil en servidores multi-master y esclavos que hacen a Replicate_Ignore_DB. Entonces, por ahora, debes hacer el control manualmente y ser muy cuidadoso.

Disfrutar.

Cepxio
fuente