わしのlog

プログラミングとかバイクとか。

Mattermost(preview)のデータをMattermost(production版)に移行する。

はじめに

dev-daikichi.hatenablog.com 前回の続きです。

今回は
Windows上のdockerで構築したMattermost(preview)
から
Ubuntu上にdockerで構築したMattermost(production)
にデータ移行する話です。
テストでWindows on docker on Mattermost-preview
なんてものを使ってたんですが、思いの外チャットデータが溜まってしまったので
production版にそのデータを移行したいなぁと思ったのがキッカケです。

環境

Windows 10 Pro 64bit Ubuntu 18.04 LTS
今回はどちらも同一ネットワーク上に存在する機器として
データ移行を行っています。

手順

dumpの取得

まずはMattermost-previewのコンテナ内に入ってdumpを取得。
下記記事を参考にしてdumpを取得する。
koexuka.blogspot.com

$ docker exec -it [コンテナID or コンテナ名] /bin/bash
$ mysqldump -u mmuser -p [DB名] --default-character-set=binary > mysql.dump
# (mostest と入力。デフォのパスワードとなっています。)

これでコンテナ内のコマンドを実行したディレクトリ内にdumpファイルができているハズ。


コンテナ⇒Windows上へのデータコピー

お次は下記記事の通り、Mattermostのdockerコンテナから
ホストであるWindowsに先ほどのdumpファイルを持ってきます。
qiita.com Windows上の任意のディレクトリ上でcmdを起動し、コマンドを叩きます。

docker cp [コンテナID or コンテナ名]:[先ほどのdumpファイルのpath] mysql.dump


Windows上のファイルをUbuntuへ(失敗)

と、まぁここまではいけるんですが
Windows上からUbuntuへファイルを持ってくるのに一苦労しました。

まず、WindowsUbuntuへリモート接続を試しました。
qiita.com 接続した状態でCtrl + cでコピったdumpファイルを
Ubuntu上に貼り付けて, dbコンテナ内にファイルを移してコマンド実行。

$ sudo docker cp mysql.dump [コンテナID or コンテナ名]:/mysql.dump
$ sudo docker exec -it [コンテナID or コンテナ名] /bin/bash
$ mysql -u[ユーザ名] -p[パスワード] [DB名] --default-character-set=binary < mysql.dump

が、文字化けて失敗。


次の手。
文明の利器 USBメモリ を使ってファイル移行できないものか。
USBメモリに入れたデータをUbuntu上に配置。
それをさっきの手順でdbコンテナ内に置いて
リストアコマンドを打つ。
が、文字化けて失敗。
っていうかよくみたらdumpファイルの中身文字化けしてるやん!


phpMyAdminからデータを流しこむ

Windows上のテキストフォーマット≠Ubuntu上のテキストフォーマットが問題なのか?
かくなる上は、GUI上からならどうだ。
PHPMyAdminをdockerで立てて、そこからSQLを発行してやる。

$ sudo docker run --name phpmyadmin -d --link [Ubuntu上のMattermostのdbコンテナ名]:db -p 8080:80 phpmyadmin/phpmyadmin

よし、Windowsから
http://UbuntuマシンのIP:8080 を叩いてUbuntu上のPHPMyAdminに接続して・・・


失敗。
エラーが出ているようです。
ふむふむ。

The server requested authentication method unknown to the client [caching_sha2_password]

とな?

どうやらMySQL8ではデフォルトでパスワードがハッシュ化されるようだ。
(こちらは前回記事でも書きましたね。)
こちらの記事を参考にconfファイルをいじり、ユーザを作成。
blog.websandbag.com

改めて接続・・・
成功!
さぁ、dumpファイル内のSQLを貼り付けて実行!




・・・




成功!
ようやくデータ移行完了です。
本当に長かった・・・。
文字に直すとだいぶアッサリしてますが、思ったより時間をかけてしまいました。

まとめ

OS違いの環境で慣れないことなんてするもんじゃない(戒め)
でも勉強になったかなと思います。
本質的なところはまだわかってないんで勉強必須ですが・・・。

また、アップロードしたファイルの情報等は
Mattermost(Preview Mode)でデータを永続化する方法 こちらの記事に照会されている通り
/mm/mattermost/mattermost-dataにあるようなので
そのファイルを前述の方法でコピって持ってきて移行しましょう。
結構特殊な移行手順でしたが、誰かの参考になれば幸いです。



現場からは以上です。