sql >> Base de Datos >  >> RDS >> Mysql

Cómo realizar actualizaciones continuas para MySQL

Hay diferentes razones para actualizar sus bases de datos. Podría ser para aplicar correcciones de seguridad, usar nuevas funciones, resolver problemas de compatibilidad o simplemente para mantener su sistema actualizado. Esta actualización puede ser una actualización mayor o menor y, según la tecnología, existen diferentes enfoques para realizar este trabajo, pero si necesita que sus sistemas funcionen todo el tiempo sin tiempo de inactividad, realizar una actualización continua podría ser la mejor opción. .

En este blog, veremos algunas consideraciones a tener en cuenta antes de actualizar y cómo realizar una actualización gradual en MySQL.

Actualizaciones menores y mayores

En general, las actualizaciones menores son seguras en la forma en que puede degradarlas o revertirlas fácilmente y deben ser compatibles con los paquetes y funciones anteriores.

La actualización de la versión principal implica algunos riesgos, como la eliminación del paquete de la base de datos, la configuración y la compatibilidad de los conectores, las funciones obsoletas y más.

Entonces, incluso cuando las pruebas son importantes para ambos escenarios, en caso de actualizaciones importantes, son imprescindibles si desea evitar problemas graves para su negocio.

Antes de actualizar

Ahora, veamos algunas consideraciones antes de actualizar, para evitar problemas futuros.

Copias de seguridad

Las copias de seguridad siempre son importantes, y más aún si desea actualizar su base de datos. Si algo sale mal y fallan otras opciones de recuperación ante desastres, necesitará una copia de seguridad para restaurar su base de datos. Por lo tanto, antes de comenzar la tarea, realice una copia de seguridad completa (física y/o lógica) de su base de datos actual y manténgala segura hasta asegurarse de que todo funcione correctamente durante un par de días/semanas.

Revisar funciones obsoletas

Si está utilizando una función que está obsoleta en la nueva versión, su aplicación podría fallar y deberá retroceder para recuperar sus sistemas, lo que generará tiempo de inactividad (depende del enfoque) y una pérdida de tiempo. Verificar la función obsoleta y compararla con las que está utilizando evitará este intento fallido de actualización.

Pruebas

Esto es importante no solo para actualizaciones sino también para cualquier cambio en su base de datos o aplicación. Tener un entorno de prueba que replique el entorno de producción podría ahorrarle tiempo y evitar problemas inesperados durante cualquier actualización o cambio de base de datos.

Restaurar

En cualquier actualización, es importante tener una reversión lista para usarse si es necesario para tener su base de datos en funcionamiento lo antes posible. De lo contrario, podría afectar su RTO (objetivo de tiempo de recuperación) en caso de que necesite volver a crear el clúster a partir de una copia de seguridad u otra opción de plan de recuperación.

Tenga en cuenta que a veces no es posible cambiar a una versión anterior, por lo que debe tener un plan secundario en caso de que necesite revertir sus cambios.

Cheques de proveedores

Según el proveedor y la versión, puede usar el comando mysqlcheck para realizar la verificación preliminar de su instalación actual y confirmar que está listo para comenzar.

$ mysqlcheck -u root -p --all-databases --check-upgrade

Enter password:

mysql.columns_priv                                 OK

mysql.db                                           OK

mysql.engine_cost                                  OK

mysql.event                                        OK

mysql.func                                         OK

mysql.general_log                                  OK

mysql.gtid_executed                                OK

mysql.help_category                                OK

mysql.help_keyword                                 OK

mysql.help_relation                                OK

mysql.help_topic                                   OK

mysql.innodb_index_stats                           OK

mysql.innodb_table_stats                           OK

mysql.ndb_binlog_index                             OK

mysql.plugin                                       OK

mysql.proc                                         OK

mysql.procs_priv                                   OK

mysql.proxies_priv                                 OK

mysql.server_cost                                  OK

mysql.servers                                      OK

mysql.slave_master_info                            OK

mysql.slave_relay_log_info                         OK

mysql.slave_worker_info                            OK

mysql.slow_log                                     OK

mysql.tables_priv                                  OK

mysql.time_zone                                    OK

mysql.time_zone_leap_second                        OK

mysql.time_zone_name                               OK

mysql.time_zone_transition                         OK

