この記事は、Zennにも投稿しています。
概要
Traccarを5.9にアプデしたら起動しなくなった。どうやら今までの内部データベース形式はサポートされなくなったみたいです。
Error updating to 5.9 from 5.8 · Issue #5164 · traccar/traccar
Describe the bug I've downloaded the amd64 build, extracted, run the .run, and got error while trying to start traccar. To Reproduce Steps to reproduce the behavior: install 5.8 i assume, although ...
github.com
これを機にMySQLに移行しようという記事です。
MySQLの導入
traccarのサーバーはdocker-compose.ymlで管理しているのでそこにmysqlを追加します。データ移行のために一時的にportsを設定します。
次に
参考:
traccar.xml
のデータベース設定を書き換えます。参考:
MySQL Database - Traccar
www.traccar.org
ここで一度Traccarを起動し、MySQLにテーブルが作成されていることを確認するようにしてください。
確認後はデータの移行を行うため、Traccarのコンテナは停止しておきます。
確認後はデータの移行を行うため、Traccarのコンテナは停止しておきます。
データの移行
次に実際にデータを移行します。このメモを書く際に色々試してみましたが、DBeaverを使うと一番簡単だったのでこれを使うことにしました。他のソフトウエアでも一応できるみたいではあるようです。
参考:
参考:
Suggestions for a good migration tool to convert H2 to MySQL? - Traccar
www.traccar.org
手順
1. H2データベースとMySQLに接続
DBeaverを開き、データベースに接続します。H2データベースはdockerであればボリューム内のどこかに
同様に新しいMySQLデータベースにも接続します。
database.mv.db
というファイルがあるはず。多分バックアップしておいたほうがいいです。接続する際のユーザーネームは今までのtraccar.xml
に書いてあるはずです。同様に新しいMySQLデータベースにも接続します。
2. データのエクスポート
DBeaverでは他データベースにエクスポートするという機能があり、今回はこれを使うことで簡単にデータを移行できました。
まず、H2データベースのテーブルから
まず、H2データベースのテーブルから
DATABASECHANGELOG
とDATABASECHANGELOGLOCK
を除いた全てのテーブルを選択して右クリックしてデータのエクスポートを選択。その後出てくるウィザードに従い進めます。
H2データベースが動いてたときととMySQLにテーブルを作成したtraccarのバージョンが合っていないとデータベースの移行がうまくいかないと思われます
Export targetでは「データベース」を選択し次へ
次の画面で
Choose...
よりMySQLのデータベースを選択する。すると自動で既存のデータベースにinsertするように設定してくれます。そのまま次へと進み、正しくマッピングされているか確認をしてから「続行」でデータベースが移行されます。
自分の場合、
tc_servers
というテーブルの移行でエラーが出ました。移行元のテーブルにも1件しか入っておらずあまり重要なデータでも無さそうだったので自分は移行しないでそのままにしておくことにしましたが人によっては手動で色々と作業をしなければいけないかもしれないです。3. 確認
Traccarが正常に起動し、データが失われていないことを確認したら完了。
あとがき
一応自分はこの方法でデータを移行できましたがこれから使っていくうちに何かエラーなどが出始める可能性もあるしもっと大きいデータベースからの移行だと失敗するかもしれないです。
H2データベースは今回のように急に壊れる可能性があるのでH2データベースでtraccarを運用している人はデータが小さいうちに移行しておいたほうがいいかも。