Embulk の MySQL output plugin で UTC で書き込めずにハマった

概要

  • MySQL のあるカラムに UTC でデータを放り込みたい
  • そのカラムの値は embulk preview では UTC で表示されている
  • しかし MySQL output plugin で MySQL に放り込むと JST換算 に変わってしまっている
  • なので MySQL output plugin の設定がおかしい

結論

out:options: { useLegacyDatetimeCode: false, serverTimezone: UTC } を追加する。

out:
  type: mysql
  (省略)
  options: { useLegacyDatetimeCode: false, serverTimezone: UTC }
  (省略)

補足

これがよい解決方法なのかは分かりません。

環境

mysql> SHOW variables LIKE '%time_zone%';
+------------------+-------+
| Variable_name    | Value |
+------------------+-------+
| system_time_zone | UTC   |
| time_zone        | UTC   |
+------------------+-------+
2 rows in set (0.01 sec)
$ mysql --version
mysql  Ver 8.0.12 for osx10.14 on x86_64 (Homebrew)

参考

Mac の MySQL で(というか MySQL 8 で)認証時に Unable to load authentication plugin 'caching_sha2_password'. と怒られたとき(JDBC利用時)

結論

SQL で WITH mysql_native_password を使ってパスワードを定義する。

具体例

mysql> ALTER USER 'YOUR_USERNAME'@'YOUR_HOSTNAME' IDENTIFIED WITH mysql_native_password BY 'YOUR_PASSWORD';

補足

  • Embulk の MySQL プラグインを使ったら遭遇しました*1
  • DBeaver を使った場合も同様でした
    • すなわち JDBC で起きるということでしょう
  • 上記コマンドで ERROR 3009 (HY000): Column count of mysql.user is wrong. Expected 50, found 49. Created with MySQL 80012, now running 80013. Please use mysql_upgrade to fix this error. みたいに怒られた場合は、一度ターミナルに戻って $ mysql_upgrade -uroot などとして MySQL をアップグレードしてやります

参考

*1:Embulk とは本質的には関係がないです

まずローカルにリポジトリを作りそれから GitHub にリポジトリを作った場合にさっさと設定する

結論

すでに GitHub にはリポジトリを作っているとします。

$ git pull git@github.com:USERNAME/REPONAME.git master
$ git add .
$ git commit -m "コミットコメント"
$ git remote add origin git@github.com:USERNAME/REPONAME.git
$ git push

補足

  • GitHub でなくても*1同様です
  • pull に失敗する場合は stash するなどして解消しましょう
  • めんどくさい場合はとっとと clone してファイルコピーした方がたぶん楽です

*1:GitLab や GitBucket などでも

Powered by はてなブログ