

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# MySQL データソースに接続する
<a name="using-mysql-in-AMG"></a>

 MySQL データソースを追加して、MySQL 互換データベースからデータをクエリおよび視覚化できるようにします。

**重要**  
Grafana バージョン 8.0 では、MySQL 、Postgres、Microsoft SQL Server データソースのデータフレームの基盤となるデータ構造が変更されます。その結果、時系列のクエリ結果が幅広い形式で返されます。詳細については、Grafana データフレームドキュメントの「[ワイドフォーマット](https://grafana.com/developers/plugin-tools/introduction/data-frames#wide-format)」を参照してください。  
視覚エフェクトを以前と同じように機能させるには、手動による移行が必要になる場合があります。1 つの解決策は、Github の 「[Postgres/MySQL/MSSQL: Breaking change in v8.0 related to time series queries and ordering of data column](https://github.com/grafana/grafana/issues/35534)」に記載されています。

## データソースの追加
<a name="mysql-adding-the-data-source"></a>

1.  上部ヘッダーの Grafana アイコンを選択して、サイドメニューを開きます。

1.  **[ダッシュボード]** リンクのサイドメニューには、**[データソース]** という名前のリンクがあります。

1.  上部ヘッダーの **[\$1 データソースの追加]** ボタンを選択します。

1.  **[タイプ]** ドロップダウンリストから **[MySQL]** を選択します。

### データソースオプション
<a name="mysql-data-source-options"></a>


|  名前  |  説明  | 
| --- | --- | 
|  Name  |  データソース名。これは、パネルとクエリ内へのデータソースの表示のされ方です。 | 
|  Default  |  デフォルトのデータソースは、新しいパネル用に事前に選択されたデータソースです。 | 
|  Host  |  MySQL インスタンスの IP アドレス/ホスト名とオプションのポート。 | 
|  Database  |  MySQL データベースの名前。 | 
|  User  |  データベースユーザーのログイン/ユーザー名。 | 
|  Password  |  データベースユーザーのパスワード。 | 
|  Max open  |  データベースへのオープン接続の最大数。デフォルトは unlimited です (Grafana v5.4 以降)。 | 
|  Max idle  |  アイドル接続プールの最大接続数。デフォルトは 2 です (Grafana v5.4 以降)。 | 
|  Max lifetime  |  接続を再利用できる秒単位の最大時間。デフォルトは 14400/4 時間です。これは常に MySQL (Grafana v5.4 以降) で設定された [[wait\$1timeout]](https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_wait_timeout) よりも小さくする必要があります。 | 

### 最小時間間隔
<a name="mysql-min-time-interval"></a>

 `$_interval` `$_interval_ms` 変数の下限。データを 1 分ごとに書き込む場合は `1m` など、書き込み頻度に設定することをお勧めします。このオプションは、[Data Source] (データソース) オプションのダッシュボードパネルで上書き/設定することもできます。この値は、`1m` (1 分) や `30s` (30 秒) など、有効な時間識別子が続く数値としてフォーマットする**必要があります**。以下の時間識別子がサポートされています。


|  識別子  |  説明  | 
| --- | --- | 
|  y  |  年  | 
|  M  |  月  | 
|  w  |  週  | 
|  d  |  日  | 
|  h  |  時間  | 
|  m  |  分  | 
|  s  |  秒  | 
|  ms  |  ミリ秒  | 

### データベースユーザーのアクセス許可
<a name="database-user-permissions-important"></a>

**重要**  
 データソースを追加するときに指定するデータベースユーザーには、クエリ対象の指定データベースとテーブルに対する SELECT アクセス許可のみを付与する必要があります。Grafana は、クエリが安全であることを検証しません。クエリには任意の SQL ステートメントを含めることができます。例えば、 `USE otherdb;` や`DROP TABLE user;` などのステートメントが実行されます。これを防ぐために、アクセス許可が制限された特定の MySQL ユーザーを作成することを強くお勧めします。

 次のコード例は、アクセス許可が制限された特定の MySQL ユーザーの作成を示しています。

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

 より多くのデータベースやテーブルへのアクセスを許可するには、必要に応じてデータベースやテーブルの代わりにワイルドカード文字 (`*`) を使用できます。

## クエリエディタ
<a name="mysql-query-editor"></a>

 MySQL クエリエディタは、パネルの [編集] モードの [メトリクス] タブにあります。パネルタイトルを選択して [編集] モードに入り、次に **[編集]** を選択します。

 クエリエディタには、パネル編集モードでクエリが実行された後に表示される**[生成 SQL]** リンクがあります。これを選択すると、実行された未加工の補間 SQL 文字列が展開されて表示されます。

### テーブル、時間列、メトリクス列 (FROM) を選択する
<a name="select-table-time-column-and-metric-column-from"></a>

 初めて編集モードに入るか新しいクエリを追加したとき、Grafana はタイムスタンプ列と数値列を持つ最初のテーブルをクエリビルダーに事前入力しようとします。

 FROM フィールドでは、Grafana は設定されたデータベースにあるテーブルを提案します。データベースユーザーがアクセスできる別のデータベースでテーブルまたはビューを選択するには、`otherDb.metrics` などの完全修飾名 (database.table) を手動で入力できます。

 Time 列フィールドは、時間値を保持する列の名前を指します。メトリクス列フィールドの値の選択はオプションです。値を選択すると、メトリクス列フィールドがシリーズ名として使用されます。

 メトリクス列の提案には、テキストデータ型 (テキスト、小テキスト、中テキスト、ロングテキスト、varchar、char) の列のみが含まれます。メトリクス列として異なるデータ型を持つ列を使用する場合は、キャスト `CAST(numericColumn as CHAR)` を使用して列名を入力できます。`CONCAT(column1, " ", CAST(numericColumn as CHAR))` などのテキストデータ型に評価される任意の SQL 式をメトリクス列フィールドに入力することもできます。

### 列と集計関数 (SELECT)
<a name="columns-and-aggregation-functions-select"></a>

 `SELECT` 行では、使用する列と関数を指定できます。列フィールドでは、`column1 * column2 / column3` などの列名の代わりに任意の式を記述できます。

 集計関数を使用する場合は、結果セットをグループ化する必要があります。集計関数を追加すると、エディタは自動的に `GROUP BY time` を追加します。

 さらに値列を追加するには、プラスボタンを選択し、メニューから `Column` を選択します。グラフパネルには、複数の値列が別々のシリーズとしてプロットされます。

### データのフィルタリング (WHERE)
<a name="mysql-filter-data-where"></a>

 フィルターを追加するには、`WHERE` 条件の右側にあるプラスアイコンを選択します。フィルターを削除するには、対象のフィルター、`Remove` を続けて選択します。現在選択されている時間範囲のフィルターが、新しいクエリに自動的に追加されます。

### グループ化の条件
<a name="mysql-group-by"></a>

 時間または他の列でグループ化するには、GROUP BY 行の末尾にあるプラスアイコンを選択します。提案ドロップダウンリストには、現在選択されているテーブルのテキスト列のみが表示されますが、手動で任意の列を入力できます。項目を選択し、`Remove` を選択すると、グループを削除できます。

 グループ化を追加する場合、選択したすべての列に集計関数を適用する必要があります。グループ化を追加すると、クエリビルダーは集計関数なしですべての列に集計関数を自動的に追加します。

#### ギャップ埋め
<a name="mysql-gap-filling"></a>

 Grafana では、時間別にグループ化すると、欠損値を入力できます。時間関数は 2 つの引数を受け入れます。最初の引数はグループ化する時間枠で、2 つ目の引数は Grafana が不足している項目を埋める値です。

### テキストエディタモード (raw)
<a name="mysql-text-editor-mode-raw"></a>

 ハンバーガーアイコン (三) を選択し、**[スイッチエディタモード]**を選択するか、クエリの下にある **[SQL の編集]** を選択して、未加工クエリエディタモードに切り替えることができます。

**注記**  
 未加工クエリエディタを使用する場合は、クエリに少なくとも `ORDER BY time` と、返された時間範囲のフィルターがあることを確認してください。

## マクロ
<a name="mysql-macros"></a>

 構文を簡素化し、日付範囲フィルターなどの動的部分を許可するため、クエリにマクロを含めることができます。


|  マクロの例  |  説明  | 
| --- | --- | 
|  \$1\$1\$1time(dateColumn)  |  UNIX タイムスタンプに変換し、列の名前を time\$1sec に変更する式に置き換えられます。例えば、UNIX\$1TIMESTAMP (dateColumn ) を time\$1sec として指定します。 | 
|  \$1\$1\$1timeEpoch(dateColumn)  |  UNIX タイムスタンプに変換し、列の名前を time\$1sec に変更する式に置き換えられます。例えば、UNIX\$1TIMESTAMP (dateColumn ) を time\$1sec として指定します。 | 
|  \$1\$1\$1timeFilter(dateColumn)  |  指定された列名を使用して時間範囲フィルターに置き換えられます。例えば、dateColumn BETWEEN FROM\$1UNIXTIME(1494410783) AND FROM\$1UNIXTIME(1494410983) などです。 | 
|  \$1\$1\$1timeFrom()  |  現在アクティブな時間選択の開始に置き換えられます。例えば、FROM\$1UNIXTIME(1494410783) などです。 | 
|  \$1\$1\$1timeTo()  |  現在アクティブな時間選択の終了に置き換えられます。例えば、FROM\$1UNIXTIME(1494410983) などです。 | 
|  \$1\$1\$1timeGroup(dateColumn,'5m')  |  GROUP BY 句で使用できる式に置き換えられます。例えば、cast(cast(UNIX\$1TIMESTAMP(dateColumn)/(300) as signed)300 as signed),\$1 などです  | 
|  \$1\$1\$1timeGroup(dateColumn,'5m', 0)  |  前の行と同じですが、fill パラメーターがあるため、その系列の欠落しているポイントは grafana によって追加され、0 が値として使用されます。 | 
|  \$1\$1\$1timeGroup(dateColumn,'5m', NULL)  |  上記と同じですが、NULL は欠落ポイントの値として使用されます。 | 
|  \$1\$1\$1timeGroup(dateColumn,'5m', previous)  |  上記と同じですが、その系列の前の値がフィル値として使用されます。まだ値が見つからない場合は NULL が使用されます (Grafana 5.3 以降でのみ使用可能) 。 | 
|  \$1\$1\$1timeGroupAlias(dateColumn,'5m')  |  \$1\$1\$1timeGroup と同じように置き換えられますが、列エイリアスが追加されます (Grafana 5.3 以降でのみ使用可能）。 | 
| \$1\$1\$1unixEpochFilter(dateColumn) | 指定された列名を使用して、Unix タイムスタンプとして表される時間を使用して、時間範囲フィルターに置き換えられます。例えば、dateColumn > 1494410783 AND dateColumn < 1494497183。 | 
| \$1\$1\$1unixEpochFrom() | 現在アクティブな時間選択の開始が Unix タイムスタンプに置き換えられます。例えば、1494410783。 | 
| \$1\$1\$1unixEpochTo() | 現在アクティブな時間選択の最後が Unix タイムスタンプに置き換えられます。例えば、1494497183。 | 
| \$1\$1\$1unixEpochNanoFilter(dateColumn) | 指定された列名とナノ秒タイムスタンプとして表される時刻を使用して、時間範囲フィルターに置き換えられます。例えば、dateColumn > 1494410783152415214 AND dateColumn < 1494497183142514872。 | 
| \$1\$1\$1unixEpochNanoFrom() | 現在アクティブな時間選択の開始がナノ秒タイムスタンプに置き換えられます。例えば、1494410783152415214。 | 
| \$1\$1\$1unixEpochNanoTo() | 現在アクティブな時間選択の終了がナノ秒タイムスタンプに置き換えられます。例えば、1494497183142514872。 | 
| \$1\$1\$1unixEpochGroup(dateColumn,"5m", [fillmode]) | \$1\$1\$1timeGroup と同様ですが、Unix タイムスタンプとして保存される時刻に置き換えられます (Grafana 5.3 以降でのみ使用可能）。 | 
| \$1\$1\$1unixEpochGroupAlias(dateColumn,"5m", [fillmode])` | 上記と同じですが、列エイリアスも追加されます (Grafana 5.3 以降でのみ使用可能）。 | 

 クエリエディタには、パネル編集モードでクエリが実行された後に表示される **[生成 SQL]** リンクがあります。これを選択すると、実行された未加工の補間 SQL 文字列が展開されて表示されます。

## テーブルクエリ
<a name="mysql-table-queries"></a>

 **[Format as]** クエリオプションが**[テーブル]**に設定されている場合、基本的に任意のタイプの SQL クエリを実行できます。テーブルパネルには、クエリが返す列と行の結果が自動的に表示されます。

 次のコードは、クエリの例を示しています。

```
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)
```

 テーブルパネルの列名は、通常の `as` SQL 列選択構文を使用して制御できます。

## 時系列クエリ
<a name="mysql-time-series-queries"></a>

 例えばグラフパネルで使用するために **[Format as]** を **[時系列]**に設定した場合、クエリは SQL 日時または Unix エポックを表す任意の数値データ型を返す `time` という名前の列を返す必要があります。`time` および `metric` を除くすべての列は、値列として扱われます。値列のメトリクス名として使用される `metric` という名前の列を返すことができます。複数の値列と `metric` という名前の列を返す場合、この列はシリーズ名のプレフィックスとして使用されます (Grafana 5.3 以降でのみ使用可能）。

 時系列クエリの結果セットは、時間別にソートする必要があります。

 次のコード例は、`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
```

 次のコード例は、\$1\$1\$1timeGroup マクロの fill パラメータを使用して NULL 値をゼロに変換する方法を示しています。

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

 次のコード例は、複数の列を示しています。

```
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
```

時間範囲とパネル幅に基づく時間ごとの動的グループはサポートされていません。

## テンプレート作成
<a name="mysql-templating"></a>

 メトリクスクエリでサーバー、アプリケーション、センサー名などのものをハードコーディングする代わりに変数を使用できます。変数は、ダッシュボードの上部にドロップダウン選択ボックスとして表示されます。これらのドロップダウンボックスを使用して、ダッシュボードに表示されるデータを変更できます。

 テンプレート作成とテンプレート変数の詳細については、「[テンプレート](templates-and-variables.md#templates)」を参照してください。

### クエリ変数
<a name="mysql-query-variable"></a>

 タイプ `Query` のテンプレート変数を追加すると、測定名、キー名、ドロップダウン選択ボックスとして表示されるキー値などを返すことができる MySQL クエリを記述できます。

 例えば、テンプレート変数*クエリ*設定でこのようなクエリを指定した場合、テーブル内の `hostname` 列のすべての値を含む変数を指定できます。

```
SELECT hostname FROM my_host
```

 クエリは複数の列を返すことができ、Grafana はそれらの列からリストを自動的に作成します。例えば、次のクエリは、 `hostname` と `hostname2` の値を含むリストを返します。

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

 クエリで `$__timeFilter(column)` などの時間範囲依存マクロを使用するには、テンプレート変数の更新モードを *[時間範囲変更]* に設定する必要があります。

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

 もう 1 つのオプションは、キー/値変数を作成できるクエリです。クエリは、 `__text` と `__value` という名前の 2 つの列を返します。`__text` 列値は一意である必要があります (一意でない場合は、最初の値が使用されます）。ドロップダウンリストのオプションにはテキストと値があるため、わかりやすい名前のテキストとして、ID を値として使用できます。

次のコード例は、 `hostname` をテキストとして、 `id` を値として持つクエリを示しています。

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

 ネストされた変数も作成できます。例えば、`region` という名前の別の変数がある場合です。次に、ホスト変数に、このようなクエリを含む、現在選択されているリージョンからのホストのみを表示させることができます (`region` が複数値変数の場合は、`=` を使用して複数の値と照合するのではなく、`IN` 比較演算子を使用します）。

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

#### `__searchFilter` を使用してクエリ変数で結果をフィルタリングする
<a name="using-__searchfilter-to-filter-results-in-query-variable"></a>

 クエリフィールドで `__searchFilter` を使用すると、ドロップダウン選択ボックスのユーザータイプに基づいてクエリ結果がフィルタリングされます。ユーザーによって何も入力されていない場合、`__searchFilter` のデフォルト値は `%` です。

**注記**  
 Grafana はこれを行わないため、`__searchFilter` 式を引用符で囲むことが重要です。

 次の例は、`__searchFilter` をクエリフィールドの一部として使用してユーザーがドロップダウン選択ボックスに入力するときに `hostname` を検索できるようにします。

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

### クエリでの変数の使用
<a name="using-variables-in-queries-2"></a>

 Grafana 4.3.0 から 4.6.0 まで、テンプレート変数は常に自動的に引用符で囲まれるため、文字列値の場合は、その変数を引用符で囲まないでください。

 Grafana 4.7.0 以降、テンプレート変数の値は、テンプレート変数が `multi-value` の場合にのみ引用符で囲まれます。

 変数が複数値の変数の場合は、`=` を使用して複数の値と照合するのではなく、`IN` 比較演算子を使用します。

 2 つの構文があります。

 `$<varname>` `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
```

 `[[varname]]` `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
```

#### 複数値変数の引用をオフにする
<a name="disabling-quoting-for-multi-value-variables"></a>

 Grafana は、複数値変数の引用符で区切られたカンマ区切り文字列を自動的に作成します。例えば、`server01` と `server02` を選択した場合、`'server01', 'server02'` の形式になります。引用を無効にするには、変数に csv フォーマットオプションを使用します。

 `${servers:csv}` 

 変数形式オプションの詳細については、「[高度な変数フォーマットオプション](templates-and-variables.md#advanced-variable-format-options)」を参照してください。

## ‏注釈
<a name="mysql-annotations"></a>

 注釈を使用して、グラフの上にリッチイベント情報をオーバーレイできます。ダッシュボードメニュー/注釈ビューを使用して注釈クエリを追加します。詳細については、「」を参照してください。

 次のコード例は、エポック値を持つ時間列を使用したクエリを示しています。

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

次のコード例は、エポック値を持つ時間列と timeend 列を使用するリージョンクエリを示しています。

**注記**  
 Grafana v6.6 以降でのみ使用できます。

```
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)
```

 次のコード例は、ネイティブ SQL 日付/時刻データ型の時刻列を使用したクエリを示しています。

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


|  名前  |  説明  | 
| --- | --- | 
|  time  |  日付/時刻フィールドの名前。ネイティブ SQL 日付/時刻データ型またはエポック値を持つ列にすることができます。 | 
|  timeend  |  終了日時フィールドのオプション名。ネイティブ SQL 日付/時刻データ型またはエポック値を持つ列にすることができます。 | 
|  text  |  イベントの説明フィールド。 | 
|  tags  |  カンマ区切り文字列としてイベントタグに使用するオプションのフィールド名。 | 

## [アラート]
<a name="mysql-alerting"></a>

 時系列クエリは、アラート条件で機能します。テーブル形式のクエリは、アラートルール条件ではまだサポートされていません。