1.下载mysql镜像,此处用5.7版本
docker pull mysql:5.7
2.运行镜像,启动一个容器
docker run -it -d -p 3306:3306 -v /home/xxx/mysql:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root mysql:5.7
注意:此处需要将挂载路径设置好,此处设置的是本机的/home/xxx/mysql目录,挂载的容器中的目录必须为mysql程序的数据目录/var/lib/mysql 。这里首次运行需要设置mysql的root账号登录密码,此处设置为root
3.操作数据库,产生数据
--此处可以创建数据库,数据库表等等,操作,或者是生产环境运行了很长一段时间了,无所谓,让其产生数据就行
4.容器不小心被删除了,此时在docker容器中mysql的数据已经被删除,只剩下在容器外,本机创建的挂载目录下的备份数据了,备份数据位于我们当时运行mysql时指定的目录:/home/xxx/mysql
-----------------------------------------------------
现在开始恢复docker 挂载卷中mysql的数据
1.首先采用docker 创建一个挂载卷
docker volume create mysqlback
创建完成后,采用查看一下挂载卷的真实路径
docker inspect mysqlback
我本机执行如下:
[root@localhost XX]# docker inspect mysqlback
[
{
"CreatedAt": "2023-09-17T20:07:18+08:00",
"Driver": "local",
"Labels": null,
"Mountpoint": "/var/lib/docker/volumes/mysqlback/_data",
"Name": "mysqlback",
"Options": null,
"Scope": "local"
}
]
2.从新启动一个mysql容器,此时尽量采用与原来的镜像的的容器,否则容易出现无法恢复的问题
此时,我将该容器命名为backmysql
[root@localhost xx]# docker run --name="backmysql" -it -d -p 3307:3306 -v mysqlback:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root mysql:5.7
此时,请记住挂载路径需要设置为刚才创建的卷“mysqlback”,在容器中同样映射原来的数据路径、var/lib/mysql 。这里 我同样设置了初始密码为root
3.停止当前创建的mysql容器,然后删除本机的卷中的所有内容
停止:[root@localhost xx]# docker stop backmysql
删除映射卷内的所有内容:
首先查找卷的真实路径地址:[root@localhost xx]# docker inspect mysqlback
我 的路径地址为: "Mountpoint": "/var/lib/docker/volumes/mysqlback/_data",在
/var/lib/docker/volumes/mysqlback/_data这个目录下
进入这个目录:[root@localhost xx]# cd /var/lib/docker/volumes/mysqlback/_data
删除所有数据 :[root@localhost xx]# rm -rf *.*
4.拷贝原有数据库备份数据到新的卷映射路径
[root@localhost _data]# cp -r /home/xxx/mysql/* .
其中 /home/xxx/mysql/为我第一次运行的容器的卷映射路径
5.重新启动新创建的容器
[root@localhost _data]# docker start backmysql。
此时,已经完成数据库数据恢复。可以通过navicat进行查看数据了