如何在一个数据库服务器/容器上创建多个数据库

masterdany88

如何在一个mysql数据库容器上创建多个数据库?还是我必须为每个数据库创建数据库容器?当我尝试从sql文件脚本创建它时:

    @ClassRule public static MySQLContainer dbService = (MySQLContainer) new MySQLContainer()
        .withPassword("test")
        .withUsername("mysqlroot")
        .withDatabaseName("test")
        .withInitScript("init_mysql.sql")
        .withExposedPorts(DB_PORT)
        .withNetwork(network)
        .withNetworkAliases("dbService")
        ;

我收到一个错误:

Caused by: org.testcontainers.ext.ScriptUtils$ScriptStatementFailedException: Script execution failed (init_mysql.sql:2): CREATE DATABASE IF NOT EXISTS `b2c`
at org.testcontainers.jdbc.JdbcDatabaseDelegate.execute(JdbcDatabaseDelegate.java:49)
at org.testcontainers.delegate.AbstractDatabaseDelegate.execute(AbstractDatabaseDelegate.java:34)
at org.testcontainers.ext.ScriptUtils.executeDatabaseScript(ScriptUtils.java:331)
... 19 more
Caused by: java.sql.SQLSyntaxErrorException: Access denied for user 'mysqlroot'@'%' to database 'b2c'
    at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:120)
    at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:97)
    at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122)
    at com.mysql.cj.jdbc.StatementImpl.executeInternal(StatementImpl.java:782)
    at com.mysql.cj.jdbc.StatementImpl.execute(StatementImpl.java:666)
    at org.testcontainers.jdbc.JdbcDatabaseDelegate.execute(JdbcDatabaseDelegate.java:42)
    ... 21 more

内容 init_mysql.sql

CREATE TABLE bar (
    foo VARCHAR(255)
);
CREATE DATABASE  IF NOT EXISTS `b2c`;

我已经尝试了许多配置。对我来说,除了在容器创建时配置的专用数据库外,我无法执行sql。请帮忙。我有6个DB,为每个创建专用的容器浪费资源。

露西安·拉杜(Lucian Radu)

首先,您需要使用root用户名启动MySQLContainer (以具有执行初始化脚本的特权):

        new MySQLContainer<>(new DockerImageName(MYSQL_DOCKER_IMAGE))
            .withUsername("root")
            .withPassword("")
            .withEnv("MYSQL_ROOT_HOST", "%")
            .withInitScript("init_test_container_databases.sql")
            .withNetwork(NETWORK)
            .withNetworkAliases(MYSQL_NETWORK)
            .withStartupTimeout(Duration.ofSeconds(CONTAINER_STARTUP_TIMEOUT_SECONDS));

init_test_container_databases.sql 脚本(在我的示例中,我将使用同一用户创建两个数据库,这些数据库将由我的应用程序使用):

CREATE DATABASE IF NOT EXISTS your_database_1;
CREATE DATABASE IF NOT EXISTS your_database_2;
CREATE USER 'your_username'@'%' IDENTIFIED BY 'your_password';
GRANT ALL PRIVILEGES ON *.* TO 'your_username'@'%';

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在多个数据库表上创建一个触发器

从服务器上每个数据库的一个表中选择数据

多个微服务共享同一数据库SERVER(一个容器,多个数据库)

Laravel forge - 多个服务器如何访问同一个数据库

如何访问SP中其他服务器上的另一个数据库?

如何在一个数据库中实现 Azure SQL 服务器的实时报告?

从同一服务器访问另一个数据库?

查询同一服务器上的多个数据库

使用Neo4j在一台服务器上创建多个数据库

如何在多个服务器上托管一个MySQL数据库?

如何在单个服务器上将Hibernate与多个数据库一起使用

从多个服务器上的多个数据库中提取数据

Laravel Forge 如何在 2 个独立服务器上的 2 个数据库之间建立连接

指向另一个数据库服务器后,Jboss服务器无法启动

如何使用 cloudformation 在一个 RDS 中创建多个数据库?

InfluxDB:仅将多个数据库中的一个从一个服务器实例移动到另一个

如何在服务器上添加一个数据库,以便服务器上的所有计算机都可以访问

如何在一个查询中从多个数据库中选择记录?

如何在一个数据库调用中替换多个文档

如何在一个图像中显示多个数据库行

用于mysql的多个docker容器或具有多个数据库的一个实例

如何从我的数据库服务器备份一个特定的数据库

一个数据库或多个

mysql 一个或多个数据库?

如何将表从一个数据库复制到其他服务器的另一个数据库

在PHP中连接到不同服务器上的多个数据库

Laravel 5.4 上的多个数据库 SQL 服务器连接错误

将数据从一个数据库(和服务器)复制到另一个数据库(和服务器)时出现问题(违反主键约束)

如何将多个数组放入一个数据库表