概要編から参照されるための詳細編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へのリンクが入ってた。

今はgithub見て使えってことね。
3つファイルがあって、2つはそのまま使える。
healthcheck.sh
docker-entrypoint.sh
Dockerfileは普通にaptから始まってて、なんじゃこりゃっていう記述もある。
全部意味がわかるわけじゃないけど、そのまま使ってみるとエラーになった。
あ、ログ捨ててた・・・。
実行権なしのエラーが出てそのままでは使えなかったから書き足した。名前を変更してvi sv_mariadb11_Dockerfile
でchmod +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.log
とmariadb_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が動かせる。
作者さん本当にありがとう。
業務でもプライベートでの勉強でもたいへんお世話になってます。
さぁつないでみる。

設定ファイルに書いといたrootパスワードでちゃんとつながる。
もちろん一般ユーザ作成とパスワードも設定したから、それもOKやった。
以後、一般ユーザで作業開始。
max_allowed_packetが設定できてるか
mariadbの設定できてるか確認。
まぁ、代表で1つだけ確認。
show variables like 'max_allowed_packet' ;

おお、できてるやん!!
数字大きいけど、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