首页 > 数据库 >Docker系列---【mysql容器手动停止后,重启服务器,mysql容器被删掉了,如何恢复mysql数据?】

Docker系列---【mysql容器手动停止后,重启服务器,mysql容器被删掉了,如何恢复mysql数据?】

时间:2023-10-24 18:23:19浏览次数:41  
标签:容器 -- --- 大小写 mysql 服务器 docker

mysql容器手动停止后,重启服务器,mysql容器被删掉了,如何恢复mysql数据?

1.问题描述

为了快速搭建数据库,我使用了docker搭建数据库,由于服务器资源紧张,我想先把mysql容器停掉,启动jenkins容器,使用完之后再停掉jenkins,启动mysql,结果由于服务器资源有限,服务器卡死了,无法远程连接了,没办法,我只能登录运营商的云平台管理平台,强制重启服务器。结果发现,重启之后,我的mysql容器没有了,使用docker ps -a查看不到了,我瞬间慌了。我当时暗自祈祷,希望volume没有被删掉,我就还有机会。于是,我开始了下面的尝试。

2.分析

2.1找到mysql容器的启动命令

grep "docker run" ~/.bash_history

搜索结果:
docker run -itd --name mysql8 -p 3307:3306 -e MYSQL_ROOT_PASSWORD=root1234! mysql:8.0.25 --lower_case_table_names=1
执行完之后,发现当时没有配置-v映射。这就尴尬了,继续往下走。

2.2执行上面的命令重新启动一个mysql容器,查找默认卷挂载位置

#用原来的命令先启动一个mysql容器
docker run -itd --name mysql8 -p 3307:3306 -e MYSQL_ROOT_PASSWORD=root1234! mysql:8.0.25 --lower_case_table_names=1

#查看卷挂载的默认目录,拿到一串数字的上一级目录就行
docker inspect -f '{{ .Mounts }}' mysql8
#这里我们拿到的是`/var/lib/docker/volumes`

2.3在上一步拿到的卷挂载目录里寻找到原来mysql的挂载卷

#根据mysql查
find /var/lib/docker/volumes/ -name mysql
#推荐:根据binlog.index查(核心命令)
find /var/lib/docker/volumes/ -name binlog.index
#这里如果有多个,可以用`du -sh *`来根据大小推断哪个是你的mysql数据目录
#这里我只找到一个`/var/lib/docker/volumes/d95076020423ab2b10122e4e930c1f961116dc10c374527c33325a44a91da325/_data/binlog.index`
我们进入`/var/lib/docker/volumes/d95076020423ab2b10122e4e930c1f961116dc10c374527c33325a44a91da325/_data/`目录,目录结构如下图

下面这个就是mysql的data目录,只要这个在,数据就不会丢。

2.4 创建新的数据卷,挂载到这个data目录

注意:也可以直接在启动的时候-v挂载数据目录,但是目录太长了,建议建个新的数据卷.

docker volume create --driver local --opt type=none --opt device=/var/lib/docker/volumes/9c23ed8a8fe178af50d42546be2cbded238f29e0139acf7433245830201d3df7/_data --opt o=bind new_mysql_data

2.5 启动新的mysql容器,挂载数据目录

 docker run -itd --name mysql8 -p 3307:3306 -e MYSQL_ROOT_PASSWORD=root1234! -v new_mysql_data:/var/lib/mysql  mysql:8.0.25 --restart always --lower_case_table_names=1

注意:
在服务器重启后,Docker容器的重新启动行为将依赖于容器的--restart选项设置。以下是各种情况的重新启动行为:

  • no:容器不会自动重新启动,即使服务器重启也不会。
  • always:容器将在服务器重启后自动重新启动,确保容器保持运行状态。
  • on-failure:容器只会在非正常退出时重新启动,这意味着容器不会在服务器重启后自动重新启动,除非它之前是因为错误而退出的。
  • unless-stopped:容器将在服务器重启后自动重新启动,除非您显式停止容器。
    如果您希望在服务器重启后容器自动重新启动,可以选择使用--restart always或--restart unless-stopped选项,具体取决于您的需求。

