添加环境变量:

DATABASES=db1,db2,db3,db4,db5

方法一:

1
2
3
4
5
6
7
8
entrypoint:
bash -c "DBs=($${DATABASES//,/ });
for db in $${DBs[@]};
do
echo "'"CREATE DATABASE IF NOT EXISTS $$db;"'" >> /docker-entrypoint-initdb.d/create_databases.sql;
done;
/usr/local/bin/docker-entrypoint.sh --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
"

方法二:

1
2
3
4
5
6
7
8
entrypoint::
sh -c "
echo '
CREATE DATABASE IF NOT EXISTS db1;
CREATE DATABASE IF NOT EXISTS db2;
' >> /docker-entrypoint-initdb.d/create_databases.sql;
/usr/local/bin/docker-entrypoint.sh
"

方法三:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
entrypoint::
sh -c "
echo "'"
USE mysql;\n
DELIMITER //\n
DROP PROCEDURE IF EXISTS temp112233;\n
CREATE PROCEDURE temp112233()\n
BEGIN\n
DECLARE var varchar(500) DEFAULT \"$${DATABASES}\";\n
DECLARE db varchar(50);\n
WHILE var != \"\" DO\n
IF LOCATE(\",\", var) > 0 THEN\n
SET db = SUBSTRING(var,1, LOCATE(\",\", var)-1);\n
SET var = SUBSTRING(var, LOCATE(\",\", var) + 1);\n
ELSE\n
SET db = var;\n
SET var = \"\";\n
END IF;\n
SET @query = CONCAT(\"CREATE DATABASE IF NOT EXISTS \`\", db, \"\`\");\n
PREPARE stmt FROM @query;\n
EXECUTE stmt;\n
DEALLOCATE PREPARE stmt;\n
END WHILE;\n
END; //\n
DELIMITER ;\n
call temp112233();\n
DROP PROCEDURE IF EXISTS temp112233;"'" >>/docker-entrypoint-initdb.d/create_databases.sql;
/usr/local/bin/docker-entrypoint.sh --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci"
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
USE mysql;
DELIMITER //
DROP PROCEDURE IF EXISTS temp112233;
CREATE PROCEDURE temp112233()
BEGIN
DECLARE var varchar(300) DEFAULT "db12,db13,db14";
DECLARE mydb varchar(20);
WHILE var != '' DO
IF LOCATE(",", var) > 0 THEN
SET mydb = SUBSTRING(var,1, LOCATE(",", var)-1);
SET var = SUBSTRING(var, LOCATE(",", var) + 1);
ELSE
SET mydb = var;
SET var = '' ;
END IF;
-- 使用变量创建数据库
SET @query = CONCAT('CREATE DATABASE IF NOT EXISTS `', mydb, '`');
PREPARE stmt FROM @query;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
select var as var ,mydb as mydb;
END WHILE;
END; //
DELIMITER ;
call temp112233();

方法四:

1
2
RUN set -ex; \
echo ${DATABASES} | awk -F, '{for(i=1;i<=NF;i++){print "CREATE DATABASE IF NOT EXISTS " $i ";"}}' >/docker-entrypoint-initdb.d/add_new_databases.sql;

docker-entrypoint-initdb.d/

文件类型 执行动作
*.sh “$f”
*.sql docker_process_sql < “$f”
*.sql.gz gunzip -c “$f”
*.sql.xz xzcat “$f”
* mysql_warn “$0: ignoring $f” ;;