MySQL(Dockerコンテナ)で日本語を扱うために設定したこと

MySQLにデータを登録しようとしたら、Pythonではテーブルに登録は出来ていたんですが、tsvで書き出したファイルをMySQLコンテナのシェルから一括で登録しようとしたところ
# mysqlimport -uroot -p --local gin_db predict_info.tsv

Records: 372 Deleted: 0 Skipped: 372 Warnings: 1116
こんな感じで全てスキップされてしまいデータが登録できませんでした。

試しにmysqlに入って1レコードだけ登録しようとしたら、どうやら全角文字が消える?みたいで、登録できませんでした。

日本語を入力して消えるのは、日本語環境が設定されてない

という事らしいです。GolangとPythonからは日本語の登録・取得は出来ていたので設定はしていませんでした。 色々方法があるみたいですが、私の場合はすんなりとは行かなくて、一応こんな感じで落ち着きました。
Dockerfile
FROM mysql:5.7

#RUN apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 417B948D3F79CD19 \
RUN apt-get update \
&& apt-get -y install locales --no-install-recommends \
&& rm -rf /var/lib/apt/lists/*

RUN dpkg-reconfigure locales && \
    locale-gen C.UTF-8 && \
    /usr/sbin/update-locale LANG=C.UTF-8

ENV LC_ALL C.UTF-8
docker-compose.yml
mysql:
    container_name: project-gin-mysql
    image: mysql:5.7
    build:
      context: .
      dockerfile: ./docker/database/Dockerfile
    environment:
      MYSQL_ROOT_PASSWORD: rootroot
      MYSQL_DATABASE: gin_db
      MYSQL_USER: myuser
      MYSQL_PASSWORD: mypasswd
      TZ: "Asia/Tokyo"
    command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci

W: GPG error: 〜 NO_PUBKEY なエラーも発生

$ docker-compose up --build
再ビルド中、Public Key のエラーも出ました。
W: GPG error: http://repo.mysql.com/apt/debian buster InRelease: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY 417B948D3F79CD19
E: The repository 'http://repo.mysql.com/apt/debian buster InRelease' is not signed.
Dockerfileではコメントにしてますが、
RUN apt-get updateの前にRUN apt-key adv –keyserver 〜を実行させればビルドが通りました。

Dockerコンテナの再作成でいつも認証のエラーが出るので

ついでですが、MySQLのコンテナ再作成ではいつも下記のエラー(ca-key.pem)が出るので、普通はどうやるんだろうと気になって調べてみました。
因みに私は、コンテナの/var/lib/mysqlで設定しているフォルダの中身を消して対応してました。でもDBの中身も無くなるから、う〜んって感じだったんですよね。
Traceback (most recent call last):
File "site-packages/docker/utils/build.py", line 96, in create_archive
PermissionError: [Errno 13] Permission denied: '/home/toshiya/Work/WebSiteMaking/gin_redis_docker/docker/database/data.bak/ca-key.pem'
StackOverflowを見てみたら、Dockerのvolumeに設定したらいちいちpemファイルを削除しなくても大丈夫になりました。
  #MySQL Service  
  mysql:
    container_name: project-gin-mysql
    image: mysql:5.7
    ...
    volumes:
      - mysqldbvolume:/var/lib/mysql
      - ./docker/database/my.cnf:/etc/mysql/conf.d/my.cnf

...

# Volumes
volumes:
  mysqldbvolume:
    driver: local
因みにvolumeの確認はこうやるみたいです。
docker volume ls
/var/lib/docker/volumes この場所にあるみたいですが、rootオーナーでパーミッションが700なので、厳重に管理されてて簡単に扱えるフォルダではなさそうですね。しばらくどういう設定にするか悩みそうです。
以上になります

こういうブログもありました。

人気のあるブログ:

コメントを残す

メールアドレスが公開されることはありません。

CAPTCHA


このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください