Displaying posts with tag: MySQL (reset)
MySQL en modo bootstrap (similar a single user)

Una opción interesante del mysqld es la opción –bootstrap, esta se usa para inicializar la base de datos sin arrancar totalmente la instancia. Vamos a ver como funciona y como podemos usarla para tener el MySQL en un modo similar a lo que sería el single user de Unix. Con dicha opción –bootstrap arranca el [...]

Dimensionar max_connections y max_user_connections

Los parámetros que limitan el número de conexiones a MySQL son max_connections y max_user_connections. Gracias a ellas podemos hasta cierto punto controlar el MySQL para evitar que devore los recursos del sistema. El parámetro max_connections define el número global de conexiones permitidas (sumando todos los usuarios), pero siempre se reserva una extra para la conexión [...]

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: Podemos escoger: Clase de instancia, cada una con sus características y precio. En la web de Amazon RDS podemos encontrar por el [...]

MySQL: show table status mejorado

Desde la línea de comando ciertamente tenemos el control absoluto (siempre y cuando tengamos los privilegios) pero no siempre tenemos una visión general. En este caso cuando estamos logueados a una base de datos MySQL lo primero que solemos intentar averiguar es la lista de tablas y talvez la lista de funciones y procedimientos almacenados de una base de datos.

Este proceso suele ser doloroso por que en cuanto ejecutamos show table status; nos devuelve unas lineas que hasta da pereza interpretar. Lo que devuelve ese comando contiene varias columnas que vistas desde una herramienta visual como MySQL Workbench tienen mucho sentido, sin embargo desde la linea de comando no tanto. Pueden ver en la siguiente imagen como se ve un resultado en una ventana estándar de 80×25:

Para ver el detalle completo …

[Lea más]
Fichero ibdata1 enorme y el parámetro innodb_file_per_table

Por defecto en MySQL, los datos de las tablas InnoDB se van guardando en el fichero ibdata1 (system tablespace) dentro del datadir de MySQL. Esto acabar normalmente generando un fichero enorme e inmanejable. Dicho fichero (en terminología de InnoDB es un tablespace) tiene el inconveniente que crece indefinidamente y no se puede reducir. Por ejemplo, [...]

La herramienta típica para hacer Benchmark de MySQL es sysbench...

La herramienta típica para hacer Benchmark de MySQL es sysbench http://sysbench.sourceforge.net/

Se hace en dos pasos:

  • Preparar la tabla sobre la que se hará el testeo:
sysbench --test=oltp --db-driver=mysql --mysql-db=test --mysql-user=root --mysql-password=xxxxx
 --mysql-table-engine=innodb --oltp-table-size=1000000 prepare

Donde se indica que el driver será mysql, la base de datos test y el engine innodb con un tamaño de 1000000. La tabla tendrá el siguiente formato:

CREATE TABLE sbtest (id int(10) unsigned NOT NULL auto_increment, 
k int(10) unsigned NOT NULL default '0', c char(120) NOT NULL default '', 
pad char(60) NOT NULL default '', PRIMARY KEY  (id), KEY k (k));
  • Una vez preparada, lanzamos el benchmark: …
[Lea más]
max_connections es un valor que no se puede poner al azar, ya que...

max_connections es un valor que no se puede poner al azar, ya que afecta al funcionamiento de la aplicación y establece el máximo de memoria que MySQL podrá utilizar. La fórmula para calcularlo es:

(read_buffer_size + read_rnd_buffer_size + sort_buffer_size + thread_stack 
+ join_buffer_size) * max_connections

Por lo tanto, si los buffers anteriores suman 70 megas y ponemos 10.000 conexiones máximas, MySQL se creerá que tiene para gestionar 680 GB de RAM.

Imaginemos entonces que la máquina tiene 3gb. Como los 680 no los va a intentar reservar al iniciio no hay problema, pero el aceptará conexiones sin parar y llegará un momento en el que se superen los 3 gigas. Como MySQL cree que tiene 680, seguirá aceptando conexiones y todas empezarán a fallar, las nuevas y las actuales por errores de falta de memoria. Al final, aunque indiques 10.000 conexiones máximas, tu máquina no las gestionará y tirarás a bajo todo …

[Lea más]
Patch al MySQL 5.5 para guardar el timestamp cuando aumenta el max_used_connections

Anteriormente ya vimos el patch para MySQL 5.1 para max_used_connections_ts que nos indica el timestamp en que se ha llegado (mayor o igual) al high water mark. El patch para la versión 5.5 es el siguiente: diff -Naur mysql-5.5.10/sql/mysqld.cc mysql-5.5.10_max_used_ts/sql/mysqld.cc --- mysql-5.5.10/sql/mysqld.cc 2011-03-09 16:11:38.000000000 +0100 +++ mysql-5.5.10_max_used_ts/sql/mysqld.cc 2011-03-29 14:40:38.000000000 +0200 @@ -332,6 +332,7 @@ static [...]

Actualizar MySQL 5.1 a MySQL 5.5

Antes de actualizar de MySQL 5.1 a MySQL 5.5 deberíamos revisar la documentación de MySQL al respecto en búsqueda de cambios que nos afecten a las aplicaciones que lo usen para poder adaptarlas. Primero necesitaremos instalar cmake y ncurses-devel para el proceso de compilación: yum install cmake -y yum install ncurses-devel -y A continuación podremos [...]

El peligro del permiso FILE de MySQL

Mediante el permiso FILE permitimos que desde una sentencia SQL se lea y se escriba en el sistema de ficheros del servidor MySQL de acuerdo con los permisos del usuario que se ejecute (normalmente existe un usuario dedicado llamado mysql o mysqld) Podemos otorgar dicho privilegio mediante GRANT FILE: mysql> grant file on *.* to [...]