Heim Datenbank MySQL-Tutorial Analysieren Sie Probleme im Zusammenhang mit der Wiederherstellung nach Startfehlern von MySQL-Containern

Analysieren Sie Probleme im Zusammenhang mit der Wiederherstellung nach Startfehlern von MySQL-Containern

Sep 13, 2021 pm 04:45 PM
docker nas

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"
Nach dem Login kopieren

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'
Nach dem Login kopieren

可以看到我的数据库文件都是放在/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
Nach dem Login kopieren

用以下方法以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
Nach dem Login kopieren

屏幕一直打印Unable to lock ./ibdata1 error: 11,只能CTRL-C强制中断。百度了下,有两个方式来解决该问题

1 参考mysql之 [ERROR] InnoDB: Unable to lock ./ibdata1, error: 11
该文章分析,导致该error主要是以下两个原因,很可惜,文章中的方法并不能解决我的问题。

  1. 磁盘空间目录不足
  2. ibdata1 文件被其他的进程占用

2 参考mysqld报InnoDB: Unable to lock ./ibdata1 error: 11这篇文章完美解决了我的问题。主要进行了以下操作。

2.1 首先,进入我的mysql数据库所在目录
cd /mnt/md0/User/wzp/home/www/mysql

Jetzt kommt das Problem, als ich den MySQL-Container zuvor ausgeführt habe, habe ich den vollständigen Ausführungsbefehl nicht aufgezeichnet. Glücklicherweise können Sie es über das Rekcod-Tool anzeigen. Noch besser ist, dass dieses Tool über Docker ausgeführt werden kann. Da es sich bei meinem NAS-System nicht um eine Linux-Distribution handelt, können viele Tools wie npm und yum nicht installiert werden.

Informationen zur Verwendung von rekcod finden Sie unter Linuxea: So reproduzieren Sie den Befehl zum Anzeigen der Docker-Laufparameter

Kurz gesagt ist die Verwendung wie folgt:

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
Nach dem Login kopieren

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;
Nach dem Login kopieren

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.
docker exec -it mysql2 /bin/bash

Überprüfen Sie den MySQL-Status.

docker run --name sarawiki --link mysql2:mysql -p 8086:80 -d sarawang85/mediawiki:1.0.0
docker run --name qianliuwiki --link mysql2:mysql -p 8083:80 -d sarawang85/mediawiki:1.0.0
Nach dem Login kopieren
rrreee
Der Bildschirm druckt weiterhin. Fehler „./ibdata1“ kann nicht gesperrt werden: 11. Nur STRG-C kann eine Unterbrechung erzwingen. Nach der Suche auf Baidu gibt es zwei Möglichkeiten, dieses Problem zu lösen🎜1 Siehe MySQL [FEHLER] InnoDB: Sperre ./ibdata1 nicht möglich, Fehler: 11🎜Die Analyse dieses Artikels zeigt, dass der Fehler hauptsächlich auf Folgendes zurückzuführen ist Aus zwei Gründen ist es schade, dass die Methode im Artikel mein Problem nicht löst. 🎜🎜
  1. Unzureichendes Speicherplatzverzeichnis
  2. Die Datei ibdata1 ist von anderen Prozessen belegt
🎜🎜2 Siehe mysqld-Bericht InnoDB: ./ibdata1 konnte nicht gesperrt werden Fehler: 11Dieser Artikel hat mein Problem perfekt gelöst. Die folgenden Operationen wurden hauptsächlich durchgeführt. 🎜🎜2.1 Geben Sie zuerst das Verzeichnis ein, in dem sich meine MySQL-Datenbank befindet. 🎜cd /mnt/md0/User/wzp/home/www/mysql🎜🎜2.2 Benennen Sie dann ibdata1 und andere Dateien um und dann cp sie zurück. Ich verstehe nicht ganz, warum genau das gemacht wird. 🎜rrreee🎜2.3 Dann habe ich den vorherigen MySQL2-Container gelöscht, mit dem folgenden Befehl erneut einen MySQL2-Container ausgeführt und festgestellt, dass ich eine Verbindung zur MySQL-Datenbank herstellen konnte. 🎜rrreee🎜🎜Denken Sie, dass alles gut wird, sobald der MySQL-Container fertig ist? Nein, zu naiv! Es wartet noch eine weitere Folge auf mich. Ich habe gerade den MySQL-Container hier gelöst und plötzlich festgestellt, dass mein Wiki-Container ohne Grund fehlte. Glücklicherweise sind die Datenbankdateien vorhanden und alles kann wie zuvor wiederhergestellt werden. 🎜🎜1 Verwenden Sie die folgenden Befehle, um zwei neue Wikis zu erstellen🎜rrreee🎜2 Kopieren Sie dann die gesicherte LocalSettings.php-Datei und das Logobild in den Container, und schon sind Sie fertig. 🎜🎜PS: Wenn Sie den Stop-State-Container in der Docker-GUI-Schnittstelle bearbeiten, z. B. das Speicherlimit festlegen, wird tatsächlich ein neuer Container mit demselben Namen erstellt. Weil ich festgestellt habe, dass ich, nachdem ich dies getan hatte, beim Zugriff auf mein Wiki zur Neuinstallation aufgefordert wurde. 🎜🎜PS nochmal, MySQL-Backup muss sofort auf die Tagesordnung gesetzt werden. Das MySQL-Speicherlimit kann nicht allein durch den Container begrenzt werden, auch my.cnf muss entsprechend geändert werden. 🎜🎜🎜Empfohlenes Lernen: „🎜MySQL-Video-Tutorial🎜“🎜🎜

Das obige ist der detaillierte Inhalt vonAnalysieren Sie Probleme im Zusammenhang mit der Wiederherstellung nach Startfehlern von MySQL-Containern. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Wie man alles in Myrise freischaltet
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

So ändern Sie die Docker -Bildquelle in China So ändern Sie die Docker -Bildquelle in China Apr 15, 2025 am 11:30 AM

Sie können zur Quelle der Inlandsspiegel wechseln. Die Schritte sind wie folgt: 1. Bearbeiten Sie die Konfigurationsdatei /etc/docker/daemon.json und fügen Sie die Spiegelquellenadresse hinzu; 2. Starten Sie den Docker Service Sudo SystemCtl Docker neu, um die Download -Geschwindigkeit und -stabilität des Bilddownloads zu verbessern.

So erstellen Sie einen Spiegel in Docker So erstellen Sie einen Spiegel in Docker Apr 15, 2025 am 11:27 AM

Schritte zum Erstellen eines Docker -Images: Schreiben Sie eine Dockerfile, die die Build -Anweisungen enthält. Erstellen Sie das Bild im Terminal mit dem Befehl Docker Build. Markieren Sie das Bild und weisen Sie Namen und Tags mit dem Befehl Docker Tag zu.

So verwenden Sie Docker Desktop So verwenden Sie Docker Desktop Apr 15, 2025 am 11:45 AM

Wie benutze ich Docker Desktop? Docker Desktop ist ein Werkzeug zum Ausführen von Docker -Containern auf lokalen Maschinen. Zu den zu verwendenden Schritten gehören: 1.. Docker Desktop installieren; 2. Start Docker Desktop; 3.. Erstellen Sie das Docker -Bild (mit Dockerfile); 4. Build Docker Image (mit Docker Build); 5. Docker -Container ausführen (mit Docker Run).

So erstellen Sie ein privates Repository von Docker So erstellen Sie ein privates Repository von Docker Apr 15, 2025 am 11:06 AM

Sie können Docker -private Repositorys erstellen, um Containerbilder sicher zu speichern und zu verwalten und strenge Kontrolle und Sicherheit bereitzustellen. Zu den Schritten gehören: Erstellen eines Repositorys, Gewährung von Zugriff, Bereitstellung eines Repositorys, Drückens eines Bildes und Ziehen eines Bildes. Zu den Vorteilen gehören Sicherheit, Versionskontrolle, reduzierter Netzwerkverkehr und Anpassung.

So rufen Sie Docker lnmp an So rufen Sie Docker lnmp an Apr 15, 2025 am 11:15 AM

Docker LNMP Container Anrufschritte: Führen Sie den Container aus: Docker Run -d --Name LNMP -Container -P 80:80 -P 443: 443 LNMP -Stack, um den Container IP zu erhalten: Docker Inspecy Lnmp -Container | GREP iPaddress Access Website: http: // & lt; Container IP & gt;/index.phpssh Access: Docker Exec -it lnmp -container Bash Access MySQL: Mysql -U Roo

So führen Sie den Befehl Docker aus So führen Sie den Befehl Docker aus Apr 15, 2025 am 11:24 AM

Wie reite ich Docker -Befehle aus? Installieren Sie Docker und starten Sie den Daemon. Common Docker -Befehle: Docker Bilder: Anzeige Bild Docker PS: Anzeige Container Docker Ausführen: Ausführen Container Docker Stopp: Stopp Container Docker RM: Löschen Sie Container Interagieren Sie mit Container mit Docker -Befehl: Dokker Exec: Execute -Befehl Dockker Anhang: Anhängen Konsole Docker Protokolls: Display LOCKER DOCKER Commit Wechsel zum Mirror Stop Dokker

So speichern Sie das Docker -Bild So speichern Sie das Docker -Bild Apr 15, 2025 am 11:54 AM

Um das Bild in Docker zu speichern, können Sie den Befehl docker comit verwenden, um ein neues Bild zu erstellen, das den aktuellen Status des angegebenen Containers Syntax: Docker Commit [Optionen] Container -ID -Bildname enthält. Um das Bild im Repository zu speichern, können Sie den Befehl Docker Push, Syntax: Docker -Push -Bildname [: Tag] verwenden. Um gespeicherte Bilder zu importieren, können Sie den Befehl Docker Pull, Syntax: Docker Pull Bildname [: Tag] verwenden.

So aktualisieren Sie das Bild von Docker So aktualisieren Sie das Bild von Docker Apr 15, 2025 pm 12:03 PM

Die Schritte zur Aktualisierung eines Docker -Images sind wie folgt: Ziehen Sie das neueste Bild -Tag. Neues Bild Löschen Sie das alte Bild für ein bestimmtes Tag (optional) den Container neu (falls erforderlich) neu starten Sie neu (falls erforderlich).

See all articles