关于mysql指定数据备份文件存放位置问题


我现在在使用mysql的时候,为了备份data和config,定义了不同的volume,VOLUME ["/etc/mysql", "/var/lib/mysql"],但是这样run的时候,会被docker自动分配到/var/docker下面,但是我想指定他挂载的位置,如果使用-v host:container的话,host文件里面的内容就会覆盖原来container里面的内容然后再同步,我想有没有方法能让我将container里面的文件同步到host文件里面,而不会向-v 那样先去覆盖他
已邀请:

tuxknight

赞同来自: allansun girlskiller andieguo


目前还没有好的解决办法,Volume的功能是将container外的目录挂载到Container内部。
Docker 1.8+版本有个命令 docker cp 可以将docker container内部的文件拷贝出来。

另外根据你的需求,是需要备份data 和config,那为何不直接把配置和数据放在host,container运行的时候再挂载进去?你要知道,docker container是从image跑起来的,按你那样的需求,重新run一个container的时候,你备份的数据完全没用了啊。

Docker适合跑无状态的服务,对于database进行docker化那还是要费一番功夫的。

allansun - 无名小虾

赞同来自:


docker container里面的东西本来就应该是用完就扔的。 所有需要保留的东西都应该像你用的 -v 的方法挂载进去。

但是我没明白你为什么会说“会被docker自动分配到/var/docker下面”

baozilala

赞同来自:


docker run -it -d -p 80:80 -v /Users/xxx/Docker/lamp/data/mysql:/var/lib/mysql -v /Users/xxx/Docker/lamp/www:/var/www/html 293ef2f50d98

我到是用 -v 方式挂载的,可结果是导致无法运行Mysql,错误代码如下:
[....] Starting MySQL database server: mysqld . . . . . . . . . . . . . . . . . . . . . . . . . . . .[FAI failed!

尝试着连接mysql -uroot -p 却出现了如下错误:
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)

同时检查了 /var/lib/mysq l的权限:
drwxrwxrwx 6 root root 204 Jul 11 03:11 mysql

如果不加载此文件夹时候能正常运行,而且看到/var/lib/mysql 文件夹下有一些文件,如 mysql 文件.
但是一使用 -v 加载host目录到/var/lib/mysql的时候,从Host查看这个Mysql文件夹,却是空的.

service mysql start的时候,mysql文件夹会生成3个log 文档.
ib_logfile0 - 5.2
ib_logfile1 - 5.2
ibdata1 - 18.9

请问下,这是什么情况呢? 已经做了很多功课了,可就是找不到解决办法.

jxjhu

赞同来自:


说白了,docker跑无状态的应用比较合适,有状态的应用及服务还是适合做测试来用

要回复问题请先登录注册