有时在Docker中导入数据Mysql非常慢

时间:2017-03-10 06:38:25

标签: mysql docker docker-compose

我有一个超过1GB的文件* .SQL,当我导入到本地或Vagrant的Mysql时,它总是成功的。但是使用相同的文件,我导入Docker上的Mysql,它非常慢(大约10MB / 15分钟)。我已经多次检查过相同的结果。 我试过很多文件;它似乎发生在指定的文件中。我不知道原因。我需要帮助。

这是我的docker-compose.yml:

version: "2.0"
services:
 database:
  image: "mysql/mysql-server:5.5"
  ports:
   - "3307:3306"
  volumes:
   - "db:/var/lib/mysql"
   - ./sql:/home/sql
  environment:
   MYSQL_ALLOW_EMPTY_PASSWORD: "yes"
 volumes:
  db: {}

2 个答案:

答案 0 :(得分:2)

我在windows中使用docker ... 我的解决方案是将.sql文件移动到Docker mysql容器并手动执行导入。

  • 从您的mysql生产服务器导出.sql ...

  • 将文件复制到Docker mysql容器

docker cp base_ok.sql docker_mysql_1:/home/base_ok.sql

  • 进入docker mysql容器的bash

    docker exec -ti docker_mysql_1 bash

  • 导入DDBB

    mysql -p -u root magento < base_ok.sql

请注意我的docker容器是docker_mysql_1,你可以列出所有容器,输入docker ps

答案 1 :(得分:0)

我的回答有点晚了,但我对此很挣扎,我认为该解决方案可以帮助其他人。

我读了很多,我在我的 ext4 文件系统中尝试了 barrier=0 但什么也没有。最后,对我有用的简单解决方案是将 innodb 缓冲池大小扩大到合适的值

mysql.cnf:

<form class="form-inline" action="form/contact2.php" method="POST">
        <label for="email">Name:</label>
        <input type="text" id="name" placeholder="Enter Name" name="name">
        <label for="email">Email:</label>
        <input type="email" id="email" placeholder="Enter email" name="email">
        <label for="comment">Message</label>
        <input type="comment" id="comment" placeholder="Enter the message" name="comment">
        <button type="submit">Submit</button>
      </form>

就是这样。

您可以将现有的 conf 复制到本地目录,然后挂载它: docker cp -a

[mysql]
innodb_buffer_pool_size=128M

或者我所知道的直接将它传递给 docker run:

<container>:/etc/mysql/conf.d mysql_conf
# change mysql.cnf
docker run ... -v /path/to/mysql_conf:/etc/mysql/conf.d ...

更新

我发现该解决方案本身还不够,它有时会以某种方式起作用,而对其他人来说仍然很慢(不要深究原因)。

由于我只是将它用于我电脑上的 mysql 开发版,所以我不是特别担心数据损坏等,所以我现在有:

docker run ... mysql:latest --innodb-buffer-pool-size=128M

然后我在所有表上启动了一个优化表,以确保“innodb_file_per_table”有效。

如果您在生产环境中,请相应地调整最让您感到害怕的选项。