【问题标题】:initialize google cloud sql from Docker file从 Docker 文件初始化谷歌云 sql
【发布时间】:2017-11-22 23:23:22
【问题描述】:

我有一个托管在 Google Cloud SQL 中的 MySQL 实例,并且我有一个使用该数据库的容器,我尝试使用以下命令从 docker 文件初始化数据库架构:

来自 anapsix/alpine-java

ADD  ./mysql/init.sql /docker-entrypoint-initdb.d

init.sql

SET sql_mode = '';

CREATE DATABASE IF NOT EXISTS `locations_schema`;

USE `locations_schema`;


CREATE TABLE `locations` (
  `id` int(11) NOT NULL,
   `value` varchar(255) NOT NULL,
  `label` varchar(255) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

但不幸的是,这不起作用,有什么办法可以实现数据库的初始化?

【问题讨论】:

    标签: sql docker kubernetes google-cloud-sql google-kubernetes-engine


    【解决方案1】:

    我认为您对实施解决方案感到困惑。

    如果您的容器使用了唯一的 Google Cloud MySQL 实例,为什么每次从新的自定义映像创建容器时都尝试初始化数据库架构?手动连接一次就初始化不是更好吗?

    但是 docker-entrypoint-initdb.dused to initialize 本地 MySQL 实例,而不是在不同机器上运行的实例。请注意,您至少需要指定实例的地址、用户和密码才能让容器连接到它。为此,有不同的方法,您可以找到几个指南,但我认为这不是您需要实现的

    但是,如果您尝试初始化在 Docker 容器 here 中运行的 MySQL 实例,您可以找到一个很棒的解释如何做到这一点,但我认为您必须更改您开始的映像,因为我没有认为它包含 MySQL。

    【讨论】:

      【解决方案2】:

      您可以使用脚本来初始化数据库,而无需传递 root 密码,前提是 MySQL 将数据保存在容器之外并且您在 docker run 命令上指定了一个卷。您将需要指定特定于您的环境的环境变量。脚本文件需要通过 Dockerfile 添加到容器中。基本 MySQL 命令行:

      Set -e
      Set -x
      

      然后启动 MySQL 守护进程

      Mysql_pid=$!
      

      如果需要,您可以为“..”添加回显,直到 MySQL 管理员启动为止。

      mysql -e "GRANT ALL ON *.* TO root@'%' IDENTIFIED BY '' WITH GRANT OPTION"
      

      然后关闭你的 MySQL 守护进程

      wait $mysql_pid  --  wait for it to stop
      

      Docker 文档https://docs.docker.com/samples/library/mysql/ 提供了更多 DB 启动选项,包括从 docker 容器中的应用程序启动。您还可以将 MySQL 和 docker commands 组合用于其他数据库功能,例如创建架构或创建多个数据库。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-09-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-10-03
        • 2018-08-13
        • 1970-01-01
        相关资源
        最近更新 更多