Displaying posts with tag: MySQL (reset)
Posición de MySQL con mylvmbackup

Mediante snapshots LVM y mylvmbackup podemos realizar backups en caliente, pero en el caso que necesitemos mantener el snapshot sin realizar ninguna copia y a la vez conocer la posición del master para montar un slave de MySQL, deberemos parchear el script mylvmbackup.

En el caso que necesitemos crear un snapshot pero sin realizar ningún backup, en la sección misc del fichero de configuración deberemos definir las opciones backuptype y keep_snapshot:

(...)
[misc]
backuptype=none
(...)
keep_snapshot=1
(...)

El problema es que al realizar el backup de tipo none, …

[Lea más]
Corrección de bugs (falta de) en MySQL

Mediante el comando LOAD DATA podemos cargar datos desde un fichero a una tabla MySQL, y según la própia documentación de MySQL:

The LOAD DATA INFILE statement reads rows from a text file 
into a table at a very high speed.

El problema es que se nos quede la importación encallada sin razón aparente:

| 1 | datos | 1.1.1.1:26014 | lol | Killed | 9564 | NULL | LOAD DATA  LOCAL INFILE '/home/jordi/cosa1.data' REPLACE INTO TABLE tbl1
| 2 | datos | 1.1.1.1:22813 | lol | Killed | 3372 | NULL | LOAD DATA  LOCAL INFILE '/home/jordi/cosa2.data' REPLACE INTO TABLE tbl2

Si buscamos en el listado de bugs, podemos enconcrar el Bug #51840, con el título “infinite hang with 100% cpu usage with load data local and import …

[Lea más]
Tablas corruptas y comentarios en tablas

En MySQL, podemos ver el estado de las tablas mediante el comando SHOW TABLE STATUS y en general, de un vistazo podemos ver las que están corruptas por si existe un campo con datos o no (la última columna llamada Comment):

Ejemplo SHOW TABLE STATUS

El problema surge cuando este es compartido con la opción COMMENT de la creación de tablas:

mysql> create table g(x int) engine=innodb comment="soy un comentario";
Query OK, 0 rows affected (0.77 sec)

Por lo que en el SHOW TABLE STATUS veremos los dos campos indistintamente llenos:

mysql> show table status; …
[Lea más]
Curioso bug haciendo un SELECT en information_schema.tables

Haciendo unas pruebas con la tabla information_schema.tables y el campo table_comment me fijé que haciendo este SELECT no se indicaba que la tabla estaba corrupta:

mysql> select table_schema,table_name,table_comment,TABLE_COMMENT from information_schema.tables where table_name="a";
+--------------+------------+---------------+---------------+
| table_schema | table_name | table_comment | TABLE_COMMENT |
+--------------+------------+---------------+---------------+
| systemadmin  | a          |               |               |
+--------------+------------+---------------+---------------+
1 row in set (0.00 sec)

Añadí tanto con mayúsculas como minúsculas para ver si era ese el problema.

La única forma que encontré para ver el mensaje de tabla corrupta fue cambiar el formato de la salida a una colunma por línea con el terminador …

[Lea más]
Información de la versión de MySQL

En MySQL tenemos cuatro variables para identificar la versión y arquitectura de un servidor MySQL. Vamos a ver cuales son:

Las variables las podemos ver todas juntas con SHOW VARIABLES:

mysql> show variables like 'ver%';
+-------------------------+---------------------+
| Variable_name           | Value               |
+-------------------------+---------------------+
| version                 | 5.5.22-log          |
| version_comment         | Source distribution |
| version_compile_machine | x86_64              |
| version_compile_os      | Linux               |
+-------------------------+---------------------+
4 rows in set (0.00 sec)

Su significado es:

  • version: Versión del servidor con indicación de características. Si acaba con:
    • -log: Esta compilado con soporte a algún log …
[Lea más]
MySQL 5.6 Release Candidate

Este fin de semana, Oracle ha anunciado MySQL 5.6 Release Candidate

