我有一个超过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: {}
答案 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”有效。
如果您在生产环境中,请相应地调整最让您感到害怕的选项。