mysql.time_zone_transition_type                    OK

mysql.user                                         OK

sys.sys_config                                     OK

Esta es la primera verificación que se debe realizar antes de actualizar, y verificará que no haya:

  • Tablas que usan funciones o tipos de datos obsoletos
  • Archivos frm huérfanos
  • Disparadores con definidor faltante o vacío o un contexto de creación no válido

Hay algunas cosas más que debe verificar, pero para evitar una publicación de blog extensa, puede consultar la documentación oficial de MySQL para esto.

Actualizaciones graduales manuales para MySQL

Existen diferentes enfoques para realizar una actualización gradual. Podría estar en su lugar, usando la replicación o incluso una combinación de ellos. En cualquier caso, si desea evitar el tiempo de inactividad, no debe realizar cambios en su aplicación durante la actualización. Para esto, puede agregar un Load Balancer frente a sus bases de datos. Su aplicación se conectará a su Load Balancer y redirigirá el tráfico a los nodos disponibles.

Digamos que tiene una replicación de MySQL con 1 nodo maestro y 2 esclavos, y 1 nodo HAProxy delante de ellos:

Una forma simplificada de realizar una actualización gradual manual en este entorno podría ser:

  • Deshabilitar un nodo esclavo de su HAProxy
  • Asegúrese de no tener tráfico en este nodo esclavo
  • Actualice el nodo esclavo manualmente
  • Verifique el estado de la replicación para asegurarse de que esté actualizado
  • Deshabilitar el nodo maestro en su HAProxy
  • Asegúrese de no tener tráfico en su nodo principal
  • Promover el nodo esclavo actualizado
  • Habilítelo en su HAProxy
  • Confirme que el nuevo maestro está recibiendo tráfico
  • Reconfigure su segundo esclavo para replicar desde el nuevo maestro
  • Deshabilitar el segundo esclavo de su HAProxy
  • Asegúrese de no tener tráfico en este nodo esclavo
  • Actualice el nodo esclavo manualmente
  • Verifique el estado de la replicación para asegurarse de que esté actualizado
  • Habilítelo en su HAProxy
  • Confirme que el nodo esclavo está recibiendo tráfico (si es necesario)
  • Vuelva a configurar su antiguo maestro para replicar desde el nuevo maestro
  • Actualice el antiguo nodo maestro manualmente
  • Verifique el estado de la replicación para asegurarse de que esté actualizado
  • Habilítelo en su HAProxy
  • Confirme que el antiguo maestro (ahora esclavo) está recibiendo tráfico (si es necesario)

Como puede ver, incluso de forma simplificada, esta tarea requiere muchos pasos y significa más posibilidades de que algo salga mal.

Actualizaciones continuas de ClusterControl para MySQL

La mejor manera de reducir la posibilidad de fallas es automatizando todos (o casi todos) estos pasos. Con ClusterControl puede realizar una actualización gradual menor de su clúster de MySQL con solo unos pocos clics.

Para hacer esto, vaya a ClusterControl -> Seleccionar clúster -> Administrar -> Actualizaciones, donde verá la opción Actualizar.

Las actualizaciones están en línea y se realizan en un nodo a la vez. El nodo se detendrá, el software se actualizará y luego el nodo se iniciará nuevamente. Si un nodo no se actualiza, el proceso se cancela.

Si elige la opción Actualizar, verá una confirmación sobre la versión que se actualizará:

Y solo necesita presionar Actualizar para confirmar este trabajo. Después de esto, puede monitorear el proceso de actualización en la Sección de actividad de ClusterControl:

Al mismo tiempo, ClusterControl reconfigurará sus Load Balancers para enviar el tráfico a los nodos disponibles.

ClusterControl solo admite actualizaciones menores porque, como mencionamos antes, una actualización importante es una tarea riesgosa que requiere pruebas e investigación para asegurarse de que su aplicación funcione correctamente en la nueva versión principal.

Conclusión

Actualizar es una tarea importante en todas las empresas y podría ser riesgoso si no toma ciertas precauciones y sigue todos los pasos de actualización correctamente.

En este blog, mencionamos algunas consideraciones a tener en cuenta antes de actualizar su base de datos y mostramos la diferencia entre hacer esta tarea manualmente y usar ClusterControl, que lo ayuda a minimizar la posibilidad de falla.