icon

nazo6.dev

一覧に戻る
2023/9/4 5 min read

TraccarのデータをH2からMySQLに移行

この記事はZennにも投稿しています

#概要

Traccarを5.9にアプデしたら起動しなくなった。どうやら今までの内部データベース形式はサポートされなくなったみたいです。

これを機にMySQLに移行しようという記事です。

#MySQLの導入

traccarのサーバーはdocker-compose.ymlで管理しているのでそこにmysqlを追加します。データ移行のために一時的にportsを設定します。

docker-compose.yml
  db:
    image: mysql:latest
    environment:
      MYSQL_ROOT_PASSWORD: mysql
      MYSQL_DATABASE: db
      MYSQL_USER: user
      MYSQL_PASSWORD: password
    ports:
      - "3306:3306"
    volumes:
      - ./db/data:/var/lib/mysql
      - ./db/logs:/var/log/mysql

次にtraccar.xmlのデータベース設定を書き換えます。 参考:

traccar.xmlの一部
    <entry key='database.driver'>com.mysql.cj.jdbc.Driver</entry>
    <entry key='database.url'>jdbc:mysql://db/db?zeroDateTimeBehavior=round&amp;serverTimezone=UTC&amp;allowPublicKeyRetrieval=true&amp;useSSL=false&amp;allowMultiQueries=true&amp;autoReconnect=true&amp;useUnicode=yes&amp;characterEncoding=UTF-8&amp;sessionVariables=sql_mode=''</entry>
    <entry key='database.user'>user</entry>
    <entry key='database.password'>password</entry>
 

ここで一度Traccarを起動し、MySQLにテーブルが作成されていることを確認するようにしてください。 確認後はデータの移行を行うため、Traccarのコンテナは停止しておきます。

#データの移行

次に実際にデータを移行します。このメモを書く際に色々試してみましたが、DBeaverを使うと一番簡単だったのでこれを使うことにしました。他のソフトウエアでも一応できるみたいではあるようです。 参考:

#手順

#1. H2データベースとMySQLに接続

DBeaverを開き、データベースに接続します。H2データベースはdockerであればボリューム内のどこかにdatabase.mv.dbというファイルがあるはず。多分バックアップしておいたほうがいいです。接続する際のユーザーネームは今までのtraccar.xmlに書いてあるはずです。 同様に新しいMySQLデータベースにも接続します。

#2. データのエクスポート

DBeaverでは他データベースにエクスポートするという機能があり、今回はこれを使うことで簡単にデータを移行できました。 まず、H2データベースのテーブルからDATABASECHANGELOGDATABASECHANGELOGLOCKを除いた全てのテーブルを選択して右クリックしてデータのエクスポートを選択。

その後出てくるウィザードに従い進めます。

H2データベースが動いてたときととMySQLにテーブルを作成したtraccarのバージョンが合っていないとデータベースの移行がうまくいかないと思われます

Export targetでは「データベース」を選択し次へ 次の画面でChoose...よりMySQLのデータベースを選択する。すると自動で既存のデータベースにinsertするように設定してくれます。

そのまま次へと進み、正しくマッピングされているか確認をしてから「続行」でデータベースが移行されます。

自分の場合、tc_serversというテーブルの移行でエラーが出ました。移行元のテーブルにも1件しか入っておらずあまり重要なデータでも無さそうだったので自分は移行しないでそのままにしておくことにしましたが人によっては手動で色々と作業をしなければいけないかもしれないです。

#3. 確認

Traccarが正常に起動し、データが失われていないことを確認したら完了。

#あとがき

一応自分はこの方法でデータを移行できましたがこれから使っていくうちに何かエラーなどが出始める可能性もあるしもっと大きいデータベースからの移行だと失敗するかもしれないです。

H2データベースは今回のように急に壊れる可能性があるのでH2データベースでtraccarを運用している人はデータが小さいうちに移行しておいたほうがいいかも。

Share this article:
一覧に戻る

関連記事

2023/7/2

#tech/git#tech/selfhosted
memo

Gitea Actionsがいつの間にか動かなくなってた

ある日Gitea Actionsが動かなくなっているのを発見。Act Runnerのログを見ると

Read Article

2023/8/17

#tech/selfhosted
memo

Gitlab, Gitlab Pages, Gitlab Runnerをリバースプロキシの背後で動かす

GitlabではSSLの設定を一切やらずにリバースプロキシに任せてGitlabとPages,Runnerを動かす。 GitlabでSSLの設定をすると証明書が二重に必要になったりして、めんどい。

Read Article

2023/10/29

#tech/selfhosted
memo

Self HostedなFirebase的なもの

プライベートなFaaSとか簡単なデータベースとか(いわゆるFirebase代替)が欲しかったのでセルフホストできるものを探してみた

Read Article

2023/11/27

#tech/selfhosted#tech/synology
blog

Synology NASへのHomebrew(linuxbrew)を使ったNeovimのインストール

Synology NASにいろんなツールをインストールしたいとき(まあ本当はしないほうがいいんですが)、Entwareと呼ばれるツールを使うのが一般的だと思われます。 しかしながら、Entwareはリポジトリが小さく古めなため他に使えるパッケージマネージャがないかと調べていたところ、Homebrewをインストールできるという情報を見かけて試してみました。 このbrewを使ってneovim nightlyをSynology NASにインストールしたいと思います。

Read Article

2023/6/30

#tech/selfhosted
memo

VPNを繋いだときだけDockerの中から特定のサイトにアクセスできない!

タイトル通り。ホストからはどのサイトにもアクセスできて、Dockerの中でもcurl google.comは通るがcurl github.comは通らないなどの謎現象に出会った。

Read Article

2023/7/2

#tech/git#tech/selfhosted
blog

docker-composeでGitea + Gitea Actionsのセットアップ

こんな感じのdocker-compose.ymlで良い

Read Article

2023/11/10

#tech/selfhosted
memo

セルフホスト音楽サーバ/クライアント

Navidrome

Read Article

© 2025 nazo6. All rights reserved.