请教一个关于 Docker 的问题,容器中的 mysql 服务是否可以直接使用宿主机器的 msyql 的数据库文件

2016-05-21 14:43:02 +08:00
 SvenWong

宿主机器的用户是 _mysql ,容器中的是 mysql ,宿主机器的 mysql 服务已经停止,宿主机器 5.5.45 ,容器是官方的 image , 5.6 版本

使用的命令是:

docker run --name db -e MYSQL_ROOT_PASSWORD=root -d -v /usr/local/mysql/data:/var/lib/mysql mysql:5.6 --lower_case_table_name=1

其中 /usr/local/mysql/data 是宿主机器的 mysql 的 data 目录, /var/lib/mysql 是容器中的目录 进入之后,能看宿主机器的其中几个数据文件夹,比如宿主中有 A,B,C,D 数据库,而容器中只能看到 A,C ,而且 cd 进去啥也没有

尝试过,将宿主机器 A 数据库从原始目录拷贝到 home 下的其他目录,再次使用

docker run --name db -e MYSQL_ROOT_PASSWORD=root -d -v /Users/sven/Documents/workspace/docker/db/bluemountain:/var/lib/mysql/bluemountain/ mysql:5.6 --lower_case_table_name=1]

这个命令挂载,进入到容器中,是可以 use db 和 show tables ;但是 select 的时候永远找不到表

docker logs db,mysql的启动日志如下

2016-05-21 06:28:45 0 [Warning] Using unique option prefix lower_case_table_name instead of lower_case_table_names is deprecated and will be removed in a future release. Please use the full name instead.
2016-05-21 06:28:45 0 [Note] mysqld (mysqld 5.6.30) starting as process 1 ...
2016-05-21 06:28:45 1 [Note] Plugin 'FEDERATED' is disabled.
2016-05-21 06:28:45 1 [Note] InnoDB: Using atomics to ref count buffer pool pages
2016-05-21 06:28:45 1 [Note] InnoDB: The InnoDB memory heap is disabled
2016-05-21 06:28:45 1 [Note] InnoDB: Mutexes and rw_locks use GCC atomic builtins
2016-05-21 06:28:45 1 [Note] InnoDB: Memory barrier is not used
2016-05-21 06:28:45 1 [Note] InnoDB: Compressed tables use zlib 1.2.8
2016-05-21 06:28:45 1 [Note] InnoDB: Using Linux native AIO
2016-05-21 06:28:45 1 [Note] InnoDB: Using CPU crc32 instructions
2016-05-21 06:28:45 1 [Note] InnoDB: Initializing buffer pool, size = 128.0M
2016-05-21 06:28:45 1 [Note] InnoDB: Completed initialization of buffer pool
2016-05-21 06:28:45 1 [Note] InnoDB: Highest supported file format is Barracuda.
2016-05-21 06:28:45 1 [Note] InnoDB: The log sequence numbers 1626057 and 1626057 in ibdata files do not match the log sequence number 1626067 in the ib_logfiles!
2016-05-21 06:28:45 1 [Note] InnoDB: Database was not shutdown normally!
2016-05-21 06:28:45 1 [Note] InnoDB: Starting crash recovery.
2016-05-21 06:28:45 1 [Note] InnoDB: Reading tablespace information from the .ibd files...
2016-05-21 06:28:45 1 [Note] InnoDB: Restoring possible half-written data pages 
2016-05-21 06:28:45 1 [Note] InnoDB: from the doublewrite buffer...
2016-05-21 06:28:45 1 [Note] InnoDB: 128 rollback segment(s) are active.
2016-05-21 06:28:45 1 [Note] InnoDB: Waiting for purge to start
2016-05-21 06:28:45 1 [Note] InnoDB: 5.6.30 started; log sequence number 1626067
2016-05-21 06:28:45 1 [Note] Server hostname (bind-address): '*'; port: 3306
2016-05-21 06:28:45 1 [Note] IPv6 is available.
2016-05-21 06:28:45 1 [Note]   - '::' resolves to '::';
2016-05-21 06:28:45 1 [Note] Server socket created on IP: '::'.
2016-05-21 06:28:45 1 [Warning] 'proxies_priv' entry '@ root@825bfa89d625' ignored in --skip-name-resolve mode.
2016-05-21 06:28:45 1 [Note] Event Scheduler: Loaded 0 events
2016-05-21 06:28:45 1 [Note] mysqld: ready for connections.
Version: '5.6.30'  socket: '/var/run/mysqld/mysqld.sock'  port: 3306  MySQL Community Server (GPL)

网上看过一些文章,是否容器只能用自己生产的数据库,然后持久化在本地,而不能使用本地已经存在的数据库文件

在下不才,请指点

3571 次点击
所在节点    问与答
3 条回复
SvenWong
2016-05-21 14:46:57 +08:00
求教
kungfuchicken
2016-05-21 16:34:43 +08:00
1. 容器和宿主机器使用的 mysql 版本最好相同(大版本号,如 5.5.x )
2. 你可以直接把容器的 mysql 的数据目录映射到宿主机器的 mysql 数据目录,你说的看不到数据可能是权限问题,如果宿主机器是* nix 系统,请进入到容器里面把容器里面的 mysql 用户的 id 修改为宿主机的 mysql 用户相同的 id
SvenWong
2016-05-21 23:29:18 +08:00
@kungfuchicken 多谢,我去试一下,其实目的就是让容器的 mysql 服务,直接使用宿主上已经存在的数据。
宿主是 OS X 系统, mysql 运行用户的 id 确实是不一样的,宿主是 _mysql ,而容器是 mysql 。

大版本号确实不一样,我用一个相同的试一下。谢啦

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/280237

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX