Dockerでmariadbバージョンアップ(詳細編1-mariadb10.11のコンテナを作る)

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

local-linuxでmariadb10.11のコンテナを作る

docker-composeからビルドと起動できるようにする。

設定ファイルの準備とdocker-compose.ymlの追記

設定ファイルや置き場を用意しながら、mariadb10と11を共存させる。

最近知ったけど、redhat8のアプリケーション管理にはストリームってのがあって、同じアプリでも違うバージョンを共存させられない。

昔はポート番号変えて新旧データベースを共存させられたような気がする。

dockerありがたや。

mariadb本体の設定ファイルの用意

docker単体なら一発起動でええけど、docker-composeでオーケストレーションしてるから、永続化領域にmariadbの設定ファイルとか置いて準備してく。
まずは永続化領域に設定ファイル置き場の作成。

sv_mariadbconfには設定ファイル以外にも、コンテナ内でバックアップとリストアを動かすためのスクリプトが入ってる秘伝のタレみたいなもん。

cd nariDockerDat
cp -pR sv_mariadbconf sv_mariadb11conf

djangoからモデル経由でテーブルを扱うとき、pdfとjpegをblob列に保管してる。

設定で必要なのは、この保管ができるようにmax_allowed_packetを書いとく必要がある。

phpで使ってた頃からほぼ内容そのまま。
さっきコピーした内容でそのまま使えるはず。

[mysqld]
max_allowed_packet=1024M
log_warnings=1
query_cache_size=640M
query_cache_type=1
query_cache_limit=1280M
innodb_buffer_pool_size=5120M
innodb_log_file_size=128M
read_buffer_size=320M
log-error=/var/log/mariadb.log
slow_query_log
slow_query_log_file=/var/log/mariadb_slow.log
long_query_time=30

innodb_data_file_path=ibdata1:1G
innodb_file_per_table=ON

[mysqldump]
max_allowed_packet=1024M

データ置き場と環境変数の用意

dockerで動かすときにはdocker-entrypoint.shとかhealthcheck.shが必要。

まずは置き場作成。

mkdir sv_mariadb11
cd sv_mariadb11
mkdir sv_mariadb/data

前はタグ名書いてイメージファイルを取ってきたのが、githubへのリンクが入ってた。

Docker

今はgithub見て使えってことね。

https://github.com/MariaDB/mariadb-docker/blob/29e2cbb9b2339627497fb3247942bd802ec81191/10.11/Dockerfile

3つファイルがあって、2つはそのまま使える。

healthcheck.sh
docker-entrypoint.sh

Dockerfileは普通にaptから始まってて、なんじゃこりゃっていう記述もある。

全部意味がわかるわけじゃないけど、そのまま使ってみるとエラーになった。
あ、ログ捨ててた・・・。

実行権なしのエラーが出てそのままでは使えなかったから書き足した。名前を変更してvi sv_mariadb11_Dockerfilechmod +xを書き足した。

COPY healthcheck.sh /usr/local/bin/healthcheck.sh
COPY docker-entrypoint.sh /usr/local/bin/

RUN chmod +x /usr/local/bin/docker-entrypoint.sh

あとは環境変数のファイル(自分のはenv_sv_mariadb11.txt)を書いておけば、rootのパスワード設定、create databaseして一般ユーザ作成とパスワードも設定してくれる。

### MaridDB ###
MARIADB_ROOT_PASSWORD=xxxxxxxxxx
MARIADB_DATABASE=nariDB_1st
MARIADB_USER=nari
MARIADB_PASSWORD=xxxxxxxxxx
TZ=Asia/Tokyo

テスト用のデータベースは後で作る。

docker-compose.ymlの追記

10.5.7の記述をベースにして10.11の分を書き足す。
構築のストーリーを考えて設定ファイルを用意して、書いておいたら楽に作れる。

  sv_mariadb:
    image: mariadb:10.5.7
    hostname: svmariadb
    ports:
      - "3306:3306"
    env_file:
      - ./nariDockerDat/env_sv_mariadb.txt
    volumes:
      - ./nariDockerDat/sv_mariadb:/var/lib/mysql
      - ./nariDockerDat/sv_mariadbconf:/etc/mysql/conf.d

  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で起動

