ホームページ データベース mysql チュートリアル MySQL コンテナの起動障害の回復に関連する問題を分析する

MySQL コンテナの起動障害の回復に関連する問題を分析する

Sep 13, 2021 pm 04:45 PM
docker nas

昨日NASを再起動したところ、今朝またNASがクラッシュしていることがわかりました。強制的にシャットダウンして再起動することのみ可能です。
Docker コンテナを開始する前に、mysql コンテナのメモリを 512M に調整しました。その後、残念なことに、起動できないことがわかりました。後でわかったのですが、起動できなかったのは私がメモリを調整したせいではなかったのです。

ログを表示すると、次のように表示されます:

2020-12-27T02:43:53.375776Z 0 mysqld: [警告] 世界中で書き込み可能な設定ファイル '/etc/mysql/my .cnf' は無視されます。
2020-12-27T02:43:53.375776Z 0 mysqld: '/var/lib/mysql-files' の realpath() でエラーが発生しました (エラー 2 - そのようなファイルまたはディレクトリはありません)
2020-12 -27T02:43:53.375776Z 0 [エラー] [MY-010095] [サーバー] --secure-file-priv のディレクトリにアクセスできませんでした。ディレクトリが存在し、MySQL サーバーからアクセスできることを確認してください。 value : /var /lib/mysql-files
2020-12-27T02:43:53.376005Z 0 [ERROR] [MY-010119] [Server] Aborting

Baidu、解決策は再実行です。 mysql コンテナを実行し、 -v /mnt/md0/User/wzp/home/www/mysql-files:/var/lib/mysql-files/ を前の設定に追加します。

ここで問題が発生します。以前に mysql コンテナを実行したとき、完全な実行コマンドを記録しませんでした。幸いなことに、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
ログイン後にコピー

次の方法を使用して mysqld を root モードで起動します

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 でのみ強制的に中断できます。 Baidu で検索したところ、この問題を解決するには 2 つの方法があります。

1 mysql を参照してください [エラー] InnoDB: ./ibdata1 をロックできません、エラー: 11
この記事の分析によると、エラーは次のとおりです。主に次の 2 つの理由が考えられますが、残念ながら、この記事の方法では問題を解決できません。

  1. ディスク容量ディレクトリが不十分です
  2. ibdata1 ファイルが他のプロセスによって占有されています

2 mysqld レポートを参照してください InnoDB: 使用不可./ibdata1 をロックするエラー: 11この記事は私の問題を完全に解決しました。主に以下の操作を行いました。

2.1 まず、mysql データベースが存在するディレクトリを入力します。
cd /mnt/md0/User/wzp/home/www/mysql

2.2 次に、 change ibdata1 ファイルの名前を変更した後、再度 cp を戻します。なぜこれが正確に行われるのか、私にはよくわかりません。

