mySql に関して - kisapapa1227/retrek-ui_V2 GitHub Wiki

何故か、docker の再起動ではまった件

$sh InstallStep4.sh # コンテナーを止めて、イメージを削除のスクリプト
$service stop docker
$service stop docker.socket
$rm -rf /var/lib/docker
$service start docker
$sh InstallStep2.sh ;sh InstallStep3.sh
# mysql が起動しない。
$docker ps -a
CONTAINER ID   IMAGE                        COMMAND                  CREATED             STATUS                    PORTS                                                                                          NAMES                                                         retrek-ui_v2-phpmyadmin-1
198826c334ae   mysql/mysql-server:8.0       "/entrypoint.sh mysq…"   48 minutes ago      Up 2 minutes (healthy)    0.0.0.0:3306->3306/tcp, [::]:3306->3306/tcp, 33060-33061/tcp 
$docker start 198826c334ae
'''
とすると、logが
'''
mysql-1         | mysqld: File './binlog.~rec~' not found (OS errno 13 - Permission denied)
mysql-1         | 2025-06-04T04:40:21.438364Z 0 [ERROR] [MY-010846] [Server] MYSQL_BIN_LOG::open_purge_index_file failed to open register file.
mysql-1         | 2025-06-04T04:40:21.438398Z 0 [ERROR] [MY-010817] [Server] MYSQL_BIN_LOG::open_index_file failed to sync the index file.
mysql-1         | 2025-06-04T04:40:21.438409Z 0 [ERROR] [MY-010119] [Server] Aborting
mysql-1         | 2025-06-04T04:40:21.438645Z 0 [System] [MY-010910] [Server] /usr/sbin/mysqld: Shutdown complete (mysqld 8.0.32)  MySQL Community Server - GPL.
'''
$pwd
/var/lib/docker/volumes/retrek-ui_v2_sail-mysql
$chmod -R 777 _data/
でとりあえず、mysql は起動できるが、

wewb上では
SQLSTATE[HY000] [1049] Unknown database 'retrek_ui'
'''
docker exec -it 68830383240b bash
mysql -p <-- password
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| RECOVER_YOUR_DATA  |
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
5 rows in set (0.00 sec)
'''
ごちゃごちゃやって解決。
ちゃん行ってるときは、retrek-ui がある。

mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | retrek_ui | | sys | +--------------------+ 5 rows in set (0.01 sec)

mysql> exit Bye bash-4.4# exit exit ''' 一連の作業で、 rm mysql.sock.lock (/var/lib/docker/volumes/retrek-ui_v2_sail-mysql/_data)が作られるが、コンテナーからでても消えない!

対応

  1. mysql のクライアントを準備して、下記のscriptをcronで回す。
  2. mysql container が落ちていないかの確認
  3. table retrek-ui の内容が更新されていれば、バックアップをする。
  4. 落ちていれば、mysql container を立ち上げる。
  5. table retrek-ui が消えていれば、リストアする。
cat mySqlWatcher.sh
#!/bin/sh
#
#

ip=35.232.56.236
db=retrek_ui
sql=/tmp/mysql.sql
bak=/home/kisa/work/$db.db.bak
fno=/home/kisa/work/watch.log
tmp=/tmp/tmp

#
# restart mysql container, when down
#
r=$(docker ps -a | grep mysql | grep Exited)
if [ "$r" != "" ]; then # server down
        echo $(date) "mysql down; restart" >> $fno
        id=$(docker ps -a | grep mysql | awk '{print $1}')
        docker start $id
        sleep 60
fi
#
# restore the backupped database, when non-exist
#
echo "show databases;" > $sql
flag=$(mysql --host=$ip --port=3306 --user root --password=password <$sql | grep $db)
if [ "$flag" = "$db" ]; then # database exists
        mysqldump --host=$ip --port=3306 --user root --password=password $db > $tmp # dump it
#
        l=$(diff $tmp $bak | wc -l)
        if [ $l -gt 4 ]; then # database is changed
        i=1
        while [ -e $bak.$i ]; do
                i=$(expr $i + 1)
        done
        mv $bak $bak.$i;mv $tmp $bak
        echo $(date) "database modified: renew backup" >> $fno
        fi

else #        no database
        echo $(date) "no database: restore from backup" >> $fno
        echo "create database " $db ";" > $sql
        mysql --host=$ip --port=3306 --user root --password=password < $sql # make retrek_ui
        mysql --host=$ip --port=3306 --user root --password=password $db < $bak # restore backup
fi
#
w=$(who | grep -v 133.3.201.69 | grep -v tmux)
if [ "$w" != "" ]; then
        echo $w >> $fno
fi
        if [  $(cat $fno | wc -l) -gt 100 ]; then
                mv $fno ${fno}.prev
        fi