Displaying posts with tag: DBA (reset)
MySQL: processlist con el estado de la transacción

Al realizar un SHOW PROCESSLIST podemos ver el estado de las conexiones a la base de datos, pero nos perdemos completamente el estado de las transacciones:

mysql> show processlist;
+----+------+-----------+--------------------+---------+------+-------+------------------+
| Id | User | Host      | db                 | Command | Time | State | Info             |
+----+------+-----------+--------------------+---------+------+-------+------------------+
| 81 | root | localhost | jordi              | Sleep   |  532 |       | NULL             |
| 82 | root | localhost | information_schema | Query   |    0 | NULL  | show processlist |
| 83 | root | localhost | NULL               | Sleep   |  119 |       | NULL             |
+----+------+-----------+--------------------+---------+------+-------+------------------+
3 rows in set (0.00 sec)

En el ejemplo anterior podriamos suponer que hay una conexión que lleva 532 …

[Lea más]
MySQL: SYSDATE() vs NOW()

En MySQL tenemos dos funciones para obtener la fecha actual que difieren muy ligeramente en su funcionamiento SYSDATE() y NOW(). Comparadas en una misma query aparentemente no tienen ninguna diferencia:

mysql> select sysdate(), now();
+---------------------+---------------------+
| sysdate()           | now()               |
+---------------------+---------------------+
| 2014-07-08 19:07:24 | 2014-07-08 19:07:24 |
+---------------------+---------------------+
1 row in set (0.00 sec)

Pero si las analizamos bien con un SLEEP() en medio podremos ver que su comportamiento difiere, con SYSDATE() obtenemos la fecha en la que se ejecuta dicha función:

mysql> select sysdate(), sleep(5), sysdate();
+---------------------+----------+---------------------+
| sysdate()           | sleep(5) | sysdate()           |
+---------------------+----------+---------------------+
| …
[Lea más]
MySQL: Definir el tamaño de innodb_log_buffer_size

La variable innodb_log_buffer_size controla el tamaño de un buffer que permite ejecutar transacciones sin tener que escribir el log a disco antes del fin de ésta. Vamos a ver cómo estimar su tamaño

El valor por defecto de dicha variable es de 1MB para versiones de MySQL anteriores a la 5.5 y de 8MB a partir de ésta. Dependerá de la carga del servidor si hace falta ampliarlo, pero 8MB es suficiente para la mayoria de los casos

Mediante la variable de estado Innodb_log_waits podemos ver un contador con las veces que ha sido necesario escribir a disco una transacción que no ha llegado aún al COMMIT porque dicho buffer era demasiado pequeño:

mysql> show status …
[Lea más]
Forzar el uso de UTF8 en MySQL

En varias ocasiones he visto que se ha empezado un proyecto con el encoding a latin1 y se ha querido migrar a UTF8. Vamos a ver cómo forzar un determinado encoding independientemente de la configuración del cliente de MySQL

Para asegurarnos que las conexiones se establecen con UTF8 podemos usar init-connect pata forzar el cambio a UTF8 mediante un SET NAMES. Además mediante character-set-server y collation-server podemos definir el charset y el collation por defecto del servidor:

[mysqld]
init-connect='SET NAMES utf8'
collation-server = utf8_unicode_ci
character-set-server = utf8

Tags: MySQL
Relacionados

[Lea más]
Eliminar usuario de MySQL

Para poder eliminar usuarios de una base de datos MySQL tenemos el comando DROP USER:

Si indicamos la combinación usuario@host podemos eliminar el acceso del usuario para esos determinados hosts, por ejemplo:

mysql> drop user 'joffrey'@'casterlyrock.com', 'joffrey'@'kingslanding.com';

Si indicamos únicamente el usuario, lo eliminaremos completamente, para todos los hosts:

mysql> drop user joffrey;

Tags: MySQL
Relacionados

[Lea más]
mysqldump: Warning: Skipping the data of table mysql.event

Al realizar un mysqldump nos podemos encontrar con el siguiente warning:

# mysqldump --all-databases
-- Warning: Skipping the data of table mysql.event. Specify the --events option explicitly.

