代码之家  ›  专栏  ›  技术社区  ›  user3727540

用testcontainers植入mysql数据库

  •  0
  • user3727540  · 技术社区  · 5 年前

    我遵循了官方的指导方针( https://www.testcontainers.org/modules/databases/ )以及它的例子( https://github.com/testcontainers/testcontainers-java/blob/master/modules/jdbc-test/src/test/java/org/testcontainers/junit/SimpleMySQLTest.java ),但是我无法加载用mysqldump创建的转储。

    每次出现以下错误时:

    Caused by: java.sql.SQLSyntaxErrorException: Access denied; you need (at least one of) the SUPER privilege(s) for this operation
    

    根据其他用户的建议,我尝试了以下方法:

    MySQLContainer mysql = (MySQLContainer) new MySQLContainer()
                    .withInitScript("foodmart_department.sql")
                    .withUsername("root")
                    .withPassword("test")
                    .withLogConsumer(new Slf4jLogConsumer(logger));
            mysql.start();
    

    SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
    SLF4J: Defaulting to no-operation (NOP) logger implementation
    SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
    
            ℹ︎ Checking the system...
            ✔ Docker version should be at least 1.6.0
            ✔ Docker environment should have more than 2GB free disk space
    
    
    org.testcontainers.containers.ContainerLaunchException: Container startup failed
    
        at org.testcontainers.containers.GenericContainer.doStart(GenericContainer.java:307)
        at org.testcontainers.containers.GenericContainer.start(GenericContainer.java:287)
        at com.Foodmart.testSimple(Foodmart.java:22)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at org.junit.platform.commons.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:628)
        at org.junit.jupiter.engine.execution.ExecutableInvoker.invoke(ExecutableInvoker.java:117)
        at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$invokeTestMethod$7(TestMethodTestDescriptor.java:184)
        at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
        at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.invokeTestMethod(TestMethodTestDescriptor.java:180)
        at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:127)
        at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:68)
        at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:135)
        at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
        at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$7(NodeTestTask.java:125)
        at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:135)
        at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:123)
        at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
        at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:122)
        at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:80)
        at java.util.ArrayList.forEach(ArrayList.java:1257)
        at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:38)
        at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:139)
        at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
        at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$7(NodeTestTask.java:125)
        at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:135)
        at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:123)
        at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
        at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:122)
        at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:80)
        at java.util.ArrayList.forEach(ArrayList.java:1257)
        at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:38)
        at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:139)
        at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
        at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$7(NodeTestTask.java:125)
        at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:135)
        at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:123)
        at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
        at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:122)
        at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:80)
        at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:32)
        at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57)
        at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:51)
        at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:229)
        at org.junit.platform.launcher.core.DefaultLauncher.lambda$execute$6(DefaultLauncher.java:197)
        at org.junit.platform.launcher.core.DefaultLauncher.withInterceptedStreams(DefaultLauncher.java:211)
        at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:191)
        at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:128)
        at com.intellij.junit5.JUnit5IdeaTestRunner.startRunnerWithArgs(JUnit5IdeaTestRunner.java:69)
        at com.intellij.rt.execution.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:47)
        at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:242)
        at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70)
    Caused by: org.rnorth.ducttape.RetryCountExceededException: Retry limit hit with exception
        at org.rnorth.ducttape.unreliables.Unreliables.retryUntilSuccess(Unreliables.java:88)
        at org.testcontainers.containers.GenericContainer.doStart(GenericContainer.java:300)
        ... 53 more
    Caused by: org.testcontainers.containers.ContainerLaunchException: Could not create/start container
        at org.testcontainers.containers.GenericContainer.tryStart(GenericContainer.java:418)
        at org.testcontainers.containers.GenericContainer.lambda$doStart$0(GenericContainer.java:302)
        at org.rnorth.ducttape.unreliables.Unreliables.retryUntilSuccess(Unreliables.java:81)
        ... 54 more
    Caused by: org.testcontainers.ext.ScriptUtils$UncategorizedScriptException: Failed to execute database script from resource [-- MySQL dump 10.13  Distrib 8.0.19, for osx10.14 (x86_64)
    --
    -- Host: mysql-technical-test.cq5i4y35n9gg.eu-west-1.rds.amazonaws.com    Database: foodmart
    -- ------------------------------------------------------
    -- Server version   5.7.26-log
    
    /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
    /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
    /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
    /*!50503 SET NAMES utf8mb4 */;
    /*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
    /*!40103 SET TIME_ZONE='+00:00' */;
    /*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
    /*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
    /*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
    /*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
    SET @MYSQLDUMP_TEMP_LOG_BIN = @@SESSION.SQL_LOG_BIN;
    SET @@SESSION.SQL_LOG_BIN= 0;
    
    --
    -- GTID state at the beginning of the backup
    --
    
    SET @@GLOBAL.GTID_PURGED=/*!80000 '+'*/ '';
    
    --
    -- Table structure for table `department`
    --
    
    DROP TABLE IF EXISTS `department`;
    /*!40101 SET @saved_cs_client     = @@character_set_client */;
    /*!50503 SET character_set_client = utf8mb4 */;
    CREATE TABLE `department` (
      `department_id` int(11) NOT NULL,
      `department_description` varchar(30) NOT NULL,
      UNIQUE KEY `i_department_id` (`department_id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
    /*!40101 SET character_set_client = @saved_cs_client */;
    
    --
    -- Dumping data for table `department`
    --
    
    LOCK TABLES `department` WRITE;
    /*!40000 ALTER TABLE `department` DISABLE KEYS */;
    INSERT INTO `department` VALUES (1,'HQ General Management'),(2,'HQ Information Systems'),(3,'HQ Marketing'),(4,'HQ Human Resources'),(5,'HQ Finance and Accounting'),(11,'Store Management'),(14,'Store Information Systems'),(15,'Permanent Checkers'),(16,'Temp Checkers'),(17,'Permanent Stockers'),(18,'Temp Stockers'),(19,'Store Permanent Butchers');
    /*!40000 ALTER TABLE `department` ENABLE KEYS */;
    UNLOCK TABLES;
    ]
        at org.testcontainers.ext.ScriptUtils.executeDatabaseScript(ScriptUtils.java:375)
        at org.testcontainers.ext.ScriptUtils.executeDatabaseScript(ScriptUtils.java:313)
        at org.testcontainers.ext.ScriptUtils.runInitScript(ScriptUtils.java:302)
        at org.testcontainers.containers.JdbcDatabaseContainer.runInitScriptIfRequired(JdbcDatabaseContainer.java:240)
        at org.testcontainers.containers.JdbcDatabaseContainer.containerIsStarted(JdbcDatabaseContainer.java:154)
        at org.testcontainers.containers.GenericContainer.tryStart(GenericContainer.java:403)
        ... 56 more
    Caused by: org.testcontainers.exception.ConnectionCreationException: Could not obtain JDBC connection
        at org.testcontainers.jdbc.JdbcDatabaseDelegate.createNewConnection(JdbcDatabaseDelegate.java:34)
        at org.testcontainers.jdbc.JdbcDatabaseDelegate.createNewConnection(JdbcDatabaseDelegate.java:17)
        at org.testcontainers.delegate.AbstractDatabaseDelegate.getConnection(AbstractDatabaseDelegate.java:23)
        at org.testcontainers.jdbc.JdbcDatabaseDelegate.execute(JdbcDatabaseDelegate.java:42)
        at org.testcontainers.delegate.AbstractDatabaseDelegate.execute(AbstractDatabaseDelegate.java:34)
        at org.testcontainers.ext.ScriptUtils.executeDatabaseScript(ScriptUtils.java:362)
        ... 61 more
    Caused by: java.sql.SQLException: Could not create new connection
        at org.testcontainers.containers.JdbcDatabaseContainer.createConnection(JdbcDatabaseContainer.java:210)
        at org.testcontainers.jdbc.JdbcDatabaseDelegate.createNewConnection(JdbcDatabaseDelegate.java:31)
        ... 66 more
    

    0 回复  |  直到 5 年前
        1
  •  0
  •   Martin Vestergaard    4 年前

    因为它是mysql,所以删除 .withUsername("root")

    2020-10-08 12:35:53+00:00 [Note] [Entrypoint]: Creating user root ERROR 1396 (HY000) at line 1: Operation CREATE USER failed for 'root'@'%'