Dockerでmariadbバージョンアップ(詳細編5-google driveからlocal-linuxへ永続化領域をコピーして利用)

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

google driveからlocal-linuxへ永続化領域をコピーして利用

google driveにあるDocker.zipの中からmariadbの永続化領域だけを展開して、mariadb10.11に使わせる。

google driveからlocal-linuxへのコピーは自動じゃなく手動。
サイズとか日付とか、ダウンロードの様子見ながらやりたいから。

gvis-docker-mariadb11

gcpで入れたのをcyberduckでダウンロード。

さて、ここからlocal-linuxの永続化領域へコピーし、データベース上の開発領域nariDB_Djangoを上書きする。

手動でダウンロードしたもの

置き場は決まってる。

$ ll
合計 8.7G
drwxrwxr-x  2 nari nari 4.0K 2023-01-04 06:46:13 ./
drwxrwxr-x 14 nari nari 4.0K 2022-11-21 05:55:07 ../
-rwxr--r--  1 nari nari 3.2G 2023-03-18 08:24:07 Docker.zip*
-rwxr--r--  1 nari nari  21M 2023-03-18 08:18:32 gvis_conf.zip*
-rwxr--r--  1 nari nari 1.4M 2023-03-18 08:18:32 log.zip*
-rwxr--r--  1 nari nari 5.5G 2023-03-18 08:28:35 nariDocs.zip*
-rwxr--r--  1 nari nari  15M 2023-03-18 08:18:33 script.zip*
nari@nafslinux-ubu22:/nari/nariHTTP/configBackup/
$

unzipして必要なものだけを切り出す

windows環境からlocal-linuxの操作やってるので、デスクトップにショートカット作ってバッチ処理経由で展開処理を動かしてる。

バッチ処理はこんな感じ。
fasctopyも長らく使わせてもらってる。
作者さんありがとう。

rem -----------------------------------------------------------------------------

rem -----------環境作成のためのディレクトリパス
SET FASTCOPY="Y:_tools\FastCopy\fastcopy.exe"
SET FSCP_LOG="Y:_log\gvis-MariaDB-fastcopy.log"

set TTPMAC="C:\Program Files (x86)\teraterm\ttpmacro.exe"
set LCL_macro=Y:_connect\connect\VM

SET From="S:\nariHTTP\configBackup_gcp-gvis-dkLinux\Docker.zip"
SET CopyTo="M:\nariDockerDat\_tmp\"

SET GV_EXCLUDE="System Volume Information\ ; $RECYCLE.BIN\ ;._.DS_Store; .DS_Store;._* ; lost+found\ ; nariDockerVol\ .recycle\"

pause
del /F /Q %FSCP_LOG%

%FASTCOPY% /cmd=sync /estimate /verify /force_start /force_close /log /logfile=%FSCP_LOG% /bufsize=64 /exclude=%GV_EXCLUDE% %From%  /to=%CopyTo%


rem -----------Extract DB backup ------------------------------
%TTPMAC% %LCL_macro%\_118_naFSLinux-ExtDB-SSH.ttl

pause

exit

ログ置き場とか、コピー対象をSET文で書いておいてzipファイルを作業領域にコピーしたら、teratermのマクロを使ってunzipしてdockerで使えるようにする処理を呼び出す。

コピー処理の余談

unixにはrsyncがあるように、windowsにはrobocopy/xcopyがある。
robocopyはwindows2008の頃に登場したんやったかな。

xcopyは昔からあるけど、ドライブレターなしのsmb共有に対して行き詰まったことがあるので使わない。

robocopyはwindows2000の頃にはなかったから、fastcopyを見つけて使い始めた。後で出てきたのを知ったけど、イマイチ使いにくいので使うのやめた。

GUIで動くしdry runみたいなこともできるんやけど、コマンドラインでも使うことができて、除外リストとか扱える便利なソフトウェア。転送レートも見せてくれる。

動かすとこんな感じ。

=================================================
FastCopy(ver4.2.2) start at 2023/03/27 06:00:09
<Source>  S:\nariHTTP\configBackup_gcp-gvis-dkLinux\Docker.zip
<DestDir> M:\nariDockerDat\_tmp\
<Exclude> System Volume Information\ ; $RECYCLE.BIN\ ;._.DS_Store; .DS_Store;._* ; lost+found\ ; nariDockerVol\ .recycle\
<Command> 同期(サイズ・日付) (with Verify)
-------------------------------------------------

TotalRead  = 3,231 MiB
TotalWrite = 3,231 MiB
TotalFiles = 1 (0)
TotalTime  = 38.9 sec
TransRate  = 87.2 MB/s
FileRate   = 0.03 files/s
VerifyRead = 3,231 MiB
VerifyFiles= 1

Result : (ErrFiles : 0 / ErrDirs : 0) at 2023/03/27 06:00:48

コピーの速度は87MB/sぐらい出てる。

usb3の外付けディスク領域から、ssdへのzipファイルコピーやしね。
前はusb1でdocker用にssdも使えてなかったから、めっちゃ時間かかってた。

dockerで使えるようにする処理

windowsのバッチ処理でteratermのマクロ呼び出してる。
マクロを使う理由は、手動でやったことを自動運転的にやらせたいから。
この処理案外コケない。

include 'Y:_connect\connect\teraIni\gvis.ini'

; --- 接続 --------------
 conSTR = 'naFSlinux.intra.gavann-it.com /ssh /2 /auth=password /user=nari /passwd='
 strconcat conSTR gvis_nari
 strconcat conSTR ' /F='
 strconcat conSTR gvis_iPTH
 strconcat conSTR 'yellow151x42.INI '
 strconcat conSTR '/timeout='
 strconcat conSTR gvis_TOUT

 connect conSTR
 if result <> 2 goto end


; --- rootになる --------------
wait gvis_wS1
sendln "su - "

wait gvis_wS3
sendln gvis_MAIN


; --- mariaDBのコンテナを停止 --------------
wait gvis_wS2
sendln "cd /docker"

wait gvis_wS2
sendln "docker-compose stop sv_mariadb1011"

; --- ワークフォルダへ移動 --------------
wait gvis_wS2
sendln "cd /docker/nariDockerDat/_tmp"


; --- unzipしてtar展開 --------------
conSTR = "unzip -P "
strconcat conSTR gvis_psw2
strconcat conSTR ' Docker.zip '
wait gvis_wS2
sendln conSTR

conSTR = "tar xzf Docker.tar.gz ./Docker/nariDockerDat/sv_mariadb11"
wait gvis_wS2
sendln conSTR

wait gvis_wS2
sendln "cd /docker/nariDockerDat/_tmp"

wait gvis_wS2
sendln "rm -f Docker.zip Docker.tar.gz"

; --- コンテナ利用の永続領域を置き換え --------------
wait gvis_wS2
sendln "cd /docker/nariDockerDat"

wait gvis_wS2
sendln "rm -fR sv_mariadb11"

wait gvis_wS2
sendln "mv /docker/nariDockerDat/_tmp/Docker/nariDockerDat/sv_mariadb11 ./"

wait gvis_wS2
sendln "chown -R nari:nari /docker/nariDockerDat/sv_mariadb11"

wait gvis_wS2
sendln "rm -fR /docker/nariDockerDat/_tmp/Docker"

; --- コンテナ起動 --------------
wait gvis_wS2
sendln "docker-compose up -d sv_mariadb1011"

; --- mariaDBにDjango用領域を流し込み --------------
wait gvis_wS2
sendln "cd /docker"

wait gvis_wS2
sendln "/bin/sh /docker/djangoDB11restore.sh"

処理の流れはコメント通り。mariadbの永続化領域にはコンテナ内でのユーザが作るデータがあって、rootでないと処理できない箇所があるから、面倒なのでrootになって処理させてる。

最初にiniファイルをインクルードさせてて、コマンドラインで文字を入力させるための待機文字列とかが書いてある。

gvis_iPTH = 'Y:\_connect\\connect\\teraIni\\'
gvis_wS1  = '$'
gvis_wS2  = '#'
gvis_wS3  = 'パスワード:'
gvis_wS4  = 'nari$'
gvis_wS5  = 'Password:'
gvis_wS6  = 'C:\Users\nari>'
gvis_ws7  = '%'
:(中略)

動かすとこんな感じ。
mariadb10.11のコンテナ停止し、永続化領域をunzipしてtarも展開して、必要な箇所だけ置き換えてからdjangoDB11restore.shを呼び出してnariDB_Djangoの開発用領域をリストアしてる。

Welcome to Ubuntu 22.04.2 LTS (GNU/Linux 5.19.0-35-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/advantage

 * Introducing Expanded Security Maintenance for Applications.
   Receive updates to over 25,000 software packages with your
   Ubuntu Pro subscription. Free for personal use.

     https://ubuntu.com/pro

Expanded Security Maintenance for Applications is not enabled.

0のアップデートはすぐに適用されます。

Enable ESM Apps to receive additional future security updates.
See https://ubuntu.com/esm or run: sudo pro status

You have new mail.
Last login: Mon Mar 27 05:14:54 2023 from 172.16.17.13
nari@nafslinux-ubu22:~$ su -
パスワード:
root@nafslinux-ubu22:~# cd /docker
root@nafslinux-ubu22:/docker# docker-compose stop sv_mariadb1011
[+] Running 1/1
 ? Container docker-sv_mariadb1011-1  Stopped                                                                                                    0.6s
root@nafslinux-ubu22:/docker# cd /docker/nariDockerDat/_tmp
root@nafslinux-ubu22:/docker/nariDockerDat/_tmp# unzip -P xxxxxxxxxx Docker.zip
Archive:  Docker.zip
  inflating: Docker.tar.gz
root@nafslinux-ubu22:/docker/nariDockerDat/_tmp# tar xzf Docker.tar.gz ./Docker/nariDockerDat/sv_mariadb11
root@nafslinux-ubu22:/docker/nariDockerDat/_tmp# cd /docker/nariDockerDat/_tmp
root@nafslinux-ubu22:/docker/nariDockerDat/_tmp# rm -f Docker.zip Docker.tar.gz
root@nafslinux-ubu22:/docker/nariDockerDat/_tmp# cd /docker/nariDockerDat
root@nafslinux-ubu22:/docker/nariDockerDat# rm -fR sv_mariadb11
root@nafslinux-ubu22:/docker/nariDockerDat# mv /docker/nariDockerDat/_tmp/Docker/nariDockerDat/sv_mariadb11 ./
root@nafslinux-ubu22:/docker/nariDockerDat# chown -R nari:nari /docker/nariDockerDat/sv_mariadb11
root@nafslinux-ubu22:/docker/nariDockerDat# rm -fR /docker/nariDockerDat/_tmp/Docker
root@nafslinux-ubu22:/docker/nariDockerDat# docker-compose up -d sv_mariadb1011
[+] Running 1/1
 ? Container docker-sv_mariadb1011-1  Started                                                                                                    0.8s
root@nafslinux-ubu22:/docker/nariDockerDat# cd /docker
root@nafslinux-ubu22:/docker# /bin/sh /docker/djangoDB11restore.sh
----fullRecover Start  ------ 2023-03-27_06:02:36_
----fullRecover Finished----- 2023-03-27_06:03:04_
root@nafslinux-ubu22:/docker#

はい、流し込み終わり。
クリックして5分ぐらいしたら、google cloudと同じデータベースが使えるようになった。

去年の暮れからやり方想像してて、mariadbのLTS出てくれてよかった。

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