注意:
--lower_case_table_names参数是用于配置MySQL数据库服务器的一个选项,用来控制数据库表名的大小写敏感性。这个选项有三个不同的取值,分别是0、1和2,它们的作用如下:

  • --lower_case_table_names=0:这是默认值。在这种模式下,表名是区分大小写的。这意味着MyTable和mytable被视为不同的表。
  • --lower_case_table_names=1:在这种模式下,表名被存储为小写,并且对表名的比较是不区分大小写的。这意味着MyTable和mytable被视为相同的表。
  • --lower_case_table_names=2:在这种模式下,表名被存储为小写,并且对表名的比较是不区分大小写的。与模式1相似,不同之处在于这个模式还会将文件系统中的表名转换为小写,这对于操作系统文件名的大小写敏感性有关。这个选项通常在非大小写敏感的文件系统上使用。
    使用--lower_case_table_names参数通常取决于您的特定需求和环境。如果您需要在表名区分大小写,可以保持默认值(0)。如果您希望表名不区分大小写,可以使用1或2,具体取决于您是否需要文件系统上的大小写敏感性。

标签:容器,--,---,大小写,mysql,服务器,docker
From: https://www.cnblogs.com/hujunwei/p/17785452.html

相关文章

  • 正确配置bootstrap解决NN-SVG无法正常使用
    最近在学习深度学习相关内容,正好在找能绘制模型图的工具,看到很多人都推荐NN-SVG,就去尝试了一下,结果并没法正常使用,页面打开后变成了这样: 按下F12会发现报错: 这是由于网页使用了bootstrap,但是国内的网络远程引用时出错,所以导致页面内容没有完全加载,因此也就没法正常使用了。......
  • mysql 备份文件.xbstream 恢复
    数据库备份文件的恢复1.可通过xtrabackup工具恢复,官方下载地址:https://www.percona.com/downloads/XtraBackup/LATEST/选择对应版本安装注意:要选择和数据库版本对应的工具2.全量恢复#全备文件:full_backup.xbstream#恢复mysql数据文件目录:/rds/mysql#恢复全备xbstream......
  • spring源码解析---spring-core(一)
    https://github.com/seaswalkerhttps://github.com/seaswalker/Spring使用版本spring4.2.2或者4.1.1基本本部分从最基本的Spring开始。配置文件:<?xmlversion="1.0"encoding......
  • docker-compose 外部配置部署 java 项目原创
    有的项目写完,需要打包到不同的环境。所以配置一个外部yml配置文件会方便很多,不用重新打包。文件目录构造├──app├──application.yml├──app.jar├──Dockerfile├──mysql├──nginxdocker-compose.ymlw.sh复制DockerfileFROMjava:8#VO......
  • docker上安装mysql
    docker上安装mysql1、拉取镜像dockerpullmysql:5.7.26 2、运行容器dockerrun--namemysql-p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456-dmysql:5.7.262.1 查看mysql容器:dockerps|grepmysql2.2进入容器:dockerexec-itmysql/bin/bash ......
  • mysql磁盘选择
    物理服务器:塔式工作站机架式——放在机柜上   1U  2U     4.4厘米内存:ECC纠错内存(建议2-3倍cpu核心数量)主板:不关心硬盘:SATA-III、SATA、SAS、GT-BT、Fc、SSD(sata)、pci-essd(第二好)、Flash(性能最好,但是寿命短,价格贵)电源:双电源(型号一样,热插拔,断掉一路电......
  • Compose动画原理-我的一点小思考
    思想Compose的动画系统是基于值系统的动画,和传统的基于回调的动画不同,Compose的动画api通常对外暴露一个可观察的随时间改变的状态,进而驱动重组或者重绘,从而达成动画的效果基本使用可见性动画使用AnimatedVisibility,内容尺寸动画用animateContentSize,根据不同的状态展示不同的Com......
  • Mybatis源码解读-初始化过程详解
    在使用Mybatis时,我们通常将其配置在Spring容器中,当Spring启动的时候会自动加载Mybatis的所有配置文件然后生成注入到Spring中的Bean,本文从实用的角度进行Mybatis源码解读,会关注以下一些方面:Mybatis都有哪些配置文件和配置项Mybatis初始化的源码流程;Mybatis初始化后,产生了哪些对象;My......
  • pip 升级总是报错,显示什么utf-8之类的,一招解决
    想升级pip或者安装其它一些安装包的时候,pip总是报错,但是显示安装包其实已经下载完成了,就是安装的过程报错了,怎么也不行,删了pip再装还是一样,报错的界面大致如下: 不知道怎么解决,我还专门找到相应的文件,对编码方式进行修改,也不行,最后发现其实把Lib\site-packages\路径下的pip-xx.x......
  • 鸿蒙极速入门(一)-HarmonyOS简介
    1、华为官网介绍2、OpenHarmony开源项目3、技术架构内核层内核子系统:采用多内核(Linux内核或者LiteOS)设计,支持针对不同资源受限设备选用适合的OS内核驱动子系统:驱动框架(HDF)是系统硬件生态开放的基础,提供统一外设访问能力和驱动开发、管理框架。系统服务层系统服务层是Ope......