问下mysql的数据库数据如何从一个docker容器内移到另一个容器内?

情况是这样的,我有一个测试docker容器,里面安装了mysql,然后建几个数据库,
然后我需要把这容器导入正式环境,
然后我到正式环境的mysql 的 data目录下,我把原先的容器内的data目录下的文件复制到新的容器内。
情况是mysql显示了数据库,也显示了表
但是我select * from test;时候就显示表不存在?

《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 5
docker run --name mysql-container -e MYSQL_ROOT_PASSWORD=<password> -p 3306:3306 -v /path/on/host:/var/lib/mysql -d mysql

# -v 挂载目录,把宿主机目录挂载到 docker 容器中

docker cp <container_name>:<path_to_file_inside_container> <path_on_host>
# 复制容器内 data 数据到宿主主机, 之后再挂载到新的容器中

ps: 新旧mysql 建议用相同版本, 成功运行后, 再去升级版本,升级数据库文件, 记得备份数据文件,以免丢失

8个月前 评论

在测试环境将这些数据库导出 正式环境容器启动了之后再导出,感觉这样操作比较好

8个月前 评论

可能有以下几个原因:

  1. 数据库版本不兼容:确保测试容器和正式环境使用相同版本的 MySQL。如果版本不一致,可能会导致数据文件结构不兼容,从而无法正确加载表。

  2. 数据复制不完整或错误:检查复制过程是否正确并且没有出现错误。确保在将测试容器的数据目录复制到正式环境时,所有文件和子目录都被完整地复制过来。

  3. 数据目录权限问题:确认新容器的数据目录权限已正确设置为 MySQL 用户,如上一条回答中所述。如果权限不正确,MySQL 可能无法读取并加载表。

  4. 数据库配置问题:检查 MySQL 的配置文件(通常是my.cnfmy.ini),确保datadir参数指向正确的数据目录路径。

  5. 数据库引擎问题:如果测试容器和正式环境使用不同的数据库引擎(例如,一个使用 InnoDB,另一个使用 MyISAM),则可能会导致表无法正确加载。确保两个环境使用相同的数据库引擎。

建议逐一排查以上可能的原因,并仔细检查日志文件以获取更多信息,帮助确定问题所在。

8个月前 评论
sanders

:stuck_out_tongue_winking_eye: mysql 尽量不要这样搞,老老实实用 mysqldump 导数据就好了,这一般是 sqlite 这种数据库的搞法。

8个月前 评论

旧容器mysqldump导出sql文件 > 执行sql文件导入新容器

8个月前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!