Rumah  >  Artikel  >  pangkalan data  >  Menganalisis isu yang berkaitan dengan pemulihan kegagalan permulaan kontena Mysql

Menganalisis isu yang berkaitan dengan pemulihan kegagalan permulaan kontena Mysql

藏色散人
藏色散人ke hadapan
2021-09-13 16:45:463840semak imbas

Selepas memulakan semula NAS semalam, saya mendapati NAS ranap semula pagi ini. Anda hanya boleh menutup paksa dan mulakan semula.
Sebelum memulakan bekas docker, saya melaraskan memori bekas mysql kepada 512M. Kemudian, secara tragis, saya mendapati bahawa ia tidak boleh dimulakan. Kemudian saya mendapat tahu bahawa kegagalan untuk memulakan bukan disebabkan saya menyesuaikan ingatan.

Lihat log, paparan adalah seperti berikut:

2020-12-27T02:43:53.375776Z 0 mysqld: [Amaran] Fail konfigurasi boleh tulis dunia '/etc/mysql/my .cnf' diabaikan.
2020-12-27T02:43:53.375776Z 0 mysqld: Ralat pada realpath() pada '/var/lib/mysql-files' (Ralat 2 - Tiada fail atau direktori sedemikian)
2020-12 -27T02:43:53.375776Z 0 [ERROR] [MY-010095] [Server] Gagal mengakses direktori untuk --secure-file-priv. Sila pastikan direktori itu wujud dan boleh diakses oleh Pelayan MySQL value : /var /lib/mysql-files
2020-12-27T02:43:53.376005Z 0 [ERROR] [MY-010119] [Server] Menggugurkan

Baidu, penyelesaiannya ialah dengan semula jalankan bekas mysql , dan tambah -v /mnt/md0/User/wzp/home/www/mysql-files:/var/lib/mysql-files/ pada konfigurasi sebelumnya.

Sekarang inilah masalahnya Apabila saya menjalankan bekas mysql sebelum ini, saya tidak merekodkan arahan run yang lengkap. Nasib baik, anda boleh melihatnya melalui alat rekcod. Apa yang lebih baik ialah alat ini boleh dijalankan melalui docker. Oleh kerana sistem NAS saya bukan pengedaran Linux, banyak alat seperti npm dan yum tidak boleh dipasang.

Untuk maklumat tentang penggunaan rekcod, sila rujuk linuxea: Bagaimana untuk menghasilkan semula arahan untuk melihat parameter docker run

Ringkasnya, penggunaannya adalah seperti berikut:

1 docker install rekcod

$ docker pull nexdrew/rekcod
$ alias rekcod="docker run --rm -v /var/run/docker.sock:/var/run/docker.sock nexdrew/rekcod"

2 Cara menggunakan:

[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'

Anda boleh melihat bahawa fail pangkalan data saya diletakkan dalam direktori /mnt/md0/User/wzp/home/www/mysql/ Saya telah menyemak fail direktori dan data tidak boleh hilang.

Jadi, saya mencipta bekas mysql2 baharu dengan arahan berikut:
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

Kemudian, saya memasuki mysql2 dan mendapati saya tidak dapat menyambung ke pangkalan data
docker exec -it mysql2 /bin/bash

Semak status 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

Gunakan kaedah berikut untuk memulakan mysqld dalam mod akar

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

Skrin terus mencetak Tidak dapat mengunci ./ibdata1 ralat : 11, dan hanya boleh dipaksa untuk mengganggu oleh CTRL-C. Selepas mencari di Baidu, terdapat dua cara untuk menyelesaikan masalah ini

1 Rujuk mysql [ERROR] InnoDB: Unable to lock ./ibdata1, error: 11
Analisis artikel ini menunjukkan bahawa ralat adalah terutamanya disebabkan oleh dua sebab berikut Malangnya, kaedah dalam artikel tidak dapat menyelesaikan masalah saya.

  1. Direktori ruang cakera tidak mencukupi
  2. Fail ibdata1 diduduki oleh proses lain

2 Rujuk laporan mysqld InnoDB: Tidak dapat untuk mengunci ralat ./ibdata1: 11Artikel ini menyelesaikan masalah saya dengan sempurna. Operasi berikut dilakukan terutamanya.

2.1 Mula-mula, masukkan direktori tempat pangkalan data mysql saya berada
cd /mnt/md0/User/wzp/home/www/mysql

2.2 Kemudian namakan semula ibdata1 dan fail lain, dan kemudian cp mereka kembali. Saya tidak begitu faham mengapa sebenarnya ini dilakukan.

[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 Kemudian saya memadamkan bekas mysql2 sebelumnya, menjalankan bekas mysql2 sekali lagi dengan arahan berikut, dan mendapati bahawa saya boleh menyambung ke pangkalan data 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;

Fikirkan semuanya akan baik-baik saja setelah bekas mysql siap? Tidak, terlalu naif. Terdapat satu lagi episod menanti saya. Saya baru sahaja menyelesaikan bekas mysql di sini, dan tiba-tiba saya mendapati bekas wiki saya hilang tanpa sebab. Nasib baik, fail pangkalan data ada dan semuanya boleh dipulihkan seperti sebelumnya.

1 Gunakan arahan berikut untuk mencipta dua wiki baharu

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 Kemudian salin fail LocalSettings.php yang disandarkan dan imej logo ke dalam bekas, dan anda selesai.

PS, jika anda mengedit bekas keadaan berhenti dalam antara muka gui docker, seperti menetapkan had memori, bekas baharu dengan nama yang sama sebenarnya akan dibuat. Kerana saya mendapati bahawa selepas saya melakukan ini, saya telah digesa untuk memasang semula apabila saya mengakses wiki saya.

PS sekali lagi, mysql backup mesti diletakkan dalam agenda segera. Had memori mysql tidak boleh dihadkan oleh bekas sahaja, my.cnf juga mesti diubah sewajarnya.

Pembelajaran yang disyorkan: "tutorial video mysql"

Atas ialah kandungan terperinci Menganalisis isu yang berkaitan dengan pemulihan kegagalan permulaan kontena Mysql. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:segmentfault.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam