Nachdem ich gestern das NAS neu gestartet habe, stellte ich fest, dass das NAS heute Morgen erneut abgestürzt ist. Sie können nur das Herunterfahren und einen Neustart erzwingen.
Bevor ich den Docker-Container startete, habe ich den Speicher des MySQL-Containers auf 512 MB angepasst. Dann stellte ich tragischerweise fest, dass es nicht gestartet werden konnte. Später stellte ich fest, dass der Startfehler nicht daran lag, dass ich den Speicher angepasst hatte.
Sehen Sie sich das Protokoll an, die Anzeige sieht wie folgt aus:
2020-12-27T02:43:53.375776Z 0 mysqld: [Warnung] Die von der Welt beschreibbare Konfigurationsdatei „/etc/mysql/my.cnf“ wird ignoriert.
2020 -12-27T02 :43:53.375776Z 0 mysqld: Fehler bei realpath() auf '/var/lib/mysql-files' (Fehler 2 – Keine solche Datei oder kein solches Verzeichnis)
2020-12-27T02:43:53.375776Z 0 [FEHLER] [ MY-010095] [Server] Fehler beim Zugriff auf das Verzeichnis für --secure-file-priv. Stellen Sie sicher, dass das Verzeichnis existiert und für den MySQL-Server zugänglich ist: /var/lib/mysql-files
2020 -12-27T02 :43:53.376005Z 0 [FEHLER] [MY-010119] [Server] Abbruch
Baidu, die Lösung besteht darin, einen MySQL-Container erneut auszuführen und -v /mnt/md0 zum vorherigen hinzuzufügen Konfiguration /User/wzp/home/www/mysql-files:/var/lib/mysql-files/
. -v /mnt/md0/User/wzp/home/www/mysql-files:/var/lib/mysql-files/
。
现在问题来了,之前run mysql容器时,我并没有记录下完整的run 命令。还好,通过rekcod工具可以查看。更喜的是,这个工具可以通过docker来运行。因为我的NAS的系统不是发行版的linux,npm,yum好多工具都没法安装。
关于rekcod的使用可以参考linuxea:如何复现查看docker run参数命令
简单来说,用法如下:
1 docker 安装rekcod
$ docker pull nexdrew/rekcod $ alias rekcod="docker run --rm -v /var/run/docker.sock:/var/run/docker.sock nexdrew/rekcod"
2 使用方法:
[root@TNAS-012664 ~]# rekcod mysql ==>mysql是我的容器名 docker run --name mysql --runtime runc -v /mnt/md0/User/wzp/home/www/mysql/:/var/lib/mysql -p 3306:3306/tcp --net bridge --restart no -h 39964e9e508a --expose 3306/tcp --expose 33060/tcp -e 'MYSQL_ROOT_PASSWORD=123456' -e 'PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin' -e 'GOSU_VERSION=1.12' -e 'MYSQL_MAJOR=5.7' -e 'MYSQL_VERSION=5.7.30-1debian10' -d -t -i --entrypoint "docker-entrypoint.sh" mysql 'mysqld'
可以看到我的数据库文件都是放在/mnt/md0/User/wzp/home/www/mysql/
目录下,我查看了下该目录文件,数据应该是没有丢失的。
于是,我新建了mysql2 容器,命令如下docker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 --name mysql2 -v /mnt/md0/User/wzp/home/www/mysql/:/var/lib/mysql -v /mnt/md0/User/wzp/home/www/mysql-files:/var/lib/mysql-files/ mysql
然后,进入mysql2,发现没法连接数据库docker exec -it mysql2 /bin/bash
查看mysql 状态
root@0e83698acbfb:/# mysqld status mysqld: [Warning] World-writable config file '/etc/mysql/conf.d/docker.cnf' is ignored. mysqld: [Warning] World-writable config file '/etc/mysql/conf.d/mysql.cnf' is ignored. 2020-12-27T02:39:41.865252Z 0 [Warning] [MY-011070] [Server] 'Disabling symbolic links using --skip-symbolic-links (or equivalent) is the default. Consider not using this option as it' is deprecated and will be removed in a future release. 2020-12-27T02:39:41.865455Z 0 [System] [MY-010116] [Server] /usr/sbin/mysqld (mysqld 8.0.20) starting as process 105 2020-12-27T02:39:41.871715Z 0 [ERROR] [MY-010123] [Server] Fatal error: Please read "Security" section of the manual to find out how to run mysqld as root! 2020-12-27T02:39:41.872541Z 0 [ERROR] [MY-010119] [Server] Aborting 2020-12-27T02:39:41.872776Z 0 [System] [MY-010910] [Server] /usr/sbin/mysqld: Shutdown complete (mysqld 8.0.20) MySQL Community Server - GPL. root@0e83698acbfb:/# Fatal error: Please read "Security" section of the manual to find out how to run mysqld as root!^C
用以下方法以root方式启动mysqld
root@0e83698acbfb:/# mysqld --user=root mysqld: [Warning] World-writable config file '/etc/mysql/conf.d/docker.cnf' is ignored. mysqld: [Warning] World-writable config file '/etc/mysql/conf.d/mysql.cnf' is ignored. 2020-12-27T02:40:57.169719Z 0 [Warning] [MY-011070] [Server] 'Disabling symbolic links using --skip-symbolic-links (or equivalent) is the default. Consider not using this option as it' is deprecated and will be removed in a future release. 2020-12-27T02:40:57.169896Z 0 [System] [MY-010116] [Server] /usr/sbin/mysqld (mysqld 8.0.20) starting as process 116 2020-12-27T02:40:57.184807Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started. 2020-12-27T02:40:57.241048Z 1 [ERROR] [MY-012574] [InnoDB] Unable to lock ./ibdata1 error: 11 2020-12-27T02:40:58.241783Z 1 [ERROR] [MY-012574] [InnoDB] Unable to lock ./ibdata1 error: 11 2020-12-27T02:40:59.242983Z 1 [ERROR] [MY-012574] [InnoDB] Unable to lock ./ibdata1 error: 11 2020-12-27T02:41:00.244290Z 1 [ERROR] [MY-012574] [InnoDB] Unable to lock ./ibdata1 error: 11 2020-12-27T02:41:01.245762Z 1 [ERROR] [MY-012574] [InnoDB] Unable to lock ./ibdata1 error: 11 2020-12-27T02:41:02.247539Z 1 [ERROR] [MY-012574] [InnoDB] Unable to lock ./ibdata1 error: 11
屏幕一直打印Unable to lock ./ibdata1 error: 11,只能CTRL-C强制中断。百度了下,有两个方式来解决该问题
1 参考mysql之 [ERROR] InnoDB: Unable to lock ./ibdata1, error: 11
该文章分析,导致该error主要是以下两个原因,很可惜,文章中的方法并不能解决我的问题。
- 磁盘空间目录不足
- ibdata1 文件被其他的进程占用
2 参考mysqld报InnoDB: Unable to lock ./ibdata1 error: 11这篇文章完美解决了我的问题。主要进行了以下操作。
2.1 首先,进入我的mysql数据库所在目录cd /mnt/md0/User/wzp/home/www/mysql
1 Docker installiert rekcod
[root@TNAS-012664 www]# cd /mnt/md0/User/wzp/home/www/mysql/ [root@TNAS-012664 mysql]# ls auto.cnf binlog.index client-key.pem dci '#ib_16384_0.dblwr' ib_logfile0 mautic nianbao performance_schema robot shangbiao undo_001 zeng baike ca-key.pem company_works dianzicaipiao '#ib_16384_1.dblwr' ib_logfile1 mysql niuwan private_key.pem sara_wiki sjzt_ry6 undo_002 bigdatapaltfrom ca.pem copyrightdata gs_data ib_buffer_pool '#innodb_temp' mysql.ibd pachong public_key.pem server-cert.pem sys wenshu binlog.000001 client-cert.pem db_huayun hy_dci_admin ibdata1 integrate mysql_upgrade_info pachong2 qianliu_wiki server-key.pem ucenter_huayunyy yuanqixiaoshuo [root@TNAS-012664 mysql]# mv ibdata1 ibdata1.bak [root@TNAS-012664 mysql]# mv ib_logfile0 ib_logfile0.bak [root@TNAS-012664 mysql]# mv ib_logfile1 ib_logfile1.bak [root@TNAS-012664 mysql]# cp -a ibdata1.bak ibdata1 [root@TNAS-012664 mysql]# cp -a ib_logfile0.bak ib_logfile0 [root@TNAS-012664 mysql]# cp -a ib_logfile1.bak ib_logfile1
2 Verwendung:
[root@TNAS-012664 ~]# docker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 --name mysql2 -v /mnt/md0/User/wzp/home/www/mysql/:/var/lib/mysql -v /mnt/md0/User/wzp/home/www/mysql-files:/var/lib/mysql-files/ mysql 1e031247ea46e82f6205db68e7fb1b55389c87e5e2cb13517f9e1ac17d514509 [root@TNAS-012664 ~]# docker exec -it mysql2 /bin/bash root@1e031247ea46:/# mysql -uroot -p mysql: [Warning] World-writable config file '/etc/mysql/my.cnf' is ignored. Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 8 Server version: 8.0.20 MySQL Community Server - GPL Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> show databases;
Sie können meine Datenbankdatei sehen. Sie sind alle im Verzeichnis /mnt/md0/User/wzp/home/www/mysql/
abgelegt. Ich habe die Verzeichnisdateien überprüft und die Daten sollten nicht verloren gehen.
Also habe ich einen neuen MySQL2-Container erstellt, der Befehl lautet wie folgt
docker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 --name mysql2 -v /mnt/md0/User/wzp/home /www/mysql //:/var/lib/mysql -v /mnt/md0/User/wzp/home/www/mysql-files:/var/lib/mysql-files/ mysql
Dann geben Sie ein mysql2 und stellen Sie fest, dass es keine Anleitung zum Herstellen einer Verbindung zur Datenbank gibt.