Dockerでmariadbバージョンアップ(詳細編3-google cloudでmariadb10.11.5)

概要編から参照されるための詳細編3。

google cloudでmariadb10.11.5

local-linuxでやったことと同じことをやってデータベース作る。

当たり前なんやけど、google cloudではCPU・メモリ・ディスクの利用で課金がある。

ディスクは確保したサイズで課金やから毎月同じやけど、CPUとメモリは使った時間で秒単位課金になってる。

金額はそれほど高くないけど、やっぱりアプリケーションを「使う」ために時間を割きたい。

だから構築や変更はできるだけ短い時間で済ませる。そのために開発環境でリハーサルしてるんやし。

gcpで一気に展開

このセクション実施にはlocal-linuxで確認しながら数日かけて実施したけど、gcpの中では1時間程度で完了。

ファイル類の準備と設置

ローカルlinuxで作ったファイルと同じものを用意する。

root@gcp-gvis-dklinux:/gvis/nari/nariDocs/Docker/nariDockerDat/sv_mariadb11# ll
合計 56K
drwxr-xr-x  3 nari docker          4.0K 2023-03-13 06:59:42 ./
drwxrwxrwx 12 nari naritomitsukasa 4.0K 2023-03-13 06:40:26 ../
drwxr-xr-x  6 lxd              999 4.0K 2023-03-15 06:06:30 data/
-rwxr-xr-x  1 nari docker           20K 2023-03-13 06:41:31 docker-entrypoint.sh*
-rw-r--r--  1 nari docker           131 2023-03-13 06:57:09 env_sv_mariadb11.txt
-rwxr-xr-x  1 nari docker          8.6K 2023-03-13 06:41:31 healthcheck.sh*
-rw-r--r--  1 nari docker          6.2K 2023-03-13 06:43:33 sv_mariadb11_Dockerfile
root@gcp-gvis-dklinux:/gvis/nari/nariDocs/Docker/nariDockerDat/sv_mariadb11#

コンテナ作成と起動

docker-compose.ymlもローカルlinuxで作ったものに準じて用意し起動させる。
フォルダ名や構成もそろえる。

services:

  sv_mariadb1011:
    hostname: svmariadb1011
    build:
      context: ./nariDockerDat/sv_mariadb11/
      dockerfile: sv_mariadb11_Dockerfile
    image: mariadb:1011
    ports:
      - 13306:3306
    env_file:
      - ./nariDockerDat/sv_mariadb11/env_sv_mariadb11.txt
    volumes:
      - ./nariDockerDat/sv_mariadb11/data:/var/lib/mysql
      - ./nariDockerDat/sv_mariadb11conf:/etc/mysql/conf.d

最初にdocker-composeでビルドしたとき。
一発起動したときは嬉しかったなぁ。
ローカルlinuxでリハーサルしてるんやから当たり前か。

最初のほうにある「sv_mariadb1011 Error」は理由がわからん。ビルドはできてるから、別の機会に調べる。

nari@gcp-gvis-dklinux:/gvis/nari/nariDocs/Docker$ docker-compose up sv_mariadb1011
[+] Running 0/1
⠿ sv_mariadb1011 Error                                                                        0.6s
[+] Building 51.9s (14/14) FINISHED                                                                 
=> [internal] load build definition from sv_mariadb11_Dockerfile                              0.1s
=> => transferring dockerfile: 6.38kB                                                         0.0s
=> [internal] load .dockerignore                                                              0.1s
=> => transferring context: 2B                                                                0.0s
=> [internal] load metadata for docker.io/library/ubuntu:jammy                                0.9s
=> [1/9] FROM docker.io/library/ubuntu:jammy@sha256:2adf22367284330af9f832ffefb717c78239f625  1.9s
=> => resolve docker.io/library/ubuntu:jammy@sha256:2adf22367284330af9f832ffefb717c78239f625  0.0s
=> => sha256:b2175cd4cfdd5cdb1740b0e6ec6bbb4ea4892801c0ad5101a81f694152b6c559 424B / 424B     0.0s
=> => sha256:74f2314a03de34a0a2d552b805411fc9553a02ea71c1291b815b2f645f56568 2.30kB / 2.30kB  0.0s
=> => sha256:76769433fd8a87dd77a6ce33db12156b1ea8dad3da3a95e7c9c36a47ec17b 29.53MB / 29.53MB  0.4s
=> => sha256:2adf22367284330af9f832ffefb717c78239f6251d9d0f58de50b86229ed142 1.13kB / 1.13kB  0.0s
=> => extracting sha256:76769433fd8a87dd77a6ce33db12156b1ea8dad3da3a95e7c9c36a47ec17b24c      1.0s
=> [internal] load build context                                                              0.0s
=> => transferring context: 28.75kB                                                           0.0s
=> [2/9] RUN groupadd -r mysql && useradd -r -g mysql mysql                                   1.3s
=> [3/9] RUN set -eux;  apt-get update;  DEBIAN_FRONTEND=noninteractive apt-get install -y   22.0s
=> [4/9] RUN mkdir /docker-entrypoint-initdb.d                                                0.5s 
=> [5/9] RUN set -e; echo "deb http://archive.mariadb.org/mariadb-10.11.2/repo/ubuntu/ jammy  0.5s 
=> [6/9] RUN set -ex;  {   echo "mariadb-server" mysql-server/root_password password 'unuse  21.8s 
=> [7/9] COPY healthcheck.sh /usr/local/bin/healthcheck.sh                                    0.1s 
=> [8/9] COPY docker-entrypoint.sh /usr/local/bin/                                            0.0s 
=> [9/9] RUN chmod +x /usr/local/bin/docker-entrypoint.sh                                     0.4s 
=> exporting to image                                                                         2.0s 
=> => exporting layers                                                                        2.0s 
=> => writing image sha256:0d20f866875686b97d51b20500846e37604f5898322e71c09e317108cc19e915   0.0s 
=> => naming to docker.io/library/mariadb:1011                                                0.0s
Use 'docker scan' to run Snyk tests against images to find vulnerabilities and learn how to fix them
[+] Running 1/1
⠿ Container docker-sv_mariadb1011-1  Created                                                  0.1s
Attaching to docker-sv_mariadb1011-1
docker-sv_mariadb1011-1  | 2023-03-13 07:03:14+09:00 [Note] [Entrypoint]: Entrypoint script for MariaDB Server 1:10.11.2+maria~ubu2204 started.
docker-sv_mariadb1011-1  | 2023-03-13 07:03:14+09:00 [Note] [Entrypoint]: Switching to dedicated user 'mysql'
docker-sv_mariadb1011-1  | 2023-03-13 07:03:14+09:00 [Note] [Entrypoint]: Entrypoint script for MariaDB Server 1:10.11.2+maria~ubu2204 started.
docker-sv_mariadb1011-1  | 2023-03-13 07:03:14+09:00 [Note] [Entrypoint]: Initializing database files
docker-sv_mariadb1011-1  | /usr/sbin/mariadbd: Can't create file '/var/log/mariadb.log' (errno: 13 "Permission denied")
docker-sv_mariadb1011-1  | 
docker-sv_mariadb1011-1  | 
docker-sv_mariadb1011-1  | PLEASE REMEMBER TO SET A PASSWORD FOR THE MariaDB root USER !
docker-sv_mariadb1011-1  | To do so, start the server, then issue the following command:
docker-sv_mariadb1011-1  | 
docker-sv_mariadb1011-1  | '/usr/bin/mariadb-secure-installation'
docker-sv_mariadb1011-1  | 
docker-sv_mariadb1011-1  | which will also give you the option of removing the test
docker-sv_mariadb1011-1  | databases and anonymous user created by default.  This is
docker-sv_mariadb1011-1  | strongly recommended for production servers.
docker-sv_mariadb1011-1  | 
docker-sv_mariadb1011-1  | See the MariaDB Knowledgebase at https://mariadb.com/kb
docker-sv_mariadb1011-1  | 
docker-sv_mariadb1011-1  | Please report any problems at https://mariadb.org/jira
docker-sv_mariadb1011-1  | 
docker-sv_mariadb1011-1  | The latest information about MariaDB is available at https://mariadb.org/.
docker-sv_mariadb1011-1  | 
docker-sv_mariadb1011-1  | Consider joining MariaDB's strong and vibrant community:
docker-sv_mariadb1011-1  | https://mariadb.org/get-involved/
docker-sv_mariadb1011-1  | 
docker-sv_mariadb1011-1  | 2023-03-13 07:03:16+09:00 [Note] [Entrypoint]: Database files initialized
docker-sv_mariadb1011-1  | 2023-03-13 07:03:16+09:00 [Note] [Entrypoint]: Starting temporary server
docker-sv_mariadb1011-1  | 2023-03-13 07:03:16+09:00 [Note] [Entrypoint]: Waiting for server startup
docker-sv_mariadb1011-1  | mariadbd: Can't create file '/var/log/mariadb.log' (errno: 13 "Permission denied")
docker-sv_mariadb1011-1  | 2023-03-13  7:03:16 0 [Note] Starting MariaDB 10.11.2-MariaDB-1:10.11.2+maria~ubu2204-log source revision cafba8761af55ae16cc69c9b53a341340a845b36 as process 103
docker-sv_mariadb1011-1  | 2023-03-13  7:03:16 0 [Note] InnoDB: Compressed tables use zlib 1.2.11
docker-sv_mariadb1011-1  | 2023-03-13  7:03:16 0 [Note] InnoDB: Using transactional memory
docker-sv_mariadb1011-1  | 2023-03-13  7:03:16 0 [Note] InnoDB: Number of transaction pools: 1
docker-sv_mariadb1011-1  | 2023-03-13  7:03:16 0 [Note] InnoDB: Using crc32 + pclmulqdq instructions
docker-sv_mariadb1011-1  | 2023-03-13  7:03:16 0 [Note] mariadbd: O_TMPFILE is not supported on /tmp (disabling future attempts)
docker-sv_mariadb1011-1  | 2023-03-13  7:03:16 0 [Note] InnoDB: Initializing buffer pool, total size = 512.000MiB, chunk size = 8.000MiB
docker-sv_mariadb1011-1  | 2023-03-13  7:03:16 0 [Note] InnoDB: Completed initialization of buffer pool
docker-sv_mariadb1011-1  | 2023-03-13  7:03:16 0 [Note] InnoDB: File system buffers for log disabled (block size=4096 bytes)
docker-sv_mariadb1011-1  | 2023-03-13  7:03:17 0 [Note] InnoDB: 128 rollback segments are active.
docker-sv_mariadb1011-1  | 2023-03-13  7:03:17 0 [Note] InnoDB: Setting file './ibtmp1' size to 12.000MiB. Physically writing the file full; Please wait ...
docker-sv_mariadb1011-1  | 2023-03-13  7:03:17 0 [Note] InnoDB: File './ibtmp1' size is now 12.000MiB.
docker-sv_mariadb1011-1  | 2023-03-13  7:03:17 0 [Note] InnoDB: log sequence number 46606; transaction id 14
docker-sv_mariadb1011-1  | 2023-03-13  7:03:17 0 [Note] Plugin 'FEEDBACK' is disabled.
docker-sv_mariadb1011-1  | 2023-03-13  7:03:17 0 [ERROR] mariadbd: File '/var/log/mariadb_slow.log' not found (Errcode: 13 "Permission denied")
docker-sv_mariadb1011-1  | 2023-03-13  7:03:17 0 [ERROR] Could not use /var/log/mariadb_slow.log for logging (error 13). Turning logging off for the whole duration of the MariaDB server process. To turn it on again: fix the cause, shutdown the MariaDB server and restart it.
docker-sv_mariadb1011-1  | 2023-03-13  7:03:17 0 [Warning] 'user' entry 'root@svmariadb1011' ignored in --skip-name-resolve mode.
docker-sv_mariadb1011-1  | 2023-03-13  7:03:17 0 [Warning] 'proxies_priv' entry '@% root@svmariadb1011' ignored in --skip-name-resolve mode.
docker-sv_mariadb1011-1  | 2023-03-13  7:03:17 0 [Note] mariadbd: ready for connections.
docker-sv_mariadb1011-1  | Version: '10.11.2-MariaDB-1:10.11.2+maria~ubu2204-log'  socket: '/run/mysqld/mysqld.sock'  port: 0  mariadb.org binary distribution
docker-sv_mariadb1011-1  | 2023-03-13 07:03:17+09:00 [Note] [Entrypoint]: Temporary server started.
docker-sv_mariadb1011-1  | 2023-03-13 07:03:19+09:00 [Note] [Entrypoint]: Creating database nariDB_1st
docker-sv_mariadb1011-1  | 2023-03-13 07:03:19+09:00 [Note] [Entrypoint]: Creating user nari
docker-sv_mariadb1011-1  | 2023-03-13 07:03:19+09:00 [Note] [Entrypoint]: Giving user nari access to schema nariDB_1st
docker-sv_mariadb1011-1  | 2023-03-13 07:03:19+09:00 [Note] [Entrypoint]: Securing system users (equivalent to running mysql_secure_installation)
docker-sv_mariadb1011-1  | 
docker-sv_mariadb1011-1  | 2023-03-13 07:03:19+09:00 [Note] [Entrypoint]: Stopping temporary server
docker-sv_mariadb1011-1  | 2023-03-13  7:03:19 0 [Note] mariadbd (initiated by: unknown): Normal shutdown
docker-sv_mariadb1011-1  | 2023-03-13  7:03:19 0 [Note] InnoDB: FTS optimize thread exiting.
docker-sv_mariadb1011-1  | 2023-03-13  7:03:19 0 [Note] InnoDB: Starting shutdown...
docker-sv_mariadb1011-1  | 2023-03-13  7:03:19 0 [Note] InnoDB: Dumping buffer pool(s) to /var/lib/mysql/ib_buffer_pool
docker-sv_mariadb1011-1  | 2023-03-13  7:03:19 0 [Note] InnoDB: Buffer pool(s) dump completed at 230313  7:03:19
docker-sv_mariadb1011-1  | 2023-03-13  7:03:19 0 [Note] InnoDB: Removed temporary tablespace data file: "./ibtmp1"
docker-sv_mariadb1011-1  | 2023-03-13  7:03:19 0 [Note] InnoDB: Shutdown completed; log sequence number 46606; transaction id 15
docker-sv_mariadb1011-1  | 2023-03-13  7:03:19 0 [Note] mariadbd: Shutdown complete
docker-sv_mariadb1011-1  | 
docker-sv_mariadb1011-1  | 2023-03-13 07:03:19+09:00 [Note] [Entrypoint]: Temporary server stopped
docker-sv_mariadb1011-1  | 
docker-sv_mariadb1011-1  | 2023-03-13 07:03:19+09:00 [Note] [Entrypoint]: MariaDB init process done. Ready for start up.
docker-sv_mariadb1011-1  | 
docker-sv_mariadb1011-1  | mariadbd: Can't create file '/var/log/mariadb.log' (errno: 13 "Permission denied")
docker-sv_mariadb1011-1  | 2023-03-13  7:03:19 0 [Note] Starting MariaDB 10.11.2-MariaDB-1:10.11.2+maria~ubu2204-log source revision cafba8761af55ae16cc69c9b53a341340a845b36 as process 1
docker-sv_mariadb1011-1  | 2023-03-13  7:03:20 0 [Note] InnoDB: Compressed tables use zlib 1.2.11
docker-sv_mariadb1011-1  | 2023-03-13  7:03:20 0 [Note] InnoDB: Using transactional memory
docker-sv_mariadb1011-1  | 2023-03-13  7:03:20 0 [Note] InnoDB: Number of transaction pools: 1
docker-sv_mariadb1011-1  | 2023-03-13  7:03:20 0 [Note] InnoDB: Using crc32 + pclmulqdq instructions
docker-sv_mariadb1011-1  | 2023-03-13  7:03:20 0 [Note] mariadbd: O_TMPFILE is not supported on /tmp (disabling future attempts)
docker-sv_mariadb1011-1  | 2023-03-13  7:03:20 0 [Note] InnoDB: Initializing buffer pool, total size = 512.000MiB, chunk size = 8.000MiB
docker-sv_mariadb1011-1  | 2023-03-13  7:03:20 0 [Note] InnoDB: Completed initialization of buffer pool
docker-sv_mariadb1011-1  | 2023-03-13  7:03:20 0 [Note] InnoDB: File system buffers for log disabled (block size=4096 bytes)
docker-sv_mariadb1011-1  | 2023-03-13  7:03:20 0 [Note] InnoDB: 128 rollback segments are active.
docker-sv_mariadb1011-1  | 2023-03-13  7:03:20 0 [Note] InnoDB: Setting file './ibtmp1' size to 12.000MiB. Physically writing the file full; Please wait ...
docker-sv_mariadb1011-1  | 2023-03-13  7:03:20 0 [Note] InnoDB: File './ibtmp1' size is now 12.000MiB.
docker-sv_mariadb1011-1  | 2023-03-13  7:03:20 0 [Note] InnoDB: log sequence number 46606; transaction id 14
docker-sv_mariadb1011-1  | 2023-03-13  7:03:20 0 [Note] Plugin 'FEEDBACK' is disabled.
docker-sv_mariadb1011-1  | 2023-03-13  7:03:20 0 [Note] InnoDB: Loading buffer pool(s) from /var/lib/mysql/ib_buffer_pool
docker-sv_mariadb1011-1  | 2023-03-13  7:03:20 0 [ERROR] mariadbd: File '/var/log/mariadb_slow.log' not found (Errcode: 13 "Permission denied")
docker-sv_mariadb1011-1  | 2023-03-13  7:03:20 0 [ERROR] Could not use /var/log/mariadb_slow.log for logging (error 13). Turning logging off for the whole duration of the MariaDB server process. To turn it on again: fix the cause, shutdown the MariaDB server and restart it.
docker-sv_mariadb1011-1  | 2023-03-13  7:03:20 0 [Warning] You need to use --log-bin to make --expire-logs-days or --binlog-expire-logs-seconds work.
docker-sv_mariadb1011-1  | 2023-03-13  7:03:20 0 [Note] Server socket created on IP: '0.0.0.0'.
docker-sv_mariadb1011-1  | 2023-03-13  7:03:20 0 [Note] Server socket created on IP: '::'.
docker-sv_mariadb1011-1  | 2023-03-13  7:03:20 0 [Note] InnoDB: Buffer pool(s) load completed at 230313  7:03:20
docker-sv_mariadb1011-1  | 2023-03-13  7:03:20 0 [Note] mariadbd: ready for connections.
docker-sv_mariadb1011-1  | Version: '10.11.2-MariaDB-1:10.11.2+maria~ubu2204-log'  socket: '/run/mysqld/mysqld.sock'  port: 3306  mariadb.org binary distribution

途中に「mariadbd: Can’t create file ‘/var/log/mariadb.log’」ってある。

mariadb_slow.logも同じで、コンテナいったん停止してからtouchしておいた。

どっちも昔から書き出し設定してて、もしも異常があるときにログ見たい。

mariadb_slow.logはsql発行して処理が一定時間異常かかるようなことがあったときにロギングされたはず。

mariadbのバージョン上げて別のログになってるかもしれんけど、いったん作っとく。

google cloud用にポート番号を用意する

google cloudでは5つのコンテナを常用してる。

local-linuxにgcloud入れてsshトンネル経由で、ubuntu22のxrdpコンテナを参照させて主に使ってる。

gcpのmariadb10.11は13306で公開させて、local-linuxの53306にアサインすることで、自分のpcのa5sqlから参照できるようになる。

ブラウザで動作確認するときはlocal-linuxの63389へrdp接続すると、gcpのxrdpコンテナに接続できるようにしてる。

gvis-docker-mariadb11

a5sqlで接続設定作っとく。
これでgcp上のmariadb10.5から10.11へデータ流し込みができる。

gvis-docker-mariadb11

いったんローカルに10.5のパケット流れ込んできて10.11へ入れるから、下りパケットの浪費があるけど、1つずつテーブルにデータ流し込みしたいから仕方ない。

テーブル作成とデータ流し込み

次にdjangoの管理テーブルを、流したsqlの順に1つずつ順位制を保ってスキーマ間のデータ転送する。

一括で実施すると、外部キーのエラーが出る。

blob列もあるしコミット単位は100件ぐらいにしておいても通信エラーが発生することあるから、テーブルは複数選ばずに1つずつ着実に入れたほうがいい。

つないだ後、ローカルlinuxで流したsqlをテストで1つだけ動かしてから、残りの22個を流す。

gvis-docker-mariadb11

次にdjangoの管理テーブルを、流したsqlの順に1つずつ順位制を保ってスキーマ間のデータ転送する。

一括で実施すると、外部キーのエラーが出るから仕方ない。

gvis-docker-mariadb11

業務テーブルはblob列もあるし、コミット単位は100件ぐらいにしておいても通信エラーが発生することあるから、テーブルは複数選ばずに1つずつ着実に入れたほうがいい。

今はsshトンネル使ってるけど、昔はgcpへvpn接続してた。
これがまた低速で回線品質イマイチで、mysqlからmariadbに引っ越すとき、データ量が多いとうまくいかなかった。

複数行インサートを10行単位に下げて、ようやっと引っ越しできたっけなぁ。

データベースでそんな具合やから、少し大きめのexcelとかpdfとか開こうとするもんなら、タバコ1本吸うぐらいの時間待たされた。

そのあたりからvpn使うのやめて、sshトンネルとxrdpできるdockerコンテナ使い始めた。

gcp内django処理からの接続

gcp向けのsettings.py(settings-gcp-gvis-dklinux.py)の中にmariadb10.11に向かう記述を書いて、djangoのコンテナを起動しなおす。

# gcp本番用データベース
GV_CONST_HOST = "gcp-gvis-dklinux.intra.gavann-it.com"
GV_CONST_HOST_LCL_HTTP = "http://" + GV_CONST_HOST
GV_CONST_HOST_LCL_HTTPS = "https://" + GV_CONST_HOST
GV_CONST_DOCKER_HTTPS_PORT = "40443"
GV_CONST_DOCKER_HTTP_PORT = "48080"
GV_CONST_DBENVNAME = "nariDB_1st"
GV_CONST_DBUSERNAME = "nari"
GV_CONST_DBPASSWD = "xxxxxxxx"
GV_CONST_DBPORT = "13306"

コンテナ起動のスクリプトは特に変更せんでもええ。そのまま使う。

DOCKER_ROOT=/gvis/nari/nariDocs/Docker
DOCKER_CONF1=${DOCKER_ROOT}/nariDockerDat/sv_django-uwsgi-nginx/app/website
DOCKER_CONF2=${DOCKER_ROOT}/nariDockerDat/sv_django-uwsgi-nginx/app/website/static/admin
DOCKER_CONF3=${DOCKER_ROOT}/nariDockerDat/sv_django-uwsgi-nginx/app/templates
cd ${DOCKER_ROOT}
cp -p docker-compose-GVISweb.yml docker-compose.yml
cp -p  ${DOCKER_CONF1}/settings-gcp-gvis-dklinux.py ${DOCKER_CONF1}/settings.py
rm -fR ${DOCKER_CONF2}/commonColor
cp -pR ${DOCKER_CONF2}/commonBlue            ${DOCKER_CONF2}/commonColor
cp -p  ${DOCKER_CONF3}/Header-gcp-gvis-dklinux.html ${DOCKER_CONF3}/Header.html
### cp -p docker-compose-DBMS.yml          docker-compose.yml
### cp -p docker-compose-Client.yml        docker-compose.yml
docker-compose up -d

ブラウザで開くと状態ページが表示できた。

gvis-docker-mariadb11

データも読めてる。

gvis-docker-mariadb11

django管理サイトも即ログインできた。

gvis-docker-mariadb11

認証情報維持できているし、リハーサルどおりや。

djangoアプリケーションの動作確認

django側のsettings.pyは、ローカルlinux用とgcp用があってどっちも内容確定した。

ついでにdjangoコンテナにdocker execしてpip3でdjango本体のパッケージ新しくしとく。

pip3 list -o | tail -n +3 | awk '{ print $1 }' | xargs pip3 install --upgrade
pip3 freeze > requirements.txt

gitlabにその変更箇所をコミットして世代を1つ進める。
mainブランチにマージしてgit cloneできるようにしといた。

gvis-docker-mariadb11

さてdocker-composeでdjangoのコンテナ再起動。

下のほうに10.11.2って数字が見える。
ちゃんと新しいほうのデータベース見てくれてるわけね。

gvis-docker-mariadb11

7年分の数字がlocal-linuxと同じことを確認。

gvis-docker-mariadb11

おー、見事に数字あってた。
ローカルlinuxでも数字あわせしたから、ここでは合計だけ見といた。

タイトルとURLをコピーしました