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)が作られるが、コンテナーからでても消えない!
対応
- mysql のクライアントを準備して、下記のscriptをcronで回す。
- mysql container が落ちていないかの確認
- table retrek-ui の内容が更新されていれば、バックアップをする。
- 落ちていれば、mysql container を立ち上げる。
- 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