CLUSTER Flashcards
El objetivo de este Deck de Mysql es tener un dominio avanzado de conocimientos acerca de la herramienta
¿que es mysql?
MySQL es un sistema de gestión de bases de datos relacional, multihilo y multiusuario
¿sentencia para crear un usuario llamado jmedina con privilegios de consulta, borrado y actualización de registros en la base de datos sakila y solo para las tabla actor con la clave mysqlp@ssw0rd?
grant select,delete,update on sakila.actor to javier identified by ‘mysqlp@ssw0rd’
indique como desde terminal de linux nos conectamos a mysql teniendo el usuario jmedina y el password p@ssw0rd
$ mysql -ujmedina -pp@ssw0rd
¿En Linux las opciones de arranque de Mysql se encuentran en:?
/etc/mycnf con propósito global /etc/mysql/mycnf propósito global SYSCONFDIR/my.cnf propósito global $MYSQL_HOME/my.cnf opciones específicas del servidor defaults-extra-file este se especifica con –defaults-extra-file=path ~/.my.cnf opciones específicas de usuario.
¿Para que sirve la sentencia show grants for <nombre_del_usuario>?</nombre_del_usuario>
Esta sentencia sirve para desplegar todos los privilegios que tiene el usuario <nombre></nombre>
por ejemplo nos mostraría algo así:
mysql> show grants for javier;
+————————————————–+
| Grants for javier@% |
+————————————————–+
| GRANT USAGE ON *.* TO ‘javier’@’%’ |
| GRANT SELECT ON sakila
.actor
TO ‘javier’@’%’ |
+————————————————–+
2 rows in set (0.00 sec)
Describa la forma en que usted podria empezar a conecer el entorno cuando ya se encuentra en el prompt de mysql(mysql>)
show databases; : me indica las bases de datos con las que contamos
use <nombre> ; </nombre> con use nos conectamos a la BD seleccionada
show tables;: nos muestra las tablas con las que cuenta la BD
desc<nombre>; </nombre>nos describe la tabla( es decir nos muestra el nombre del campo y su tipo de datos
show create table <nombre>;</nombre> nos muestra el script con el que fue creado la tabla
ejemplo
mysql> show databases;
+——————–+
| Database |
+——————–+
| information_schema |
| mysql |
| pedidos |
| performance_schema |
| sakila |
| test |
+——————–+
6 rows in set (0.06 sec)
mysql> use sakila;
Database changed
mysql> show tables;
+—————————-+
| Tables_in_sakila |
+—————————-+
| actor |
| actor_info |
| address |
| category |
| city |
| country |
| customer |
| customer_list |
| film |
| film_actor |
| film_category |
| film_list |
| film_text |
| inventory |
| language |
| nicer_but_slower_film_list |
| payment |
| rental |
| sales_by_film_category |
| sales_by_store |
| staff |
| staff_list |
| store |
+—————————-+
23 rows in set (0.00 sec)
mysql> desc actor;
+————-+———————-+——+—–+——————-+—————————–+
| Field | Type | Null | Key | Default | Extra |
+————-+———————-+——+—–+——————-+—————————–+
| actor_id | smallint(5) unsigned | NO | PRI | NULL | auto_increment |
| first_name | varchar(45) | NO | | NULL | |
| last_name | varchar(45) | NO | MUL | NULL | |
| last_update | timestamp | NO | | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP |
+————-+———————-+——+—–+——————-+—————————–+
4 rows in set (0.02 sec)
¿cuantas formas existen para crear un usuario en mysql, mencionelas?
En mysql se pueden crear usuarios de dos formas:
- Se pueden crear mediante la sentencia create user <nombre>;</nombre>
de esta forma solo se crea el usuario , este usuario no tiene permisos ni contraseña
create user <nombre> identified by '<password>';</password></nombre>
crea usuario y contraseña , sin embardo no tiene privilegios de nada
- Se pueden crear usuarios y asignarles contraseñas y privilegios de una vez con la sentencia grant select, update, delete,drop on <bd>.<tbl> to <nombre> identified by '<contrase>' ejemplo: grant select, update on sakila.actor to jmedina identified by 's3rv3r'</contrase></nombre></tbl></bd>
Procedimiento correcto para borrar un usuario
quitar los privilegios con revoke, si no estamos seguros de que privilegios tiene ese usuario lo averiguamos con la sentencia show grants<nombre>:</nombre>
Consultamos que privilegios tiene el usuario jmedina mysql\> show grants for jmedina;
Luego revocamos los privilegios:
mysql\> revoke select,update,delete,drop from jmedina;
Por último borramos el usuario
mysql>drop user jmedina
¿como veo la lista de procesos y usuarios en mysql, ademas indique como eliminar un proceso?
se puede ver la lista de procesos activos con:
mysql> show processlist;
+—-+——+———–+——–+———+——+——-+——————+
| Id | User | Host | db | Command | Time | State | Info |
+—-+——+———–+——–+———+——+——-+——————+
| 1 | root | localhost | sakila | Query | 0 | NULL | show processlist |
+—-+——+———–+——–+———+——+——-+——————+
1 row in set (0.00 sec)
mysql> kill 1;
ERROR 1317 (70100): Query execution was interrupted
mysql>
¿cual parametro hay que cambiar para el auto incremento y el parametro de inicio del auto incremento?
por ejemplo setee los parametros para que inicie en 100 y vaya de 10 en 10
el parametro para aumentar el auto incremento es auto_increment_increment, por default esta en 1
el parametro para fijar el número en que inicia el autoincremento es el auto_increment_offset por default esta en 1
mysql> SHOW VARIABLES LIKE ‘auto_inc%’;
+————————–+——-+
| Variable_name | Value |
+————————–+——-+
| auto_increment_increment | 1 |
| auto_increment_offset | 1 |
+————————–+——-+
2 rows in set (0.01 sec)
mysql> SET @@auto_increment_increment=10;
Query OK, 0 rows affected (0.00 sec)
mysql> SHOW VARIABLES LIKE ‘auto_inc%’;
+————————–+——-+
| Variable_name | Value |
+————————–+——-+
| auto_increment_increment | 10 |
| auto_increment_offset | 1 |
+————————–+——-+
mysql> SET @@auto_increment_offset=100;
Query OK, 0 rows affected (0.00 sec)
mysql> SHOW VARIABLES LIKE ‘auto_inc%’;
+————————–+——-+
| Variable_name | Value |
+————————–+——-+
| auto_increment_increment | 10 |
| auto_increment_offset | 100 |
+————————–+——-+
¿Qué es mysql Cluster?
MySQL Cluster
MySQL Cluster, como lo comentamos al principio de ésta entrada, es otro producto para administración de bases de datos, el cual puede proveer arquitecturas con 99.999% de alta disponibilidad, esto es alrededor de solo 5 minutos de tiempo NO operable al año.
MySQL Cluster, a diferencia de MySQL Server configura su servicio a través de 3 tipos de nodos:
- SQL / Application Nodes: Nodos transaccionales, los cuales reciben las peticiones de los clientes y transfieren éstas al grupo de Data Nodes, para proveer un cluster de HA, se necesitan al menos 2 instancias de SQL / Application Nodes.
- Data Nodes: Nodos de datos, lo cuales se encargan de la persistencia y sincronización de datos entre los nodos, para proveer un cluster de HA, se necesitan al menos 2 instancias de Data Nodes.
- Management Node: Nodo para administración de los servicios de MySQL Cluster, su función principal es iniciar servicios, y administrar el cluster a través de comandos CLI.
En este caso de MySQL Cluster es: Shared Nothing Architecture, a diferencia de MySQL Server (el cual puede trabajar con SAN); MySQL Cluster opera con su propia infraestructura en disco, pudiendo ser éstos discos attachados al server. MySQL Cluster, se encargará de replicar los datos y sincronizar la información entre todos los data nodes.
En materia de costos, MySQL Cluster se licencia por CPU, y adicionalmente se paga un monto anual por mantenimiento, en tanto que MySQL Server, se subscribe por un monto anual, el cual te da derecho de uso del software y servicios de mantenimiento soporte anual.
En próximas entradas escribiremos más detalles sobre MySQL Cluster, así como un ejemplos de como habilitar arquitecturas de HA con MySQL Server, o MySQL Cluster.
¿Cuántas máquinas necesito para ejecutar un cluster mysql, y porqué?
omo mínimo se necesitan tres máquinas. Sin embargo, el número mínimo recomendado en MySQL Cluster es cuatro: una para el nodo de administración y otra para el de SQL, y dos para servir como nodos de almacenamiento. El propósito de los dos nodos de datos es proporcionar redundancia; el nodo de administración debe ejecutarse en una máquina separada para garantizar servicio de arbitración contínuo en caso que un nodo de datos falle.
¿Qué hacen las distintas máquinas en un cluster?
Un MySQL Cluster tiene organización física y lógica, con máquinas como elementos físicos. Los elementos lógicos son los nodos, y una máquina hospedando un nodo es un huésped cluster. Idealmente, habrá un nodo por huésped cluster, aunque es posible ejecutar más de un nodo en una máquina. Hay tres tipos de nodos, cada uno correspondiente a un rol específico en el cluster. Son:
nodo de administración (nodo MGM) : Proporciona servicios de administración para todo el cluster, incluyendo arranque, parada, copias de seguridad, y datos de configuración en otros nodos. El nodo de administración se implementa como la aplicación ndb_mgmd; el cliente de administración usado para controlar MySQL Cluster via nodo MGM es ndb_mgm.
nodo de datos: Almacena y replica datos. La funcionalidad de los nodos de datos la trata una instancia del proceso NDB ndbd.
nodo SQL: Símplemente es una instancia de MySQL Server (mysqld) arrancado con la opción –ndb-cluster.
¿Qué sistemas operativos pueden usar Cluster?
En MySQL 5.0, MySQL Cluster se soporta oficialmente en Linux, Mac OS X, y Solaris. Estamos trabajando para añadir soporte a cluster para otras plataformas, incluyendo Windows, y nuestra finalidad es eventualmente ofrecer MySQL Cluster en todas las plataformas en que se soporta MySQL .
Puede ser posible ejecutar procesos Cluster en otros sistemas operativos. Hemos tenido reportes de usuarios que dicen que han ejecutado Cluster en FreeBSD. Sin embargo, Cluster en cualquier plataforma que no sen las 3 mencionadas aquí se considera software alfa (como mucho), no puede garantizarse el buen funcionamiento en un entorno de producción, y no lo soporta MySQL AB.
¿Cuáles son los requerimientos de hardware para ejecutar MySQL Cluster?
luster debe ejecutarse en cualquier plataforma en que los binarios de NDB estén disponibles. Naturalmente, una CPU más rápida y más memoria mejora el rendimiento, y CPUs de 64 bits serán mejores que los procesadores de 32. Debe haber suficiente memoria en las máquinas usadas por los nodos de datos para tratar cada parte de la base de datos (consulte ¿Cuánta RAM necesito? para más información). Los nodos pueden comunicarse via TCP/IP estándar y su hardware. Para soporte SCI, se necesita hardware especial de red.
¿Necesito hacer alguna configuración especial de red para el Cluster? (¿Cómo se comunican las máquinas en un cluster?)
MySQL Cluster está pensado para usarse en un entorno de gran ancho de banda, con máquinas conectadas via TCP/IP. Su rendimiento depende directamente en la velocidad de conexión entre las máquinas del cluster. Los requerimientos de conectividad mínimo para cluster incluyen una red típica 100-megabit Ethernet o equivalente. Recomendamos usar Ethernet cuando sea posible.
También se soporta el protocolo SCI (más rápido), pero necesita hardware especial. Consulte Sección 16.7, “Usar interconexiones de alta velocidad con MySQL Cluster” para más información acerca de SCI.
Como MySQL Cluster usa TCP/IP, ¿significa que puedo usarlo en Internet, con uno o más nodos en una localización remota?
Es importante tener presente que la comunicación entre nodos en MySQL Cluster no es segura ; no está cifrada ni protegida por ningún otro mecanismo. La configuración más segura para un cluster es en una red privada detrás de un firewall, sin acceso directo a ningún nodo de datos ni de administración desde fuera.
Es muy dudoso que un cluster se muestre fiable bajo tales condiciones, ya que se diseñó e implementó con la suposición que se ejecutaría bajo condiciones que garantizaran conectividad dedicada de alta velocidad como las encontradas en configuraciones en una LAN con 100 Mbps o gigabit Ethernet (mejor la última). No testeamos ni garantizamos el rendimiento usando algo más lento que esto.
¿Debo usar nuevos lenguajes de programación o de consulta para usar Cluster?
No. Aunque se usan algunos comandos especializados para administrar y configurar el cluster, solo comandos estándar (My)SQL se necesitan para:
Crear, alterar y borrar tablas
Insertar, actualizar y borrar datos de tabla
Crear, cambiar y borrar índices únicos y primarios
Configurar y administrar nodos SQL (servidores MySQL)
Cómo puedo saber qué significan los mensajes de error o advertencias al usar Cluster?
Se puede hacer de dos modos:
Desde el MySQL Monitor, use SHOW ERRORS o SHOW WARNINGS inmediatamente al recibir la notificación del error o advertencia. También se pueden mostrar en MySQL Query Browser.
De un shell de sistema, use perror –ndb error_code.
¿Es MySQL Cluster transaccional? ¿Qué tipo de tablas se soportan en Cluster ?
Sí. MySQL Cluster utiliza tablas creadas con el motor NDB , que soporta transacciones. NDB es el único motor que soporta cluster.
¿Qué significa “NDB”?
Significa “Network Database”.
Qué versiones de MySQL software soportan Cluster? ¿Debo compilarlo de las fuentes?
Cluster se soporta en todos los binarios MySQL-max en la serie 5.0, excepto lo que se explica en el siguiente parágrafo. Puede determinar si su servidor soporta o no NDB usando los comandos SHOW VARIABLES LIKE ‘have_%’; o SHOW ENGINES;. (Consulte Sección 5.1.2, “El servidor extendido de MySQL mysqld-max” para más información.)
Usuarios de Linux , tengan en cuenta que NDB no se incluye en los RPM estándar de MySQL server. Desde MySQL 5.0.4, hay paquetes RPM separados para el motor NDB junto con herramientas de administración; consulte la sección de descargas NDB RPM de MySQL 5.0 Downloads . (Antes de 5.0.4, debe usar los binarios -max proporcionados como .tar.gz . Todavía es posible, pero no es un requerimiento, así que puede usar su administración de RPMs de Linux si lo prefiere.) Puede obtener soporte NDB compilando los binarios -max de las fuentes, pero no es necesario hacerlo para usar MySQL Cluster. Para descargar los últimos binarios, RMP o distribución fuente en la serie MySQL 5.0
¿Cuánta RAM necesito? ¿Es posible usar memoria de disco?
Actualmente, Cluster sólo funciona en memoria. Esto significa que todos los datos de tabla (incluyendo índices) se almacena en RAM. Por lo tanto, si sus datos ocupan 1 GB de espacio y quiere replicarlo en el cluster, necesitará 2 GB de memoria para ello. Esto es a parte de la memoria necesaria para el sistema operativo y cualquier aplicación ejecutándose en las máquinas del cluster.
Puede usar la siguiente fórmula para obtener una estimación aproximada de cuánta RAM necesita para cada nodo de datos en el cluster:
(SizeofDatabase * NumberOfReplicas * 1.1 ) / NumberOfDataNodes
Para calcular los requerimientos de memoria con más exactitud debe determinar, para cada tabla en la base de datos del cluster, el espacio de almacenamiento requerido por registro (consulte Sección 11.5, “Requisitos de almacenamiento según el tipo de columna” para más detalles), y multiplicarlo por el número de registros. Debe recordar tener en cuenta cualquier índice de columna como sigue:
Cada clave primaria o índice hash creado para una tabla NDBCluster necesita 21-25 bytes por registro. Estos índices usan IndexMemory.
Cada índice ordenado necesita 10 bytes de almacenamiento por registro, usando DataMemory.
Crear una clave primaria o índice único también crea un índice ordenado, a no ser que este índice se cree con USING HASH. En otras palabras, si se crea sin USING HASH, una clave primaria o índice único en una tabla Cluster ocupará hasta 31-35 bytes por registro en MySQL 5.0.
Tenga en cuenta que crear tablas MySQL Cluster con USING HASH para todas las claves primarias e índices únicos generalmente causará que las actualizaciones de tablas sean más rápidas. Esto es debido al hecho que se necesita menos memoria (ya que no se crean índices únicos), y que debe usarse menos CPU (ya que se deben leer y actualizar menos índices).
Es especialmente importante tener en mente que cada tabla en MySQL Cluster debe tener clave primaria, que el motor NDB creará una clave primaria automáticamente si no se define y que esta clave primaria se crea sin USING HASH.
No hay una forma sencilla en MySQL 5.0 para determinar exactamente cuánta memoria se está usando para almacenar índices Cluster en un momento dado; sin embargo, las advertencias se escriben en el log del cluster cuando el 80% de memoria DataMemory y/o IndexMemory está en uso, y de nuevo al 85%, 90% etc.
A menudo vemos preguntas de usuarios que reportan que, cuando intentan rellenar una base de datos cluster, el proceso de carga termina prematuramente y aparece un mensaje de error como este:
ERROR 1114: The table ‘my_cluster_table’ is full
Cuando esto ocurre, la causa es que su configuración no proporciona suficiente RAM para todos los datos de tablas e índice , incluyendo la clave primaria requerida por el motor NDB y creada automáticamente en el caso que la definición de tabla no incluya la definición de la clave primaria.
Vale la pena tener en cuenta que todos los nodos de datos deben tener la misma cantidad de RAM, ya que ningún nodo de datos en el cluster puede usar más memoria que la mínima cantidad disponible para cualquier nodo de datos individual. En otras palabras, si hay tres máquinas con nodos de datos y dos tienen 3 GB RAM disponibles y otro sólo 1 GB de RAM, entonces cada nodo sólo puede usar 1 GB para el cluster.
En caso de un fallo catastrófico — por ejemplo, que la ciudad entera se queda sin electricidad y mi UPS falla — ¿perdería todos mis datos?
Todas las transacciones con commit se loguean. Por lo tanto, aunque es posible perder algunos datos en caso de catástrofe, debería ser algo limitado. La pérdida de datos puede reducirse minimizando el número de operaciones por transacción. (No es buena idea realizar un gran número de operaciones por transacción en cualquier caso.)
http://dev.mysql.com/doc/refman/5.0/es/mysql-cluster-faq.html
INTO TABLE
*****************metodo 2*******************
LOAD DATA LOCAL INFILE '
INTO TABLE
LINES TERMINATED BY 'R\,N\,(ENTER)