10
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

[Grafana 7.x] データベースを Sqlite3 から MySQL へ移行 (マイグレーション) する

Posted at

わたしは、後先なにも考えずに Grafana をインストールしたことで、一つ後悔をしていることがあります。

もし、軽い気持ちで Grafana を入れて試してみようと初期設定で済ませることを推奨しません。最低限、データベースだけはなににするか決めておいた方が良いです。なににするかと言っても選択肢は少ないです。MySQLPostgreSQLかです。

Sqlite3 ではいけないの?

ダメとは言いません。ホントに軽い気持ちでちょっと使おうという一時的なケースだけにした方が良いです。

Grafana を本格運用し出すと、ダッシュボードを平気で 5s や 10s で更新するような大人になります。まちがいなく、なります。すると、残念なできごとが起きることでしょう。やたらめったらログアウトしやすくなります。それを回避するとなると、MySQLPostgreSQLへ移行しなければなりません。移行は面倒で厄介です。

しかし、みなさま、安心してください。今回、Grafana 7.x で sqlite3からMySQLへ移行する手順を紹介します。

もし、sqlite3 で運用していて「やたらとログアウトするようになったなー」と感じた方、これから述べる方法でMySQLへ移行してください。明るい未来が待っています。

Grafana 7.x における sqlite3 → MySQL への移行

一部、順番に気をつけないといけないとこありますが、データの欠損などは起こらない方法なので、安心して進めてください。次の 7手順になります。

  1. MySQL をインストールして設定する
  2. Grafana 用、database-migrator を準備する
  3. grafana.db から MySQL 用 sql を抽出する
  4. grafana.ini の設定を変更する
  5. MySQL の各種テーブルを作成する
  6. MySQL へデータを放り込む

1. MySQL をインストールして設定する

Ubuntu で MySQL をインストール紹介している方法で全然十分と考えます。たとえば、個人的にインストールの流れとしてわたしと似ているのは MySQL 8.0 : Install の手順です。

セキュリティレベルやパスワードなどは、運用する状況下においてイロイロと変わるでしょうから、各自の判断にお任せします。とはいえ sudo mysql_secure_installation あたりは実行しておくことが嗜みです。

忘れてはならないのは、mysqld.conf へ次の行が入っていることが必須です。最後の行に追加しておけば十分でしょう。

/etc/mysql/mysql.conf.d/mysqld.conf
character-set-server  = utf8mb4

あと、データベースの作成と権限付与を忘れずに。'<password>' はお好みで。Grafana からアクセスする際の grafana ユーザのパスワードです。

$ sudo mysql
mysql> create database grafana;
Query OK, 1 row affected (0.00 sec)

mysql> CREATE USER 'grafana'@'localhost' IDENTIFIED BY '<password>';
Query OK, 0 row affected (0.00 sec)

