systemadmin.es > DBA > Amazon RDS (MySQL)

Amazon RDS (MySQL)

Amazon RDS (Amazon Relational Database Service), tal como su nombre indica, es un servicio de base de datos relacional basado en MySQL en “la nube”.

Al crear la instancia nos dará diversas opciones:

Crear instancia Amazon RDS

Crear instancia Amazon RDS

Podemos escoger:

  • Clase de instancia, cada una con sus características y precio. En la web de Amazon RDS podemos encontrar por el momento:
    • Small DB Instance: 1.7 GB memory, 1 ECU (1 virtual core with 1 ECU), 64-bit platform, Moderate I/O Capacity
    • Large DB Instance: 7.5 GB memory, 4 ECUs (2 virtual cores with 2 ECUs each), 64-bit platform, High I/O Capacity
    • Extra Large DB Instance: 15 GB of memory, 8 ECUs (4 virtual cores with 2 ECUs each), 64-bit platform, High I/O Capacity
    • High-Memory Extra Large Instance: 17.1 GB memory, 6.5 ECU (2 virtual cores with 3.25 ECUs each), 64-bit platform, High I/O Capacity
    • High-Memory Double Extra Large DB Instance: 34 GB of memory, 13 ECUs (4 virtual cores with 3,25 ECUs each), 64-bit platform, High I/O Capacity
    • High-Memory Quadruple Extra Large DB Instance: 68 GB of memory, 26 ECUs (8 virtual cores with 3.25 ECUs each), 64-bit platform, High I/O Capacity
  • Versión de MySQL, actualmente entre:
    • 5.5.8
    • 5.1.50
    • 5.1.49
    • 5.1.45
  • Actualización automática de revisión menor
  • Multi-AZ Deployment: Indicamos si queremos una replica en stand-by en otra zona

Además nos pide los datos para la instancia como son el espacio, el identificado de la instancia y el usuario y contraseña.

A continuación tenemos varios parámetros de configuración opcionales:

Configuración opcional de Amazon RDS

Configuración opcional de Amazon RDS

Como por ejemplo crear una base de datos, definir el puerto en el que estará escuchando o los parámetros (DB Parameter Group) de configuración de MySQL y las reglas de visibilidad (DB security Groups)

Finalmente nos dejará escoger algunas opciones sobre la administración de la instancia de base de datos:

Ventanas de backup y mantenimiento

Ventanas de backup y mantenimiento

Podemos definir la ventana para el backup y el mantenimiento según nos convenga y el periodo de retención de los backups: de zero a 8 días.

Finalmente nos indicará que revisemos la configuración que hayamos escogido:

Configuración antes de crear una instancia de Amazon RDS

Configuración antes de crear una instancia de Amazon RDS

Y podremos proceder a la creación de la instancia:

Creando instancia Amaon RDS

Creando instancia Amaon RDS

A continuación cuando este creada, en la descripción de la instancia podremos ver el nombre DNS (Endpoint) que deberemos usar para conectarnos a la base de datos:

Descripción instancia Amazon RDS

Descripción instancia Amazon RDS

Mediante la opción -h y con el usuario y contraseña que hayamos definido en el primer paso nos conectamos a la base de datos:

$ mysql -h prova1.ckfqrwfhqun6.eu-west-1.rds.amazonaws.com -u  rut -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 6
Server version: 5.5.8 Source distribution

Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved.
This software comes with ABSOLUTELY NO WARRANTY. This is free software,
and you are welcome to modify and redistribute it under the GPL v2 license

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

La conexión es exclusiva con el cliente MySQL, por lo que ya podemos ir olvidándonos de SSH al servidor.

Podremos apreciar que hay un usuario de gestión de la instancia (rdsadmin) conectado:

mysql> show full processlist;
+----+----------+---------------------------------+------+---------+------+-------+-----------------------+
| Id | User     | Host                            | db   | Command | Time | State | Info                  |
+----+----------+---------------------------------+------+---------+------+-------+-----------------------+
|  4 | rdsadmin | localhost:44491                 | NULL | Sleep   |    6 |       | NULL                  |
|  6 | rut      | localhost3.systemadmin.es:11555 | NULL | Query   |    0 | NULL  | show full processlist |
+----+----------+---------------------------------+------+---------+------+-------+-----------------------+
2 rows in set (0.06 sec)

Y que no disponemos de permisos totales (SUPER) sobre la instancia:

mysql> show grants;
+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Grants for rut@%                                                                                                                                                                                                                                                                                                                                                              |
+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, RELOAD, PROCESS, REFERENCES, INDEX, ALTER, SHOW DATABASES, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION CLIENT, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, TRIGGER ON *.* TO 'rut'@'%' IDENTIFIED BY PASSWORD '*40BAC704B5E507E8561874DCB29C9D8BD143F525' WITH GRANT OPTION |
+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.07 sec)

A parte de ciertas opciones de configuración que podemos cambiar mediante la interfaz web:

Interfaz web configuración Amazon RDS

Interfaz web configuración Amazon RDS

Podemos ver la configuración de la instancia con SHOW VARIABLES:

mysql> show variables like 'inno%';
+---------------------------------+------------------------+
| Variable_name                   | Value                  |
+---------------------------------+------------------------+
| innodb_adaptive_flushing        | ON                     |
| innodb_adaptive_hash_index      | ON                     |
| innodb_additional_mem_pool_size | 2097152                |
| innodb_autoextend_increment     | 8                      |
| innodb_autoinc_lock_mode        | 1                      |
| innodb_buffer_pool_instances    | 1                      |
| innodb_buffer_pool_size         | 1336934400             |
| innodb_change_buffering         | all                    |
| innodb_checksums                | ON                     |
| innodb_commit_concurrency       | 0                      |
| innodb_concurrency_tickets      | 500                    |
| innodb_data_file_path           | ibdata1:10M:autoextend |
| innodb_data_home_dir            | /rdsdbdata/db/innodb   |
| innodb_doublewrite              | ON                     |
| innodb_fast_shutdown            | 1                      |
| innodb_file_format              | Antelope               |
| innodb_file_format_check        | ON                     |
| innodb_file_format_max          | Antelope               |
| innodb_file_per_table           | ON                     |
| innodb_flush_log_at_trx_commit  | 1                      |
| innodb_flush_method             | O_DIRECT               |
| innodb_force_recovery           | 0                      |
| innodb_io_capacity              | 200                    |
| innodb_lock_wait_timeout        | 50                     |
| innodb_locks_unsafe_for_binlog  | OFF                    |
| innodb_log_buffer_size          | 8388608                |
| innodb_log_file_size            | 134217728              |
| innodb_log_files_in_group       | 2                      |
| innodb_log_group_home_dir       | /rdsdbdata/log/innodb  |
| innodb_max_dirty_pages_pct      | 75                     |
| innodb_max_purge_lag            | 0                      |
| innodb_mirrored_log_groups      | 1                      |
| innodb_old_blocks_pct           | 37                     |
| innodb_old_blocks_time          | 0                      |
| innodb_open_files               | 300                    |
| innodb_purge_batch_size         | 20                     |
| innodb_purge_threads            | 0                      |
| innodb_read_ahead_threshold     | 56                     |
| innodb_read_io_threads          | 4                      |
| innodb_replication_delay        | 0                      |
| innodb_rollback_on_timeout      | OFF                    |
| innodb_spin_wait_delay          | 6                      |
| innodb_stats_on_metadata        | ON                     |
| innodb_stats_sample_pages       | 8                      |
| innodb_strict_mode              | OFF                    |
| innodb_support_xa               | ON                     |
| innodb_sync_spin_loops          | 30                     |
| innodb_table_locks              | ON                     |
| innodb_thread_concurrency       | 0                      |
| innodb_thread_sleep_delay       | 10000                  |
| innodb_use_native_aio           | ON                     |
| innodb_use_sys_malloc           | ON                     |
| innodb_version                  | 1.1.4                  |
| innodb_write_io_threads         | 4                      |
+---------------------------------+------------------------+
54 rows in set (0.06 sec)

Me ha sorprendido gratamente ya que la configuración que viene por defecto esta bastante bien para mi gusto. Por ejemplo, usa innodb_file_per_table.

Pero evidentemente hay ciertas opciones que si no están en la interfaz web no podremos cambiar por el hecho de no tener el SUPER:

mysql> set global read_only=1;
ERROR 1227 (42000): Access denied; you need (at least one of) the SUPER privilege(s) for this operation

En dicho entorno no estamos libres de reinicios de MySQL, ya que para aplicar ciertos cambios va a necesitar un reinicio del servicio:

Aplicar ciertas modificaciones implica reiniciar el MySQL

Aplicar ciertas modificaciones implica reiniciar el MySQL

Lo podemos apreciar si tenemos alguna conexión abierta:

mysql> show databases;
ERROR 2006 (HY000): MySQL server has gone away
No connection. Trying to reconnect...
Connection id:    1
Current database: *** NONE ***

+--------------------+
| Database           |
+--------------------+
| information_schema |
| innodb             |
| mysql              |
| performance_schema |
| prova1             |
| prova2             |
+--------------------+
6 rows in set (0.59 sec)

Evidentemente, si hemos seleccionado el auto-upgrade de minor (primer paso) dentro de las ventanas de mantenimiento tendremos reinicios para aplicar dichos cambios.

Por otro lado para restaurar la base de datos tenemos una interfaz amigable:

Restaurar datos de Amazon RDS

Restaurar datos de Amazon RDS

Pero no tenemos acceso directo a estos backups de nuestros datos, que no dejan de ser backups con snapshots, seguramente de la maquina virtual entera que luego se le apliquen los binlogs para una recuperación en un determinado punto en el tiempo (PITR)

Otro punto interesante es la posibilidad de crear un MySQL slave a partir de una instancia:

Creación de un slave de la base de datos

Creación de un slave de la base de datos

Finalmente, tenemos una monitorización básica del servidor que nos puede ser útil:

Estadísticas Amazon RDS

Estadísticas Amazon RDS

Es más que evidente que Amazon RDS tiene ciertas ventajas sobre una instalación própia de MySQL:

  • Facilidad absoluta con la que montamos un MySQL
  • No tenemos que preocuparnos de los backups
  • Creación de los slave de solo lectura fácilmente
  • Administración prácticamente cero

Pero también tiene inconvenientes:

  • Tiene un precio/hora más elevado que una instancia de maquina virtual
  • Perdida de privilegios, por lo que perdemos el control en ciertos aspectos
  • Administración cero, también implica que se nos da un cierto producto que no podemos moldear
  • Limitado a 8 días de retención de backups

En general, me parece un buen producto si no dispones de alguien que pueda administrar la base de datos, pero si por el contrario puedes disponer de alguien resulta más económico y más práctico instalar un MySQL desde cero que estar atado a las opciones de Amazon RDS.

Deja un comentario:

XHTML - Tags permitidos:<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>