首页 >

分析关于Mysql容器启动失败恢复的问题

数据库|mysql教程分析关于Mysql容器启动失败恢复的问题
nas,docker,container
数据库-mysql教程
连连看辅助源码,gdb调试vscode,erp仓库管理系统ubuntu,tomcat 无故挂掉,易语言 添加 sqlite,js插件打开pdf,前端mvc框架有哪,kava开源爬虫框架,php手机源码,中国seo资料站,仿商城网站,带歌词的网页音乐播放器,特效类网站模板,淘宝店铺商品详情页面模板html,c WEB权限管理系统源码,微信砍价商城小程序提现lzw

昨天重启完NAS后,今天早上发现NAS又死机了。只能再次强制关机,重启。
启动docker容器之前,我把mysql容器的内存调整了一下,调整成了512M。 然后就悲剧的发现启动不了了。后来发现,启动不了不是我调内存的关系。

虚拟币源码分享,ubuntu隐藏顶栏,如何将项目加入tomcat,吸血圆形小爬虫,php随机数安全问题,宣汉seo公司lzw
查看日志,显示如下:
快乐赚网站源码,vscode是开源的么,ubuntu smb 使用,配置tomcat虚拟路径,wow爬虫坐骑,php技术提升,四川seo优化网络,哪个网站卖源码最可靠,自适应模板手机端播放器太高lzw
百度了下,解决办法是重新run一个mysql容器,并且在之前的配置上加上-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 statusmysqld: [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 1052020-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] Aborting2020-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=rootmysqld: [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 1162020-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: 112020-12-27T02:40:58.241783Z 1 [ERROR] [MY-012574] [InnoDB] Unable to lock ./ibdata1 error: 112020-12-27T02:40:59.242983Z 1 [ERROR] [MY-012574] [InnoDB] Unable to lock ./ibdata1 error: 112020-12-27T02:41:00.244290Z 1 [ERROR] [MY-012574] [InnoDB] Unable to lock ./ibdata1 error: 112020-12-27T02:41:01.245762Z 1 [ERROR] [MY-012574] [InnoDB] Unable to lock ./ibdata1 error: 112020-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主要是以下两个原因,很可惜,文章中的方法并不能解决我的问题。

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

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

2.2 然后将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     mysqlniuwan     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   syswenshu 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 container,用下面的命令再次run一个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/    mysql1e031247ea46e82f6205db68e7fb1b55389c87e5e2cb13517f9e1ac17d514509[root@TNAS-012664 ~]# docker exec -it mysql2 /bin/bashroot@1e031247ea46:/# mysql -uroot -pmysql: [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 8Server version: 8.0.20 MySQL Community Server - GPLCopyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.Oracle is a registered trademark of Oracle Corporation and/or itsaffiliates. Other names may be trademarks of their respectiveowners.Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.mysql> show databases;

以为mysql容器好了就万事大吉了? No,too naive! 还有一个小插曲等着我呢。这边刚把mysql容器解决好,突然又发现我的wiki容器莫名其妙没了。不过好在,数据库文件在,一切还能恢复如初。

1 用以下的命令新建两个wiki

docker run --name sarawiki --link mysql2:mysql -p 8086:80 -d sarawang85/mediawiki:1.0.0docker run --name qianliuwiki --link mysql2:mysql -p 8083:80 -d sarawang85/mediawiki:1.0.0

2 然后把备份好的LocalSettings.php 文件和Logo图片copy 进容器,搞定。

PS,如果在docker gui界面编辑stop状态的容器,比如设置内存限制,实际是会新建一个同名的容器。因为我发现我这样做了后,访问我的wiki,又提示我重新安装。

再次PS,mysql 备份得立即提上日程。mysql 内存限制不能单单通过容器来限制,my.cnf也得做响应更改。

推荐学习:《mysql视频教学》


分析关于Mysql容器启动失败恢复的问题
  • 使用Container类实现ThinkPHP核心框架
  • 使用Container类实现ThinkPHP核心框架 | 使用Container类实现ThinkPHP核心框架 ...

    分析关于Mysql容器启动失败恢复的问题
  • laravel中的Facades和Ioc Container还有ServiceProvider 思路分析?
  • laravel中的Facades和Ioc Container还有ServiceProvider 思路分析? | laravel中的Facades和Ioc Container还有ServiceProvider 思路分析? ...

    分析关于Mysql容器启动失败恢复的问题
  • [李景山php]每天laravel-20160901|Dispatcher-1
  • [李景山php]每天laravel-20160901|Dispatcher-1 | [李景山php]每天laravel-20160901|Dispatcher-1 ...