まずは単体でdocker-compose up sv_mariadb1011ってやって起動。

いっつも最初の3行目で「Error」って出るけど無視。
なんでかわからん。

nari@nafslinux-ubu22:/docker$ docker-compose up sv_mariadb1011
[+] Running 0/1
? sv_mariadb1011 Error                                                              2.2s
[+] Building 1.4s (15/15) FINISHED
=> [internal] load build definition from sv_mariadb11_Dockerfile                    0.0s
=> => transferring dockerfile: 6.59kB                                               0.0s
=> [internal] load .dockerignore                                                    0.0s
=> => transferring context: 2B                                                      0.0s
=> [internal] load metadata for docker.io/library/ubuntu:jammy                      1.3s
=> [auth] library/ubuntu:pull token for registry-1.docker.io                        0.0s
=> [1/9] FROM docker.io/library/ubuntu:jammy@sha256:2adf22367284330af9f832ffefb717  0.0s
=> [internal] load build context                                                    0.0s
=> => transferring context: 77B                                                     0.0s
=> CACHED [2/9] RUN groupadd -r mysql && useradd -r -g mysql mysql                  0.0s
=> CACHED [3/9] RUN set -eux;  apt-get update;  DEBIAN_FRONTEND=noninteractive apt  0.0s
=> CACHED [4/9] RUN mkdir /docker-entrypoint-initdb.d                               0.0s
=> CACHED [5/9] RUN set -e; echo "deb http://archive.mariadb.org/mariadb-10.11.2/r  0.0s
=> CACHED [6/9] RUN set -ex;  {   echo "mariadb-server" mysql-server/root_password  0.0s
=> CACHED [7/9] COPY healthcheck.sh /usr/local/bin/healthcheck.sh                   0.0s
=> CACHED [8/9] COPY docker-entrypoint.sh /usr/local/bin/                           0.0s
=> CACHED [9/9] RUN chmod +x /usr/local/bin/docker-entrypoint.sh                    0.0s
=> exporting to image                                                               0.0s
=> => exporting layers                                                              0.0s
=> => writing image sha256:6ecdf17c5041e08d5bd29833072958d02079243e8531655712fcd11  0.0s
=> => naming to docker.io/library/mariadb:1011                                      0.0s
[+] Running 1/0
? Container docker-sv_mariadb1011-1  Created                                        0.1s
Attaching to docker-sv_mariadb1011-1
docker-sv_mariadb1011-1  | 2023-03-11 06:40:39+09:00 [Note] [Entrypoint]: Entrypoint script for MariaDB Server 1:10.11.2+maria~ubu2204 started.
docker-sv_mariadb1011-1  | 2023-03-11 06:40:39+09:00 [Note] [Entrypoint]: Switching to dedicated user 'mysql'
docker-sv_mariadb1011-1  | 2023-03-11 06:40:39+09:00 [Note] [Entrypoint]: Entrypoint script for MariaDB Server 1:10.11.2+maria~ubu2204 started.
docker-sv_mariadb1011-1  | 2023-03-11 06:40:39+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-11 06:40:40+09:00 [Note] [Entrypoint]: Database files initialized
docker-sv_mariadb1011-1  | 2023-03-11 06:40:40+09:00 [Note] [Entrypoint]: Starting temporary server
docker-sv_mariadb1011-1  | 2023-03-11 06:40:40+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-11  6:40:40 0 [Note] Starting MariaDB 10.11.2-MariaDB-1:10.11.2+maria~ubu2204-log source revision cafba8761af55ae16cc69c9b53a341340a845b36 as process 97
docker-sv_mariadb1011-1  | 2023-03-11  6:40:40 0 [Note] InnoDB: Compressed tables use zlib 1.2.11
docker-sv_mariadb1011-1  | 2023-03-11  6:40:40 0 [Note] InnoDB: Number of transaction pools: 1
docker-sv_mariadb1011-1  | 2023-03-11  6:40:40 0 [Note] InnoDB: Using crc32 + pclmulqdq instructions
docker-sv_mariadb1011-1  | 2023-03-11  6:40:40 0 [Note] mariadbd: O_TMPFILE is not supported on /tmp (disabling future attempts)
docker-sv_mariadb1011-1  | 2023-03-11  6:40:40 0 [Note] InnoDB: Using liburing
docker-sv_mariadb1011-1  | 2023-03-11  6:40:40 0 [Note] InnoDB: Initializing buffer pool, total size = 5.000GiB, chunk size = 80.000MiB
docker-sv_mariadb1011-1  | 2023-03-11  6:40:40 0 [Note] InnoDB: Completed initialization of buffer pool
docker-sv_mariadb1011-1  | 2023-03-11  6:40:40 0 [Note] InnoDB: File system buffers for log disabled (block size=512 bytes)
docker-sv_mariadb1011-1  | 2023-03-11  6:40:40 0 [Note] InnoDB: 128 rollback segments are active.
docker-sv_mariadb1011-1  | 2023-03-11  6:40:40 0 [Note] InnoDB: Setting file './ibtmp1' size to 12.000MiB. Physically writing the file full; Please wait ...
docker-sv_mariadb1011-1  | 2023-03-11  6:40:40 0 [Note] InnoDB: File './ibtmp1' size is now 12.000MiB.
docker-sv_mariadb1011-1  | 2023-03-11  6:40:40 0 [Note] InnoDB: log sequence number 45596; transaction id 14
docker-sv_mariadb1011-1  | 2023-03-11  6:40:40 0 [Note] Plugin 'FEEDBACK' is disabled.
docker-sv_mariadb1011-1  | 2023-03-11  6:40:40 0 [ERROR] mariadbd: File '/var/log/mariadb_slow.log' not found (Errcode: 13 "Permission denied")
docker-sv_mariadb1011-1  | 2023-03-11  6:40:40 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-11  6:40:40 0 [Warning] 'user' entry 'root@svmariadb1011' ignored in --skip-name-resolve mode.
docker-sv_mariadb1011-1  | 2023-03-11  6:40:40 0 [Warning] 'proxies_priv' entry '@% root@svmariadb1011' ignored in --skip-name-resolve mode.
docker-sv_mariadb1011-1  | 2023-03-11  6:40:40 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-11 06:40:41+09:00 [Note] [Entrypoint]: Temporary server started.
docker-sv_mariadb1011-1  | 2023-03-11 06:40:42+09:00 [Note] [Entrypoint]: Creating database nariDB_1st
docker-sv_mariadb1011-1  | 2023-03-11 06:40:42+09:00 [Note] [Entrypoint]: Creating user nari
docker-sv_mariadb1011-1  | 2023-03-11 06:40:42+09:00 [Note] [Entrypoint]: Giving user nari access to schema nariDB_1st
docker-sv_mariadb1011-1  | 2023-03-11 06:40:42+09:00 [Note] [Entrypoint]: Securing system users (equivalent to running mysql_secure_installation)
docker-sv_mariadb1011-1  |
docker-sv_mariadb1011-1  | 2023-03-11 06:40:42+09:00 [Note] [Entrypoint]: Stopping temporary server
docker-sv_mariadb1011-1  | 2023-03-11  6:40:42 0 [Note] mariadbd (initiated by: unknown): Normal shutdown
docker-sv_mariadb1011-1  | 2023-03-11  6:40:42 0 [Note] InnoDB: FTS optimize thread exiting.
docker-sv_mariadb1011-1  | 2023-03-11  6:40:42 0 [Note] InnoDB: Starting shutdown...
docker-sv_mariadb1011-1  | 2023-03-11  6:40:42 0 [Note] InnoDB: Dumping buffer pool(s) to /var/lib/mysql/ib_buffer_pool
docker-sv_mariadb1011-1  | 2023-03-11  6:40:42 0 [Note] InnoDB: Buffer pool(s) dump completed at 230311  6:40:42
docker-sv_mariadb1011-1  | 2023-03-11  6:40:42 0 [Note] InnoDB: Removed temporary tablespace data file: "./ibtmp1"
docker-sv_mariadb1011-1  | 2023-03-11  6:40:42 0 [Note] InnoDB: Shutdown completed; log sequence number 46846; transaction id 15
docker-sv_mariadb1011-1  | 2023-03-11  6:40:42 0 [Note] mariadbd: Shutdown complete
docker-sv_mariadb1011-1  |
docker-sv_mariadb1011-1  | 2023-03-11 06:40:42+09:00 [Note] [Entrypoint]: Temporary server stopped
docker-sv_mariadb1011-1  |
docker-sv_mariadb1011-1  | 2023-03-11 06:40:42+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-11  6:40:42 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-11  6:40:42 0 [Note] InnoDB: Compressed tables use zlib 1.2.11
docker-sv_mariadb1011-1  | 2023-03-11  6:40:42 0 [Note] InnoDB: Number of transaction pools: 1
docker-sv_mariadb1011-1  | 2023-03-11  6:40:42 0 [Note] InnoDB: Using crc32 + pclmulqdq instructions
docker-sv_mariadb1011-1  | 2023-03-11  6:40:42 0 [Note] mariadbd: O_TMPFILE is not supported on /tmp (disabling future attempts)
docker-sv_mariadb1011-1  | 2023-03-11  6:40:42 0 [Note] InnoDB: Using liburing
docker-sv_mariadb1011-1  | 2023-03-11  6:40:42 0 [Note] InnoDB: Initializing buffer pool, total size = 5.000GiB, chunk size = 80.000MiB
docker-sv_mariadb1011-1  | 2023-03-11  6:40:43 0 [Note] InnoDB: Completed initialization of buffer pool
docker-sv_mariadb1011-1  | 2023-03-11  6:40:43 0 [Note] InnoDB: File system buffers for log disabled (block size=512 bytes)
docker-sv_mariadb1011-1  | 2023-03-11  6:40:43 0 [Note] InnoDB: 128 rollback segments are active.
docker-sv_mariadb1011-1  | 2023-03-11  6:40:43 0 [Note] InnoDB: Setting file './ibtmp1' size to 12.000MiB. Physically writing the file full; Please wait ...
docker-sv_mariadb1011-1  | 2023-03-11  6:40:43 0 [Note] InnoDB: File './ibtmp1' size is now 12.000MiB.
docker-sv_mariadb1011-1  | 2023-03-11  6:40:43 0 [Note] InnoDB: log sequence number 46846; transaction id 14
docker-sv_mariadb1011-1  | 2023-03-11  6:40:43 0 [Note] Plugin 'FEEDBACK' is disabled.
docker-sv_mariadb1011-1  | 2023-03-11  6:40:43 0 [Note] InnoDB: Loading buffer pool(s) from /var/lib/mysql/ib_buffer_pool
docker-sv_mariadb1011-1  | 2023-03-11  6:40:43 0 [ERROR] mariadbd: File '/var/log/mariadb_slow.log' not found (Errcode: 13 "Permission denied")
docker-sv_mariadb1011-1  | 2023-03-11  6:40:43 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-11  6:40:43 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-11  6:40:43 0 [Note] InnoDB: Buffer pool(s) load completed at 230311  6:40:43
docker-sv_mariadb1011-1  | 2023-03-11  6:40:43 0 [Note] Server socket created on IP: '0.0.0.0'.
docker-sv_mariadb1011-1  | 2023-03-11  6:40:43 0 [Note] Server socket created on IP: '::'.
docker-sv_mariadb1011-1  | 2023-03-11  6:40:43 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

データベース作ってくれてるところとか含めてちゃんと10.11が起動してるのが見える。

mariadb.logmariadb_slow.logがあらへんでってログに出てるから作っとく。

slow.logのほうは、sqlの実行に時間がかかりすぎているものがあったときにログ出力してもらうために昔設定した。

10.11ではもう使わんのかもしれんけど、まぁ作っとこ。
touchしてchownして、実行プロセスから書き込めるようにしとく。

docker exec -it docker-sv_mariadb1011-1 bash
cd /var/log
touch mariadb.log
touch mariadb_slow.log
chown mysql:adm mariadb.log
chown mysql:adm mariadb_slow.log
<p data-line="293" class="sync-line" style="margin:0;"></p>

a5sqlからの接続と設定確認

local-linuxと同じ環境にwindowsホストあって、そこでa5sqlが動かせる。
作者さん本当にありがとう。
業務でもプライベートでの勉強でもたいへんお世話になってます。

さぁつないでみる。

gvis-docker-mariadb11

設定ファイルに書いといたrootパスワードでちゃんとつながる。
もちろん一般ユーザ作成とパスワードも設定したから、それもOKやった。
以後、一般ユーザで作業開始。

max_allowed_packetが設定できてるか

mariadbの設定できてるか確認。
まぁ、代表で1つだけ確認。

show variables like 'max_allowed_packet' ;
gvis-docker-mariadb11

おお、できてるやん!!
数字大きいけど、linuxで割り算してみるとちゃんと設定値になってる。

$ expr 1073741824 \/ 1024 \/ 1024
1024
$

ちゃんと起動できてそうやからコンテナ停止して、全コンテナを起動停止してみる。

OS再起動してちゃんとdockerコンテナ起動できるか

OS再起動やってみて、動かしたときの状態を確認してみた。
まだデータ流し込んでへんから10.5みたいにメモリ利用がギガバイトとか行かず。
そんなもんやろな。

CONTAINER ID   NAME                       CPU %     MEM USAGE / LIMIT     MEM %     NET I/O           BLOCK I/O         PIDS
f2e33178380c   docker-sv_mariadb1011-1    0.05%     202.4MiB / 19.51GiB   1.01%     19.7kB / 0B       47.6MB / 20.5kB   9
273c6892b62e   docker-cl_red9-1           0.04%     80.38MiB / 19.51GiB   0.40%     17.7kB / 2.33kB   52.8MB / 34.9MB   15
3c6bdd6634f6   docker-cl_ubu22-1          0.00%     10.43MiB / 19.51GiB   0.05%     13.5kB / 0B       20.8MB / 28.7kB   2
d31718d81aa9   docker-cl_red8-1           0.06%     90.81MiB / 19.51GiB   0.45%     17kB / 2.3kB      51.6MB / 35.4MB   12
4fb021b38fcf   svldap-admin               0.04%     49.45MiB / 19.51GiB   0.25%     15.9kB / 0B       51.3MB / 254kB    139
85eb8c870d18   docker-sv_https-portal-1   0.00%     17.96MiB / 19.51GiB   0.09%     17.5kB / 0B       20.6MB / 180kB    14
216fb2fa939a   svldap-server              0.00%     20.79MiB / 19.51GiB   0.10%     21.4kB / 7.24kB   26.7MB / 115kB    4
f1ab77ea1fcd   docker-sv_jupyter-1        0.00%     98.25MiB / 19.51GiB   0.49%     42.9kB / 21.7kB   60.8MB / 36.9kB   1
a1207001c3c1   docker-sv_django-1         0.06%     71.59MiB / 19.51GiB   0.36%     17.5MB / 8.22kB   45.1MB / 16.4kB   11
4a104c3c6ece   docker-sv_mariadb-1        0.08%     1.734GiB / 19.51GiB   8.89%     31.1kB / 17.5MB   1.75GB / 2.16MB   17
タイトルとURLをコピーしました