V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
SvenWong
V2EX  ›  问与答

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

  •  
  •   SvenWong · 2016-05-21 14:43:02 +08:00 · 3510 次点击
    这是一个创建于 2889 天前的主题,其中的信息可能已经有所发展或是发生改变。

    宿主机器的用户是 _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)
    

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

    在下不才,请指点

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

    大版本号确实不一样,我用一个相同的试一下。谢啦
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3185 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 13:39 · PVG 21:39 · LAX 06:39 · JFK 09:39
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.