[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.3 次に、以前の mysql2 コンテナを削除し、次のコマンドで mysql2 コンテナを再度実行すると、mysql データベースに接続できることがわかりました。

[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;
ログイン後にコピー

mysql コンテナの準備ができたら、すべてがうまくいくと思いますか?いや、世間知らずすぎます! またエピソードが待っています。ここで mysql コンテナを解決したところ、突然、理由もなく wiki コンテナが見つからないことに気づきました。幸いなことに、データベース ファイルはそこにあるので、すべてを以前のように復元できます。

1 次のコマンドを使用して 2 つの新しい Wiki を作成します

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
ログイン後にコピー

2 次に、バックアップした LocalSettings.php ファイルとロゴ画像をコンテナにコピーすれば完了です。

PS、メモリ制限の設定など、docker gui インターフェイスで停止状態コンテナーを編集すると、実際には同じ名前の新しいコンテナーが作成されます。これを実行した後、Wiki にアクセスすると再インストールを求められることが判明したためです。

追記、mysql バックアップは直ちに議題に載せる必要があります。 mysql のメモリ制限はコンテナだけでは制限できないため、それに応じて my.cnf も変更する必要があります。

推奨学習: 「mysql ビデオ チュートリアル

以上がMySQL コンテナの起動障害の回復に関連する問題を分析するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

中国のDocker画像ソースを変更する方法 中国のDocker画像ソースを変更する方法 Apr 15, 2025 am 11:30 AM

国内のミラーソースに切り替えることができます。手順は次のとおりです。1。構成ファイル/etc/docker/daemon.jsonを編集し、ミラーソースアドレスを追加します。 2。保存して終了した後、Docker Service Sudo SystemCtlを再起動してDockerを再起動して、画像のダウンロード速度と安定性を改善します。

Dockerでミラーを作成する方法 Dockerでミラーを作成する方法 Apr 15, 2025 am 11:27 AM

Docker画像を作成する手順:ビルド命令を含むDockerFileを書きます。 Docker Buildコマンドを使用して、ターミナルで画像を作成します。画像にタグを付け、Dockerタグコマンドを使用して名前とタグを割り当てます。

Dockerデスクトップの使用方法 Dockerデスクトップの使用方法 Apr 15, 2025 am 11:45 AM

Dockerデスクトップの使用方法は? Dockerデスクトップは、ローカルマシンでDockerコンテナを実行するためのツールです。使用する手順には次のものがあります。1。Dockerデスクトップをインストールします。 2。Dockerデスクトップを開始します。 3。Docker Imageを作成します(DockerFileを使用); 4. Docker画像をビルド(Docker Buildを使用); 5。Dockerコンテナを実行します(Docker Runを使用)。

Dockerコマンドの実行方法 Dockerコマンドの実行方法 Apr 15, 2025 am 11:24 AM

Dockerコマンドを実行する方法は? Dockerをインストールし、デーモンを起動します。一般的なDockerコマンド:Docker画像:表示画像の表示Docker PS:ディスプレイコンテナDocker run:run docker docker stop:Stop Container docker RM RM:Delete container container containerとcontainerとdocker exec:execute command docker adtach:adticle console docker logs:ディスプレイログドッカーのコミット:ミラー停止停止dock

Dockerによるプライベートリポジトリを構築する方法 Dockerによるプライベートリポジトリを構築する方法 Apr 15, 2025 am 11:06 AM

Dockerプライベートリポジトリを構築して、コンテナ画像を安全に保存および管理し、厳格な制御とセキュリティを提供できます。手順には、リポジトリの作成、アクセスの付与、リポジトリの展開、画像のプッシュ、および画像の引くなどがあります。利点には、セキュリティ、バージョン制御、ネットワークトラフィックの削減、カスタマイズが含まれます。

docker lnmpの呼び方 docker lnmpの呼び方 Apr 15, 2025 am 11:15 AM

Docker LNMPコンテナコールステップ:コンテナの実行:Docker Run -D - Name LNMP -Container -P 80:80 -P 443:443 LNMPスタックコンテナIPを取得する:Docker Inspect LNMP -Container | GREP iPaddress Access Webサイト:http://< container ip>/index.phpsshアクセス:docker exec -it lnmp -container bash access mysql:mysql -u roo

Docker画像を保存する方法 Docker画像を保存する方法 Apr 15, 2025 am 11:54 AM

Dockerに画像を保存するには、Docker Commitコマンドを使用して、指定されたコンテナの現在の状態、Syntax:Docker Commit [Options]コンテナID画像名を含む新しい画像を作成できます。画像をリポジトリに保存するには、Docker Pushコマンド、Syntax:Docker Push Image Name [:Tag]を使用できます。保存された画像をインポートするには、Docker Pullコマンド、Syntax:Docker Pull Image Name [:Tag]を使用できます。

Dockerバージョンを読む方法 Dockerバージョンを読む方法 Apr 15, 2025 am 11:51 AM

Dockerバージョンを取得するには、次の手順を実行できます。Dockerコマンド「Docker -version」を実行して、クライアントバージョンとサーバーバージョンを表示します。 MacまたはWindowsの場合は、DockerデスクトップGUIのバージョンタブまたはDockerデスクトップメニューのバージョン情報を表示することもできます。

See all articles