mysql source命令在docker容器里什么都不做

描述

我正在运行docker容器与MySQL中,我想在mysql启动后运行python脚本,这将在其上应用转储。

这是一个Dockerfile的片段:

FROM mysql:5.6 RUN apt-get update && \ apt-get install -y python ADD apply_dump.py /usr/local/bin/apply_dump.py ADD starter.sh /usr/local/bin/starter.sh CMD ["/usr/local/bin/starter.sh"] 

starter.sh

 nohup python '/usr/local/bin/apply_dump.py' & mysqld 

apply_dump.py

 import os import urllib import gzip import shutil import subprocess import time import logging import sys # wait for mysql server time.sleep(5) print "Start dumping" dumpName = "ggg.sql" dumpGzFile = dumpName + ".gz" dumpSqlFile = dumpName + ".sql" print "Loading dump {}...".format(dumpGzFile) urllib.urlretrieve('ftp://ftpUser:ftpPassword@ftpHost/' + dumpGzFile, '/tmp/' + dumpGzFile) print "Extracting dump..." with gzip.open('/tmp/' + dumpGzFile, 'rb') as f_in: with open('/tmp/' + dumpSqlFile, 'wb') as f_out: shutil.copyfileobj(f_in, f_out) print "Dropping database..." subprocess.call(["mysql", "-u", "root", "-proot", "-e", "drop database if exists test_db"]) print "Creating database..." subprocess.call(["mysql", "-u", "root", "-proot", "-e", "create schema test_db"]) print "Applying dump..." subprocess.call(["mysql", "--user=root", "--password=root", "test_db", "-e" "source /tmp/{}".format(dumpSqlFile)]) print "Done" 

ggg.sql.gz的内容非常简单:

 CREATE TABLE test_table (id INT NOT NULL,PRIMARY KEY (id)); 

问题

创build数据库,但表不是。 如果我要去容器并手动运行这个脚本,将会创build表。 如果我将用直接的sql创build语句replacesource命令,也将工作。 但实际上转储文件将是相当大的,只有source命令会应付这个(或不只是?)。 难道我做错了什么?

提前致谢。

尝试像这样将源SQL文件传递到MySQL命令中,而不是使用-e标志:

 subprocess.call(["mysql", "--user=root", "--password=root", "test_db", "<", "/tmp/%s" % dumpSqlFile]) 

这将调用导入您的SQL文件使用广泛使用的语法:

mysql --user=root --password=root test_db < /tmp/source.sql