Podemos encontrar más información en un articulo que se ha publicado en la web de MySQL con las nuevas características de MySQL 5.6. En resumen, destacan las mejoras en el funcionamiento de master-slave:

  • GTID (Global Transactions Identifiers): Identificador único por transacción que permite si seguimiento en una topologia compleja de master-slaves
  • Nuevas herramientas para alta disponibilidad (de serie)
  • Slaves multi-threads: Hasta ahora, los slaves aplicaban los cambios uno a uno (en serie), por lo que podía causar retrasos en la replicación. Ahora es …
[Lea más]
Query log de MySQL (general log)

En MySQL podemos habilitar un log de queries ejecutadas en el servidor llamado “general log“. Aunque no es muy recomendable tenerlo habilitado normalmente, puede resultar útil en momentos puntuales. Vamos a ver su funcionamiento:

Las variables que controlan el general log son las siguientes:

  • general_log: Indicamos si queremos habilitar o no dicho log
  • general_log_file: Indicamos el path del fichero dónde queremos el log

Mediante SHOW VARIABLES podemos verlos:

mysql> show variables like 'general_log%';
+------------------+--------------------------+
| Variable_name    | Value                    |
+------------------+--------------------------+
| general_log      | OFF                      | 
| general_log_file | /var/log/mysql/query.log | …
[Lea más]
Deshabilitar el binary log para una sesión con MySQL

Cuando habilitamos un slave en read_only esto no quita que un usuario con privilegio SUPER pueda realizar modificaciones, por lo que puede ocurrir algún desastre que tengamos que recuperar manualmente mediante comandos SQL tanto en el master como en el slave.

Si nos interesa ejecutar algún conjunto de comandos en el master que no queremos que se ejecuten en el slave, podemos deshabilitar únicamente para la sesión actual los binary logs, sin afectar al resto de conexiones, mediante la variable sql_log_bin:

mysql> set sql_log_bin = 0;
Query OK, 0 rows affected (0.00 sec)

A partir de este comando cualquier sentencia que ejecutemos no quedará registrada en el binary log, y por lo tanto el slave no la verá …

[Lea más]
Realizar optimize de las tablas en función de los datos libres

Las tablas de MySQL debemos hacerles mantenimiento periódicamente ya que cuando eliminamos un dato, el espacio se queda marcado como libre pero no se libera. Mediante el comando OPTIMIZE podemos liberar dicho espacio recreando la tabla sin dicho espacio.

Tanto mediante SHOW TABLE STATUS:

mysql> show table status\G
(...)
*************************** 13. row ***************************
           Name: ejemplo_systemadmin.es
         Engine: MyISAM
        Version: 10
     Row_format: Fixed
           Rows: 467
 Avg_row_length: 25
    Data_length: 11675
Max_data_length: 7036874417766399
   Index_length: 62464
      Data_free: 54300
 Auto_increment: NULL
    Create_time: 2011-11-04 12:43:11
    Update_time: 2012-09-01 08:10:05
     Check_time: 2012-08-05 06:30:11
      Collation: latin1_swedish_ci …
[Lea más]
Deshabilitar tabla ASCII en la salida de MySQL

Al ejecutar comandos SQL en MySQL veremos que nos devuelve el resultado con una bonita tabla ASCII tanto en el modo interactivo:

mysql> select 1,2;
+---+---+
| 1 | 2 |
+---+---+
| 1 | 2 |
+---+---+
1 row in set (0.00 sec)

mysql> 

Como usando la opción -e para pasar el comando a ejecutar:

$ mysql -e "select count(1)"
+----------+
| count(1) |
+----------+
|        1 | 
+----------+

Vamos a ver las opciones que tenemos para poder modificar el tipo de salida por pantalla.

En el caso que no queramos que nos muestre el nombre de la columna por pantalla, tenemos la opción -N:

  -N, --skip-column-names 
                      Don't write column names in results.

Por lo que obtendríamos, por linea de comandos con la opción -e:

$ mysql -e …
[Lea más]