mysql> grant all privileges on grafana.* to 'grafana'@'localhost';
Query OK, 0 rows affected (0.00 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

2. Grafana 用、database-migrator を準備する

Grafana 向け sqlite3 DBから MySQL 用のデータ移行スクリプト(SQL)をdumpするプログラムであるdatabase-migratorを準備します。git で提供されていますから、gitも忘れずに。

適当なディレクトリで git clone して、Grafana のあるサーバへコードをダウンロードします。

$ git clone https://github.com/grafana/database-migrator.git

実行権限がついてなければ、付与しておきます

$ chmod 755 database-migrator/sqlitedump.sh

3. grafana.db から MySQL 用 sql を抽出する

DBの静止点をとるために、Grafanaを停止しておきます。

$ sudo systemctl stop grafana-server.service

Grafanasqlite3 DB から、先ほどの database-migrator を使って、MySQL データ移行用の SQL ダンプを出力します。

$ sudo database-migrator/sqlitedump.sh /var/lib/grafana/grafana.db > grafana.sql

なお、grafana.inisqlite3 データベースのディレクトリやパスを変えている場合は、/var/lib/grafana/grafana.db をそちらへ直してください。

4. grafana.ini の設定を変更する

grafana.ini を変更して、MySQLへアクセスするように設定を変更します。

先に MySQL を設定したとおりに進めている場合には、nameusergrafanaです。<PASSWORD> は、先に指定したパスワードを指定してください。

[database]
# You can configure the database connection by specifying type, host, name, user and password
# as separate properties or as on string using the url properties.

# Either "mysql", "postgres" or "sqlite3", it's your choice
type = mysql
host = 127.0.0.1:3306
name = grafana # データベース名
user = grafana # MySQL のユーザ名
# If the password contains # or ; you have to wrap it with triple quotes. Ex """#password;"""
password = <PASSWORD> # grafana ユーザで指定したパスワード

5. MySQL の各種テーブルを作成する

まだ、データベースにデータを入れていませんが、ここで一度Grafanaを起動します。

sudo systemctl start grafana-server.service

その後、こんな感じでtail -fしながら、http.serverが起動するのを待ちます。

$ sudo tail -f /var/log/syslog
Feb 17 22:27:57 hostname grafana-server[231080]: t=2021-02-17T22:27:57+0900 lvl=info msg="Executing migration" logger=migrator id="add index user_auth_token.user_id"
Feb 17 22:27:57 hostname grafana-server[231080]: t=2021-02-17T22:27:57+0900 lvl=info msg="Executing migration" logger=migrator id="create cache_data table"
Feb 17 22:27:57 hostname grafana-server[231080]: t=2021-02-17T22:27:57+0900 lvl=info msg="Executing migration" logger=migrator id="add unique index cache_data.cache_key"
Feb 17 22:27:57 hostname grafana-server[231080]: t=2021-02-17T22:27:57+0900 lvl=info msg="Executing migration" logger=migrator id="create short_url table v1"
Feb 17 22:27:57 hostname grafana-server[231080]: t=2021-02-17T22:27:57+0900 lvl=info msg="Executing migration" logger=migrator id="add index short_url.org_id-uid"
Feb 17 22:27:58 hostname grafana-server[231080]: t=2021-02-17T22:27:58+0900 lvl=info msg="Created default admin" logger=sqlstore user=admin
Feb 17 22:27:58 hostname grafana-server[231080]: t=2021-02-17T22:27:58+0900 lvl=info msg="Created default organization" logger=sqlstore
Feb 17 22:27:58 hostname grafana-server[231080]: t=2021-02-17T22:27:58+0900 lvl=info msg="Starting plugin search" logger=plugins
Feb 17 22:27:58 hostname grafana-server[231080]: t=2021-02-17T22:27:58+0900 lvl=info msg="Registering plugin" logger=plugins id=input
Feb 17 22:27:58 hostname grafana-server[231080]: t=2021-02-17T22:27:58+0900 lvl=info msg="HTTP Server Listen" logger=http.server address=[::]:3000 protocol=http subUrl= socket=

そこまで達したら、またGrafanaを停止します。

$ sudo systemctl stop grafana-server.service

このように、Grafana の起動時にデータベース内になにも入っていないと、必要なテーブルや初期設定を行ってくれます。

6. MySQL へデータを放り込む

あとは、できあがったテーブル構造内に、先ほどのSQLをぶん投げておしまいです。もし、失敗して変なデータを入れてしまったら、mysqlDROP DATABASE grafana;してから CREATE DATABASE grafana; してやり直しです。

その後は、MySQLにデータを放り投げ入れます。<PASSWORD>のとこは読み替えて直して入れてください。

mysql -u grafana -p<PASSWORD> -D grafana < ~/grafana.sql

特にエラーなく放り込めたら、Grafana を起動します。

sudo systemctl start grafana-server.service

これでマイグレーションはうまくいっているはずです、アクセスして試してみましょう!

そして更新間隔を 1s 5s などで頻繁に更新して楽しみましょう!!!11(そうじゃない)

10
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?