Se trata de una alerta por si tenemos habilitado el event scheduler. Podemos consultarlo mediante:

mysql> show variables like '%event%';
+-----------------+-------+
| Variable_name   | Value |
+-----------------+-------+
| event_scheduler | OFF   |
+-----------------+-------+
1 row in set (0.00 sec)

Si no lo estamos usando podemos ignorar la tabla para quitar el warning mediante:

--events --ignore-table=mysql.event

Encaso contrario, nos interesa que tengamos backup también de estos jobs, porlo que deberemos añadir:

--events

Tags: …

[Lea más]
Forzar el inicio de InnoDB con MySQL +5.1.36

A partir de la versión 5.1.36 de MySQL, la opción –innodb puede usarse con tres valores para controlar si se arranca o no InnoDB y si se arranca, si es un engine obligatorio para el arranque del daemon de MySQL

Las opciones que podemos pasar a la opción innodb son:

  • OFF: Desactivamos InnoDB
  • ON: Activamos InnoDB, pero si falla en el arranque, el daemon puede arrancar (las tablas del resto de storage engines) a no ser que InnoDB sea el storage engine por defecto (opción –default-storage-engine)
  • FORCE: Aunque InnoDB no sea el storage engine por defecto, si falla no permite el arranque de mysqld

Por lo tanto, podemos …

[Lea más]
Configuración de clientes MySQL

Mediante el fichero my.cnf no únicamente podemos configurar el comportamiento del servidor MySQL, sino que también los clientes como el comando mysql o mysqldump

Mediante la sección mysql podemos configurar el cliente del mismo nombre:

[mysql]
socket=/tmp/mysql.sock

De la misma forma que lo podemos hacer para mysqldump:

[mysqldump]
socket=/tmp/mysql.sock

Igual para mysqlhotcopy, pero podemos hacerlo globalmente para todos los clientes locales con la sección client:

[client]
socket=/tmp/mysql.sock

De esta forma podemos configurar los parámetros globales en dicha sección y los específicos de cada herramienta en la propia sin tener que repetir parámetros

Tags: …

[Lea más]
Password root de MySQL en Plesk

En el caso que necesitemos entrar en el MySQL de una maquina con Plesk para evitar tener que usar el interfaz gráfico, primero deberemos localizar el password de root del MySQL

Podemos encontrar el fichero /etc/psa/.psa.shadow que contiene el password de root del MySQL:

# cat /etc/psa/.psa.shadow
$AES-128-CBC$L0T0rD0u0CN0W0KB0T0n0w==$k050f0090g0E0fk0L0d0F0==

A primera vista diremos: ¡Esta cifrado!

Pero no, este es litralemente el password de root del MySQL, el único detalle es que el usuario administrador no se llama root como es habitual, sino que se llama admin. Por lo tanto, para conectarnos al MySQL como root de un Plesk deberemos ejecutar:

# mysql -uadmin -p$(cat /etc/psa/.psa.shadow)
Enter password:
Welcome to the MySQL monitor.  Commands end …
[Lea más]
Las foreign keys implican un índice

En las bases de datos, no nos interesa tener índices duplicados para evitar el coste extra que implica actualizarlos (además del espacio en disco). Por eso, deberemos tener en cuenta que si creamos una foreign key, estamos también creando un índice sobre dicha columna y por lo tanto, no es necesario crear otro índice:

Podemos verlo mediante las siguientes dos tablas, t2 tiene una foreign key sobre el segundo campo:

mysql> create table t1(id int primary key);
Query OK, 0 rows affected (0.08 sec)

mysql> create table t2 (id int primary key, id2 int, constraint k foreign key (id2) references t1(id));
Query OK, 0 rows affected (0.06 sec)

Insertamos unos datos de ejemplo:

mysql> insert into t1 values (1),(2);
Query OK, 2 rows affected (0.02 sec)
Records: 2  Duplicates: 0  Warnings: 0

mysql>  insert into t2 values (1,1),(2,1),(3,1),(4,2);
Query OK, 4 rows affected (0.03 sec)
Records: 4 …
[Lea más]