데이터 베이스 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 [ERROR] [ MY-010095] [서버] --secure-file-priv에 대한 디렉터리에 액세스하지 못했습니다. 디렉터리가 존재하고 MySQL 서버에서 액세스할 수 있는지 확인하세요. 제공되는 값: /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/. -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主要是以下两个原因,很可惜,文章中的方法并不能解决我的问题。

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

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

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

이제 문제가 발생합니다. 이전에 mysql 컨테이너를 실행할 때 전체 실행 명령을 기록하지 않았습니다. 다행히 rekcod 도구를 통해 볼 수 있습니다. 더 좋은 점은 이 도구가 docker를 통해 실행될 수 있다는 것입니다. 내 NAS 시스템은 Linux 배포판이 아니기 때문에 npm 및 yum과 같은 많은 도구를 설치할 수 없습니다.

rekcod 사용은 linuxea: docker run 매개변수를 보는 명령 재현 방법을 참조하세요.

간단히 사용법은 다음과 같습니다.

1 Docker install 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 사용 방법:

[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;
로그인 후 복사

내 데이터베이스 파일을 볼 수 있습니다. 모두 /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 상태를 확인하세요

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
로그인 후 복사

루트 모드에서 mysqld를 시작하려면 다음 방법을 사용하세요 rrreee🎜화면이 계속 인쇄됩니다. ./ibdata1 오류를 잠글 수 없습니다. 11. CTRL-C만 강제로 중단할 수 있습니다. 바이두에서 검색해본 결과, 이 문제를 해결하는 방법은 두 가지가 있습니다🎜🎜1 mysql [ERROR] InnoDB: Unable to lock ./ibdata1, error: 11 참조🎜이 글을 분석해 보면 오류의 원인은 주로 다음과 같습니다. 안타까운 두 가지 이유는 이 기사의 방법으로는 내 문제가 해결되지 않는다는 것입니다. 🎜🎜
  1. 디스크 공간이 부족한 디렉토리
  2. ibdata1 파일이 다른 프로세스에 의해 점유되고 있습니다.
🎜🎜2 mysqld 보고서 참조 InnoDB: Unable to lock ./ibdata1 오류: 11이 기사는 내 문제를 완벽하게 해결했습니다. 주로 다음과 같은 작업을 수행했습니다. 🎜🎜2.1 먼저 내 mysql 데이터베이스가 있는 디렉터리를 입력하세요. 🎜cd /mnt/md0/User/wzp/home/www/mysql🎜🎜2.2 그런 다음 ibdata1 및 기타 파일의 이름을 바꾼 다음 다시 보내주세요. 나는 이것이 정확히 왜 수행되는지 잘 이해하지 못합니다. 🎜rrreee🎜2.3 그러다가 이전 mysql2 컨테이너를 삭제하고 다음 명령어로 mysql2 컨테이너를 다시 실행해보니 mysql 데이터베이스에 접속이 되는 것을 발견했다. 🎜rrreee🎜🎜mysql 컨테이너가 준비되면 모든 것이 괜찮을 것이라고 생각하시나요? 아니, 너무 순진해요! 또 다른 에피소드가 기다리고 있어요. 여기서 방금 mysql 컨테이너를 해결했는데, 갑자기 내 위키 컨테이너가 아무 이유 없이 없어진 것을 발견했습니다. 다행히 데이터베이스 파일이 있고 모든 것이 이전처럼 복원될 수 있습니다. 🎜🎜1 다음 명령을 사용하여 두 개의 새로운 위키를 생성하세요🎜rrreee🎜2 그런 다음 백업된 LocalSettings.php 파일과 로고 이미지를 컨테이너에 복사하면 완료됩니다. 🎜🎜PS, 메모리 제한 설정과 같이 docker gui 인터페이스에서 중지 상태 컨테이너를 편집하면 실제로 동일한 이름의 새 컨테이너가 생성됩니다. 왜냐하면 이 작업을 수행한 후 내 위키에 액세스할 때 다시 설치하라는 메시지가 표시되었기 때문입니다. 🎜🎜PS 다시 말씀드리지만, mysql 백업은 즉시 의제에 포함되어야 합니다. Mysql 메모리 제한은 컨테이너만으로는 제한할 수 없으며 my.cnf도 그에 맞게 변경해야 합니다. 🎜🎜🎜추천 학습: "🎜mysql 비디오 튜토리얼🎜"🎜🎜

위 내용은 Mysql 컨테이너 시작 실패 복구 관련 문제 분석의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 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 Hentai를 무료로 생성하십시오.

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
4 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
4 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 아무도들을 수없는 경우 오디오를 수정하는 방법
4 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25 : Myrise에서 모든 것을 잠금 해제하는 방법
1 몇 달 전 By 尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

중국의 도커 이미지 소스를 변경하는 방법 중국의 도커 이미지 소스를 변경하는 방법 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 빌드 명령을 사용하여 터미널에 이미지를 빌드하십시오. Docker 태그 명령을 사용하여 이미지를 태그하고 이름과 태그를 지정하십시오.

Docker Desktop을 사용하는 방법 Docker Desktop을 사용하는 방법 Apr 15, 2025 am 11:45 AM

Docker Desktop을 사용하는 방법? Docker Desktop은 로컬 머신에서 Docker 컨테이너를 실행하는 도구입니다. 사용 단계는 다음과 같습니다. 1. Docker Desktop 설치; 2. Docker Desktop을 시작하십시오. 3. Docker 이미지를 만듭니다 (Dockerfile 사용); 4. Docker Image 빌드 (Docker 빌드 사용); 5. 도커 컨테이너를 실행하십시오 (Docker Run 사용).

Docker 명령을 실행하는 방법 Docker 명령을 실행하는 방법 Apr 15, 2025 am 11:24 AM

Docker 명령을 실행하는 방법? Docker를 설치하고 데몬을 시작하십시오. 공통 docker 명령 : 디스플레이 이미지 Docker PS : 디스플레이 컨테이너 Docker Run : 컨테이너 컨테이너 Docker 정지 : 컨테이너 중지 Docker RM : Docker exec : Docker Exec : Docker Exec : 실행 명령 Docker Logs 첨부 : Display Log Docker Commit : DICKER STOP DOCKER DACON : Sudo SystemCTL Docker 로그 : Sudo SystemCTL STOP DOCKER COMMIN

Docker의 개인 저장소 구축 방법 Docker의 개인 저장소 구축 방법 Apr 15, 2025 am 11:06 AM

Docker Private Repositories를 구축하여 컨테이너 이미지를 안전하게 저장하고 관리하여 엄격한 제어 및 보안을 제공 할 수 있습니다. 단계에는 리포지토리 생성, 액세스 부여, 저장소 배포, 이미지 밀기 및 이미지를 당기는 단계가 포함됩니다. 보안, 버전 제어, 네트워크 트래픽 감소 및 사용자 정의가 장점이 있습니다.

Docker LNMP에 전화하는 방법 Docker LNMP에 전화하는 방법 Apr 15, 2025 am 11:15 AM

Docker LNMP 컨테이너 호출 단계 : 컨테이너 실행 : Docker Run -D-- 이름 LNMP -Container -P 80:80 -P 443 : 443 LNMP -Stack 컨테이너 IP를 얻으려면 Docker LNMP -Container | grep iPaddress 액세스 웹 사이트 : http : // & lt; 컨테이너 ip & gt;/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 명령을 사용하여 지정된 컨테이너의 현재 상태가 포함 된 새 이미지를 만들 수 있습니다. 구문 : Docker Commit [옵션] 컨테이너 ID 이미지 이름. 이미지를 저장소에 저장하려면 Docker Push 명령 인 Syntax : Docker 푸시 이미지 이름 [: 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 Desktop GUI의 버전 탭 또는 Aff Docker Desktop 메뉴를 통해 버전 정보를 볼 수도 있습니다.

See all articles