

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# Conexión a un origen de datos de MySQL
<a name="using-mysql-in-AMG"></a>

 Agregue el origen de datos de MySQL para poder consultar y visualizar los datos de una base de datos compatible con MySQL. 

**importante**  
La versión 8.0 de Grafana cambia la estructura de datos subyacente de marcos de datos de los orígenes de datos de MySQL, Postgres y Microsoft SQL Server. Como consecuencia, el resultado de una consulta de serie temporal se devuelve en un formato ancho. Para más información, consulte [Wide format](https://grafana.com/developers/plugin-tools/introduction/data-frames#wide-format) en la documentación de los marcos de datos de Grafana.  
Para que las visualizaciones funcionen como antes, es posible que tenga que hacer algunas migraciones manuales. Una solución está documentada en Github en [Postgres/MySQL/MSSQL: Un cambio radical en la versión 8.0 relacionado con las consultas de series temporales y el orden de las columnas de datos](https://github.com/grafana/grafana/issues/35534).

## Adición del origen de datos
<a name="mysql-adding-the-data-source"></a>

1.  Elija el icono de Grafana en el encabezado superior para abrir el menú lateral. 

1.  En el menú lateral, en el enlace de **Paneles**, encontrará un enlace llamado **Orígenes de datos**. 

1.  Elija el botón **\$1 Agregar origen de datos** en el encabezado superior. 

1.  Seleccione **MySQL** en la lista desplegable **Tipo**. 

### Opciones de origen de datos
<a name="mysql-data-source-options"></a>


|  Name  |  Description (Descripción)  | 
| --- | --- | 
|  Name  |  El nombre del origen de datos. Así es como se ve el origen de datos en los paneles y las consultas.  | 
|  Default  |  El origen de datos predeterminado significa que se preseleccionará para los nuevos paneles.  | 
|  Host  |  La IP address/hostname y el puerto opcional de la instancia de MySQL.  | 
|  Database  |  Nombre de la base de datos MySQL.  | 
|  User  |  Nombre de usuario o inicio de sesión de la base de datos.  | 
|  Password  |  Contraseña del usuario de la base de datos.  | 
|  Max open  |  El número máximo de conexiones abiertas a la base de datos. El valor predeterminado es unlimited (Grafana v5.4 o posteriores).  | 
|  Max idle  |  El número máximo de conexiones en el grupo de conexiones inactivas. El valor predeterminado es 2 (Grafana v5.4 o posteriores).  | 
|  Max lifetime  |  La cantidad máxima de tiempo en segundos que se puede reutilizar. El valor predeterminado es 14400/4 horas. Siempre debe ser inferior al valor de [wait\$1timeout](https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_wait_timeout) configurado en MySQL (Grafana v5.4\$1).  | 

### Intervalo de tiempo mínimo
<a name="mysql-min-time-interval"></a>

 Un límite inferior para las variables `$_interval` `$_interval_ms`. Se recomienda que se establezca según la frecuencia de escritura, por ejemplo, `1m` si los datos se escriben cada minuto. Esta opción también puede estar overridden/configured en un panel de control, en las opciones de fuentes de datos. Este valor **debe** tener el formato de un número seguido de un identificador de tiempo válido, por ejemplo, `1m` (1 minuto) o `30s` (30 segundos). Se admiten los siguientes identificadores de tiempo. 


|  Identificador  |  Description (Descripción)  | 
| --- | --- | 
|  y  |  Año  | 
|  M  |  Mes  | 
|  w  |  Semana  | 
|  d  |  Día  | 
|  h  |  Hora  | 
|  m  |  Minuto  | 
|  s  |  Segundo  | 
|  ms  |  Milisegundos  | 

### Permisos de usuario de base de datos
<a name="database-user-permissions-important"></a>

**importante**  
 Al usuario de la base de datos que especifique al agregar el origen de datos se le deben conceder solo los permisos SELECT en la base de datos y las tablas especificadas que se quiere consultar. Grafana no valida que la consulta sea segura. La consulta puede incluir cualquier instrucción SQL. Por ejemplo, se ejecutarán instrucciones como `USE otherdb;` y `DROP TABLE user;`. Para evitar esto, le recomendamos crear un usuario de MySQL específico con permisos restringidos.

 El siguiente ejemplo de código muestra la creación de un usuario de MySQL específico con permisos restringidos.

```
 CREATE USER 'grafanaReader' IDENTIFIED BY 'password';
 GRANT SELECT ON mydatabase.mytable TO 'grafanaReader';
```

 Para conceder acceso a más bases de datos y tablas, si lo desea, puede utilizar caracteres comodín (`*`) en lugar de bases de datos o tablas. 

## Editor de consultas
<a name="mysql-query-editor"></a>

 Encontrará el editor de consultas MySQL en la pestaña de métricas del modo de edición de un panel. Para entrar en el modo de edición, elija el título del panel y, a continuación, **Editar**. 

 El editor de consultas tiene un vínculo **SQL generativo** que aparece una vez ejecutada la consulta, en el modo de edición de panel. Si lo elige, se ampliará y mostrará la cadena SQL interpolada sin procesar que se ejecutó. 

### Selección de la tabla, la columna de tiempo y la columna de métricas (FROM)
<a name="select-table-time-column-and-metric-column-from"></a>

 Cuando entre en el modo de edición por primera vez o agregue una nueva consulta, Grafana intentará rellenar previamente el generador de consultas con la primera tabla que tenga una columna de marca de tiempo y una columna numérica. 

 En el campo FROM, Grafana sugerirá tablas que se encuentran en la base de datos configurada. Para seleccionar una tabla o vista de otra base de datos a la que tenga acceso el usuario de la base de datos, puede ingresar manualmente un nombre completo (tabla.basededatos), como `otherDb.metrics`. 

 El campo de la columna Tiempo hace referencia al nombre de la columna que contiene los valores de tiempo. La selección de un valor para el campo de la columna Métrica es opcional. Si se selecciona un valor, el campo de la columna Métrica se utilizará como nombre de la serie. 

 Las sugerencias de las columnas de métricas solo contendrán columnas con un tipo de datos de texto (text, tinytext, mediumtext, longtext, varchar, char). Si quiere utilizar una columna con un tipo de datos diferente como columna de métricas, puede ingresar el nombre de la columna con una combinación `CAST(numericColumn as CHAR)`. También puede ingresar expresiones SQL arbitrarias en el campo de la columna de métricas que den como resultado un tipo de datos de texto, como `CONCAT(column1, " ", CAST(numericColumn as CHAR))`.

### Columnas y funciones de agregación (SELECT)
<a name="columns-and-aggregation-functions-select"></a>

 En la fila `SELECT`, puede especificar qué columnas y funciones quiere utilizar. En el campo de columna, puede escribir expresiones arbitrarias en lugar de un nombre de columna, como `column1 * column2 / column3`. 

 Si utiliza funciones de agregación, debe agrupar el conjunto de resultados. El editor agregará automáticamente una operación `GROUP BY time` si agrega una función de agregación. 

 Para poder agregar más columnas de valores, elija el botón más y seleccione `Column` en el menú. Las columnas de valores múltiples se representarán como series independientes en el panel de gráficos. 

### Filtrado de datos (WHERE)
<a name="mysql-filter-data-where"></a>

 Para agregar un filtro, elija el icono del signo más que se sitúa a la derecha de la condición `WHERE`. Para poder eliminar los filtros, elija el filtro y seleccione `Remove`. Se agrega automáticamente un filtro para el intervalo de tiempo seleccionado actualmente a las consultas nuevas.

### Agrupación por
<a name="mysql-group-by"></a>

 Para agrupar por tiempo o cualquier otra columna, elija el icono con el signo más situado al final de la fila AGRUPAR POR. La lista desplegable de sugerencias solo mostrará las columnas de texto de la tabla actualmente seleccionada, pero puede ingresar manualmente cualquier columna. Para poder eliminar el grupo, seleccione el elemento y, luego, seleccione `Remove`. 

 Si agrega alguna agrupación, todas las columnas seleccionadas deben tener aplicada una función de agregación. El generador de consultas agregará automáticamente funciones de agregación a todas las columnas sin funciones de agregación cuando agregue agrupaciones. 

#### Relleno de discontinuidades
<a name="mysql-gap-filling"></a>

 Grafana puede rellenar los valores faltantes cuando agrupa por tiempo. La función de tiempo acepta dos argumentos. El primer argumento es el plazo de tiempo por el que quiere agrupar y el segundo argumento es el valor con el que quiere que Grafana rellene los elementos que faltan. 

### Modo Editor de texto (sin procesar)
<a name="mysql-text-editor-mode-raw"></a>

 Para poder cambiar al modo editor de consultas sin procesar, seleccione el icono de la hamburguesa y seleccione **Cambiar modo de editor** o seleccione **Editar SQL** debajo de la consulta. 

**nota**  
 Si utiliza el editor de consultas sin procesar, asegúrese de que la consulta tenga `ORDER BY time`, como mínimo, y un filtro en función del intervalo de tiempo devuelto. 

## Macros
<a name="mysql-macros"></a>

 Para simplificar la sintaxis y permitir partes dinámicas, como los filtros de intervalo de fechas, la consulta puede contener macros. 


|  Ejemplo de macros  |  Description (Descripción)  | 
| --- | --- | 
|  \$1\$1\$1time(dateColumn)  |  Se sustituirá por una expresión para convertirla en una marca de tiempo de UNIX y cambiar el nombre de la columna a time\$1sec, por ejemplo, UNIX\$1TIMESTAMP(dateColumn) as time\$1sec. | 
|  \$1\$1\$1timeEpoch(dateColumn)  |  Se sustituirá por una expresión para convertirla en una marca de tiempo de UNIX y cambiar el nombre de la columna a time\$1sec, por ejemplo, UNIX\$1TIMESTAMP(dateColumn) as time\$1sec.  | 
|  \$1\$1\$1timeFilter(dateColumn)  |  Se sustituirá por un filtro de intervalo de tiempo con el nombre de columna especificado. Por ejemplo, dateColumn BETWEEN FROM\$1UNIXTIME(1494410783) AND FROM\$1UNIXTIME(1494410983). | 
|  \$1\$1\$1timeFrom()  |  Se sustituirá por el inicio de la selección de tiempo actualmente activa. Por ejemplo, FROM\$1UNIXTIME(1494410783).  | 
|  \$1\$1\$1timeTo()  |  Se sustituirá por el fin de la selección de tiempo actualmente activa. Por ejemplo, FROM\$1UNIXTIME(1494410983).  | 
|  \$1\$1\$1timeGroup(dateColumn,'5m')  |  Se sustituirá por una expresión utilizable en la cláusula AGRUPAR POR. Por ejemplo, cast(cast(UNIX\$1TIMESTAMP(dateColumn)/(300) as signed)300 as signed),\$1  | 
|  \$1\$1\$1timeGroup(dateColumn,'5m', 0)  |  Igual que la fila anterior, pero con un parámetro de relleno, por lo que Grafana agregará los puntos que falten en esa serie y usará el valor 0.  | 
|  \$1\$1\$1timeGroup(dateColumn,'5m', NULL)  |  Igual que el anterior, pero se usará NULO como valor para los puntos faltantes.  | 
|  \$1\$1\$1timeGroup(dateColumn,'5m', previous)  |  Igual que el anterior, pero el valor anterior de esa serie se utilizará como valor de relleno si no se ha visto ningún valor, pero se utilizará NULL (solo disponible en Grafana 5.3\$1).  | 
|  \$1\$1\$1timeGroupAlias(dateColumn,'5m')  |  Se sustituirá de forma idéntica a \$1\$1\$1timeGroup, pero con un alias de columna agregado (disponible solo en Grafana 5.3 o posteriores).  | 
| \$1\$1\$1unixEpochFilter(dateColumn) | Se sustituirá por un filtro de intervalo de tiempo con el nombre de columna especificado con las horas representadas como marca de tiempo de Unix. Por ejemplo, dateColumn > 1494410783 AND dateColumn < 1494497183. | 
| \$1\$1\$1unixEpochFrom() | Se sustituirá por el inicio de la selección de tiempo actualmente activa como una marca de tiempo de Unix. Por ejemplo, 1494410783. | 
| \$1\$1\$1unixEpochTo() | Se sustituirá por el final de la selección de tiempo actualmente activa como una marca de tiempo de Unix. Por ejemplo, 1494497183. | 
| \$1\$1\$1unixEpochNanoFilter(dateColumn) | Se sustituirá por un filtro de intervalo de tiempo con el nombre de columna especificado con las horas representadas como marca de tiempo de nanosegundos. Por ejemplo, dateColumn > 1494410783152415214 AND dateColumn < 1494497183142514872. | 
| \$1\$1\$1unixEpochNanoFrom() | Se sustituirá por el inicio de la selección de tiempo actualmente activa como una marca de tiempo de nanosegundos. Por ejemplo, 1494410783152415214. | 
| \$1\$1\$1unixEpochNanoTo() | Se sustituirá por el fin de la selección de tiempo actualmente activa como una marca de tiempo de nanosegundos. Por ejemplo, 1494497183142514872. | 
| \$1\$1\$1unixEpochGroup(dateColumn,"5m", [fillmode]) | Igual que \$1\$1\$1timeGroup, pero para las horas almacenadas como marca de tiempo de Unix (disponible solo en Grafana 5.3 o posteriores). | 
| \$1\$1\$1unixEpochGroupAlias(dateColumn,"5m", [fillmode])` | Igual que el anterior, pero también agrega un alias de columna (disponible solo en Grafana 5.3 o posteriores). | 

 El editor de consultas tiene un enlace **SQL generativo** que aparece una vez ejecutada la consulta, en el modo de edición de panel. Si lo elige, se ampliará y mostrará la cadena SQL interpolada sin procesar que se ejecutó. 

## Consultas de tablas
<a name="mysql-table-queries"></a>

 Si la opción de consulta **Formatear como** está establecida en **Tabla**, básicamente puede hacer cualquier tipo de consulta SQL. El panel de tablas mostrará automáticamente los resultados de las columnas y filas que devuelva la consulta. 

 En el siguiente código se muestra una consulta de ejemplo. 

```
SELECT
  title as 'Title',
  user.login as 'Created By' ,
  dashboard.created as 'Created On'
 FROM dashboard
INNER JOIN user on user.id = dashboard.created_by
WHERE $__timeFilter(dashboard.created)
```

 Puede controlar el nombre de las columnas del panel Tabla mediante la sintaxis de selección de columnas de SQL `as` normal. 

## Consultas de series temporales
<a name="mysql-time-series-queries"></a>

 Si establece **Formatear como** en **Serie temporal**, para su uso en un panel de gráficos, por ejemplo, la consulta debe devolver una columna con el nombre `time` que devuelva una fecha y hora de SQL o cualquier tipo de datos numéricos que representen una época de Unix. Cualquier columna excepto `time` y `metric` se trata como una columna de valores. Puede devolver una columna con el nombre `metric` que se utilice como nombre de métrica para la columna de valores. Si devuelve columnas de valores múltiples y una columna denominada `metric`, esta columna se utiliza como prefijo para el nombre de la serie (disponible solo en Grafana 5.3 o posteriores).

 Los conjuntos de resultados de las consultas de serie temporal se deben ordenar por tiempo. 

 En el siguiente ejemplo de código se muestra la columna `metric`. 

```
SELECT
  $__timeGroup(time_date_time,'5m'),
  min(value_double),
  'min' as metric
FROM test_data
WHERE $__timeFilter(time_date_time)
GROUP BY time
ORDER BY time
```

 El siguiente código de ejemplo muestra el uso del parámetro de rellenado en la macro \$1\$1\$1timeGroup para convertir los valores nulos en cero. 

```
SELECT
  $__timeGroup(createdAt,'5m',0),
  sum(value_double) as value,
  measurement
FROM test_data
WHERE
  $__timeFilter(createdAt)
GROUP BY time, measurement
ORDER BY time
```

 El siguiente ejemplo de código muestra varias columnas. 

```
SELECT
  $__timeGroup(time_date_time,'5m'),
  min(value_double) as min_value,
  max(value_double) as max_value
FROM test_data
WHERE $__timeFilter(time_date_time)
GROUP BY time
ORDER BY time
```

No se admite un grupo dinámico por tiempo según el intervalo de tiempo y el ancho del panel.

## Plantillas
<a name="mysql-templating"></a>

 En lugar de codificar elementos como el nombre del servidor, la aplicación y el sensor en las consultas de métricas, puede utilizar variables en su lugar. Las variables se muestran como cuadros de selección desplegables en la parte superior del panel de control. Puede usar estos cuadros desplegables para cambiar los datos que se muestran en su panel de control. 

 Para obtener más información acerca de las plantillas y sus variables, consulte [Plantillas](templates-and-variables.md#templates). 

### Variable de consulta
<a name="mysql-query-variable"></a>

 Si agrega una variable de plantilla del tipo `Query`, puede escribir una consulta de MySQL que devuelva elementos como nombres de mediciones, nombres de clave o valores de clave que se muestran en un cuadro de selección desplegable. 

 Por ejemplo, puede tener una variable que contenga todos los valores de la columna `hostname` en una tabla si especifica una consulta como esta en la configuración de *consulta* de la variable de plantilla. 

```
SELECT hostname FROM my_host
```

 Una consulta puede devolver varias columnas y Grafana creará automáticamente una lista a partir de ellas. Por ejemplo, la siguiente consulta devolverá una lista con los valores de `hostname` y `hostname2`. 

```
SELECT my_host.hostname, my_other_host.hostname2 FROM my_host JOIN my_other_host ON my_host.city = my_other_host.city
```

 Para utilizar macros que dependen del intervalo de tiempo, como `$__timeFilter(column)`, en su consulta, el modo de actualización de la variable de plantilla debe estar establecido en *Al cambiar el intervalo de tiempo*. 

```
SELECT event_name FROM event_log WHERE $__timeFilter(time_column)
```

 Otra opción es una consulta que puede crear una key/value variable. La consulta debe devolver dos columnas denominadas `__text` y `__value`. El valor de la columna `__text` debe ser único (si no lo es, se utilizará el primer valor). Las opciones de la lista desplegable tendrán un texto y un valor para que pueda asignar un nombre descriptivo como texto y un ID como valor.

El siguiente ejemplo de código muestra una consulta con `hostname` como texto y `id` como valor. 

```
SELECT hostname AS __text, id AS __value FROM my_host
```

 También puede crear variables anidadas. Por ejemplo, si tuviera otra variable llamada `region`. Podría hacer que la variable de hosts muestre solo los hosts de la región actualmente seleccionada con una consulta como esta (si `region` es una variable de varios valores, utilice el operador de comparación `IN` en lugar de `=` para que coincida con varios valores). 

```
SELECT hostname FROM my_host  WHERE region IN($region)
```

#### Uso de `__searchFilter` para filtrar los resultados de la variable de consulta
<a name="using-__searchfilter-to-filter-results-in-query-variable"></a>

 Si se utiliza `__searchFilter` en el campo de consulta, se filtrará el resultado de la consulta en función de lo que escriba el usuario en el cuadro de selección desplegable. Si el usuario no ha ingresado nada, el valor predeterminado de `__searchFilter` es `%`. 

**nota**  
 Es importante que encierre la expresión `__searchFilter` entre comillas, ya que Grafana no lo hará. 

 El siguiente ejemplo muestra cómo utilizar `__searchFilter` como parte del campo de consulta para permitir la búsqueda de `hostname` mientras el usuario escribe en el cuadro de selección desplegable. 

```
SELECT hostname FROM my_host  WHERE hostname LIKE '$__searchFilter'
```

### Uso de variables en consultas
<a name="using-variables-in-queries-2"></a>

 Desde Grafana 4.3.0 hasta 4.6.0, las variables de plantilla siempre se encierran entre comillas de manera automática, por lo que, si se trata de un valor de cadena, no las ponga entre comillas en las cláusulas where. 

 A partir de Grafana 4.7.0, los valores de las variables de plantilla solo se encierran entre comillas cuando la variable de plantilla es `multi-value`. 

 Si se trata de una variable de varios valores, utilice el operador de comparación `IN` en lugar de `=` para que coincida con varios valores. 

 Existen dos sintaxis: 

 Ejemplo de `$<varname>` con una variable de plantilla llamada `hostname`: 

```
SELECT
  UNIX_TIMESTAMP(atimestamp) as time,
  aint as value,
  avarchar as metric
FROM my_table
WHERE $__timeFilter(atimestamp) and hostname in($hostname)
ORDER BY atimestamp ASC
```

 Ejemplo de `[[varname]]` con una variable de plantilla llamada `hostname`: 

```
SELECT
  UNIX_TIMESTAMP(atimestamp) as time,
  aint as value,
  avarchar as metric
FROM my_table
WHERE $__timeFilter(atimestamp) and hostname in([[hostname]])
ORDER BY atimestamp ASC
```

#### Desactivación de las comillas para variables de varios valores
<a name="disabling-quoting-for-multi-value-variables"></a>

 Grafana crea automáticamente una cadena entrecomillada y separada por comas para variables de varios valores. Por ejemplo, si `server01` y `server02` se seleccionan, se formateará como `'server01', 'server02'`. Para desactivar las comillas, use la opción de formato CSV para las variables. 

 `${servers:csv}` 

 Para obtener más información sobre las opciones de formato de variables, consulte [Opciones avanzadas de formato de variables](templates-and-variables.md#advanced-variable-format-options). 

## Anotaciones
<a name="mysql-annotations"></a>

 Puede utilizar las anotaciones para superponer información detallada de los eventos sobre los gráficos. Las consultas de anotación se agregan a través del menú Panel o la vista Anotaciones. Para obtener más información, consulte . 

 En el siguiente código de ejemplo, se muestra una consulta que utiliza una columna de tiempo con valores de época. 

```
SELECT
  epoch_time as time,
  metric1 as text,
  CONCAT(tag1, ',', tag2) as tags
FROM
  public.test_data
WHERE
  $__unixEpochFilter(epoch_time)
```

En el siguiente código de ejemplo, se muestra una consulta de región que utiliza columnas de tiempo y tiempo de fin con valores de época. 

**nota**  
 Disponible solo en Grafana v6.6 y posteriores. 

```
SELECT
  epoch_time as time,
  epoch_timeend as timeend,
  metric1 as text,
  CONCAT(tag1, ',', tag2) as tags
FROM
  public.test_data
WHERE
  $__unixEpochFilter(epoch_time)
```

 El siguiente código de ejemplo muestra una consulta que utiliza una columna de tiempo del tipo de date/time datos SQL nativo. 

```
SELECT
  native_date_time as time,
  metric1 as text,
  CONCAT(tag1, ',', tag2) as tags
FROM
  public.test_data
WHERE
  $__timeFilter(native_date_time)
```


|  Name  |  Description (Descripción)  | 
| --- | --- | 
|  time  |  El nombre del date/time campo. Puede ser una columna con un tipo de date/time datos SQL nativo o un valor de época.  | 
|  timeend  |  Nombre opcional del date/time campo final. Podría ser una columna con un tipo de date/time datos SQL nativo o un valor de época.  | 
|  text  |  Campo de descripción del evento.  | 
|  tags  |  Nombre de campo opcional para utilizar en las etiquetas de eventos como una cadena separada por comas.  | 

## Alertas
<a name="mysql-alerting"></a>

 Las consultas de serie temporal deben funcionar en condiciones de alertas. Las consultas con formato de tabla aún no se admiten en las condiciones de las reglas de alerta. 