如何正确备份和启动mysql的镜像

如何正确备份和启动mysql的镜像
RT

1.docker run -p 3316:3306 --name test22 -e MYSQL_ROOT_PASSWORD=toor -d mysql:5.7.30  可以正常启动

但是把这个正常启动的容器做成自定义的镜像(docker export container_id > xx.tar) 再(docker import xx.tar) 后,再按上面的命令无法正常启动自定义的镜像

只能这样启动 docker run -itd -p 3020:3306 --entrypoint /bin/bash 8a7e7255e6d5

这样启动后就容器起来后内部mysql服务无法正常启动

求大lao解惑

建议同步数据库+数据库文件离线备份

基于最新版ChatGPT4的回答,望采纳!!!有其他问题也可以询问我哦、”(最新版更智能,功能更加强大)

备份和启动 MySQL 的镜像可以使用 Docker 提供的命令和功能来实现。下面是备份和启动 MySQL 镜像的正确步骤:

备份 MySQL 镜像:

  1. 停止并删除正在运行的 MySQL 容器:docker stop <container_id>docker rm <container_id>
  2. 导出容器:docker export <container_id> > mysql.tar
  3. 使用 docker import 命令创建新的镜像:docker import mysql.tar mysql-image:tag

启动 MySQL 镜像:

  1. 运行 MySQL 容器:docker run -d --name mysql-container -p 3306:3306 -e MYSQL_ROOT_PASSWORD=<password> mysql-image:tag
  2. 确认容器是否正在运行:docker ps
  3. 进入容器:docker exec -it mysql-container bash
  4. 启动 MySQL 服务:service mysql start

注意:

  1. 在备份 MySQL 容器之前,请确保容器中的 MySQL 服务已经成功启动并且可以正常使用。
  2. 在创建新的镜像之前,需要将 MySQL 容器停止并删除,否则在导出容器时可能会出现一些问题。
  3. 在启动 MySQL 容器之前,必须先指定 MYSQL_ROOT_PASSWORD 环境变量以设置 root 用户的密码。
  4. 如果容器启动后 MySQL 服务无法正常启动,请检查容器的日志信息以确定原因。

参考GPT和自己的思路:

首先,通过docker export和docker import导出和导入容器镜像是不推荐的方法,因为这种方式不够灵活且容易出错。建议使用docker commit对运行中的容器进行镜像备份。

其次,在使用docker run启动mysql镜像时,你可以使用以下命令进行备份:

docker commit <container-id> <image-name>

这将创建一个新的镜像,其中包含运行中的容器的所有更改。然后,你可以使用以下命令启动新的镜像:

docker run -p 3316:3306 --name <container-name> -e MYSQL_ROOT_PASSWORD=<password> -d <image-name>

其中,为你指定的容器名称,为你的mysql root密码,为刚刚新创建的镜像名称。

如果一切顺利,你应该能够使用以上方法正确备份和启动mysql镜像。如果你遇到其他问题,请告诉我,我会尽力帮助你解决。

参考GPT和自己的思路:将一个已经运行的Docker容器导出为镜像,应该使用docker commit命令,而不是docker export和docker import命令。

备份Docker容器为镜像:

docker commit container_id my-mysql-image


启动MySQL容器:

docker run -p 3316:3306 --name my-mysql-container -e MYSQL_ROOT_PASSWORD=toor -d my-mysql-image


如果您在启动MySQL容器时遇到问题,可以查看容器的日志以获取有关发生了什么的更多信息:

docker logs my-mysql-container


您可以使用docker ps -a命令查看所有已停止和正在运行的容器列表,如果发现容器已经停止,可以使用docker start命令重新启动它:

docker start my-mysql-container


参考GPT和自己的思路,使用 docker export 和 docker import 命令来创建镜像不是一个好的方法。这种方法不能正确地将容器转换为镜像,因为 docker export 命令只会将容器快照为一个 tar 归档文件,其中仅仅包含容器的文件系统,而忽略了容器中运行的进程和其他元数据信息。

为了正确备份和启动 MySQL 的镜像,最好的方法是使用 docker commit 命令来创建一个新的镜像,并且停止容器后再进行备份。

1.创建容器并运行 MySQL:

docker run -p 3316:3306 --name test22 -e MYSQL_ROOT_PASSWORD=toor -d mysql:5.7.30

2.使用 docker exec 命令进入到容器内部,连接 MySQL 数据库:

docker exec -it test22 mysql -p

3.停止 MySQL 容器:

docker stop test22

4.使用 docker commit 命令创建新镜像:

docker commit test22 mysql-image

5.使用新创建的镜像运行新的容器:

docker run -p 3316:3306 --name mysql-container -e MYSQL_ROOT_PASSWORD=toor -d mysql-image:latest

这样,新的容器将会在 MySQL 容器的基础上创建,并且包含完整的 MySQL 数据库以及其他元数据信息。您只需要使用新的容器启动即可享受备份的好处。

确保在创建镜像前,将 MySQL 数据库中的所有数据提交到 docker volume 或主机的指定目录中。这将保证数据不会在容器重新创建时丢失,且可以使用这些数据启动新的容器。

以下答案由GPT-3.5大模型与博主波罗歌共同编写:
备份mysql镜像的正确方式:

  1. 停止mysql服务
docker stop <mysql_container_id>
  1. 导出数据卷
docker run --rm --volumes-from <mysql_container_id> -v $(pwd):/backup ubuntu tar cvf /backup/mysql_backup.tar /var/lib/mysql
  1. 停止和删除容器
docker rm -f <mysql_container_id>
  1. 导出镜像
docker save -o mysql_backup_image.tar mysql:5.7.30

启动mysql镜像的正确方式:

  1. 检查端口号,确保端口号没有被占用

  2. 运行镜像

docker run -p 3316:3306 --name test22 -e MYSQL_ROOT_PASSWORD=toor -d mysql:5.7.30

如果自定义镜像无法正常启动,可能是由于导出和导入镜像的方式不正确。

正确的备份和还原mysql镜像的方式是:

  1. 停止mysql容器
docker stop <mysql_container_id>
  1. 导出mysql容器
docker export <mysql_container_id> > mysql_export.tar
  1. 导入mysql容器
cat mysql_export.tar | docker import - mysql_backup
  1. 运行自定义的mysql镜像
docker run -p 3316:3306 --name test22 -e MYSQL_ROOT_PASSWORD=toor -d mysql_backup

请注意,在导入docker容器时,无需进行额外的操作,因为所有的数据、配置等都被打包在容器中了。
如果我的回答解决了您的问题,请采纳!

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^