docker mysql启动时执行初始化sql

想要在docker中启动MySQL时自动执行初始化sql文件,可以通过以下步骤来实现:

1. 创建一个目录用于存放初始化文件

我们首先需要创建一个目录,用于存放我们的初始化sql脚本文件。

$ mkdir db_init_sql

2. 编写初始化sql脚本文件

在创建的目录下,我们需要创建一个或多个初始化sql脚本文件。这些sql文件包含了我们要在MySQL启动时执行的所有命令。假设我们已经创建了一个叫做init.sql的文件。

CREATE DATABASE my_db;
USE my_db;
CREATE TABLE users (
   id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
   username VARCHAR(30) NOT NULL,
   email VARCHAR(50),
   created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

3. 创建docker-compose.yml文件

我们要使用docker-compose来简化docker容器的管理。在目录下创建一个docker-compose.yml文件,并添加以下内容:

version: '3'

services:
  db:
    image: mysql:latest
    command: "--init-file /docker-entrypoint-initdb.d/init.sql"
    environment:
      MYSQL_ROOT_PASSWORD: "password"
    volumes:
      - ./db_init_sql:/docker-entrypoint-initdb.d
    ports:
      - "3306:3306"

这个配置包含了以下几个部分:

  1. image:指定我们使用的MySQL镜像。这里我们使用最新的正式版。
  2. command:提供给MySQL的启动命令,使用--init-file参数指向我们在第二步中创建的初始化sql脚本文件。
  3. environment:设置MySQL的root用户的密码。
  4. volumes:把我们在第一步中创建的初始化sql脚本文件目录映射到MySQL容器中,在MySQL启动时执行这些sql语句。
  5. ports:把MySQL的3306端口映射到本地主机,以便我们连接到MySQL实例。

4. 启动Docker容器

docker-compose.yml文件所在的目录中,运行以下命令来启动MySQL容器:

$ docker-compose up -d

示例1

我们可以通过以下方式,再创建一个sql脚本文件init2.sql

USE my_db;
INSERT INTO users (username, email) VALUES ('john', 'john@abc.com');

此时,需要修改docker-compose.yml文件中command的设置,使其启动时执行init.sqlinit2.sql文件内容。

version: '3'

services:
  db:
    image: mysql:latest
    command: --init-file /docker-entrypoint-initdb.d/init.sql --init-file /docker-entrypoint-initdb.d/init2.sql
    environment:
      MYSQL_ROOT_PASSWORD: "password"
    volumes:
      - ./db_init_sql:/docker-entrypoint-initdb.d
    ports:
      - "3306:3306"

示例2

如果MySQL初始化时遇到了错误,想要重新初始化,我们需要删除容器和数据卷,然后重新启动一个新的容器。在运行以下命令来删除容器和数据卷:

$ docker-compose down -v

这个命令将会停止和删除MySQL容器及其相关数据卷。然后我们可以重新运行docker-compose up -d来启动一个新的MySQL容器,并重新初始化数据。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:docker mysql启动时执行初始化sql - Python技术站

(0)
上一篇 2023年6月20日
下一篇 2023年6月20日

相关文章

  • Java构造器与传值学习总结

    Java构造器与传值学习总结 在Java中,构造器是一种特殊的方法,用于创建和初始化对象。构造器的名称必须与类名相同,并且没有返回类型。在本文中,我们将详细讲解Java构造器的概念以及如何使用它们来传递值。 构造器的基本概念 构造器在创建对象时被调用,用于初始化对象的成员变量。它们可以接受参数,并将这些参数的值赋给对象的成员变量。构造器可以有多个重载版本,每…

    other 2023年8月6日
    00
  • ipv6怎么设置? ipv6的开启方法

    IPv6设置攻略 1. 检查设备和网络支持 首先,确保你的设备和网络支持IPv6。大多数现代操作系统和路由器都支持IPv6,但仍然有一些旧设备可能不支持。你可以在设备的说明书或官方网站上查找相关信息。 2. 检查网络提供商支持 确认你的网络提供商是否支持IPv6。有些网络提供商可能仅提供IPv4连接,或者需要你联系他们以获取IPv6支持。如果你的网络提供商不…

    other 2023年7月30日
    00
  • 完美解决浏览器Flash插件过期不能用问题

    完美解决浏览器Flash插件过期不能用问题的攻略 问题的原因 随着HTML5技术的发展,不少网站已经不再依赖Flash技术,但是仍有一些网站或应用程序需要使用Flash插件才能正常使用。不幸的是,不少浏览器已经停止支持Flash插件,或者已经默认关闭了Flash插件。这就导致当用户尝试访问需要Flash插件的网站时,浏览器会提示Flash插件已过期或者无法使…

    other 2023年6月27日
    00
  • Android 环境变量的配置方法

    下面就为你详细讲解 Android 环境变量的配置方法。 Android 环境变量的配置方法 1. 为什么需要配置 Android 环境变量 在使用 Android 开发工具时,通常需要使用到一些命令行工具,如:adb,fastboot 等等。如果没有配置 Android 环境变量,那么每次使用这些工具时需要切换到对应的目录,才可以执行该命令,非常麻烦。正因…

    other 2023年6月27日
    00
  • C++链表实现通讯录设计

    本文将详细讲解如何使用C++语言实现一个基本的通讯录系统,该系统使用链表数据结构来保存联系人信息,并能够实现基本的增、删、查、改功能。本文的目标读者是具有一定C++基础的初学者。 实现思路 我们使用链表这种数据结构来存储联系人信息,每个节点表示一个联系人,可以存储该联系人的姓名、电话、住址等信息。每个节点不仅保存着联系人信息,还保存着指向前一个节点和后一个节…

    other 2023年6月27日
    00
  • Java通过python命令执行DataX任务的实例

    前置条件和说明: 本攻略适用于Linux、MacOS等类Unix操作系统; Java应用程序需要运行在JRE 1.8以上的环境中; Python需要安装3.x版本。 实现步骤: 2.1 下载DataX 首先需要在自己的电脑中下载DataX,可以从DataX官方Github仓库的releases页面下载最新的DataX压缩包。 例如,在终端中使用wget命令下…

    other 2023年6月27日
    00
  • Python实现环形链表

    Python实现环形链表完整攻略 在Python中实现环形链表,可以使用节点嵌套的方式来表示链表。具体实现方式为,定义一个Node类,包含val和next属性,其中next属性指向下一个节点。为了实现环形链表,只需将最后一个节点的next属性指向头节点即可。 下面是在Python中实现环形链表的完整示例代码: class Node(): def __init…

    other 2023年6月27日
    00
  • linux lsof命令详解及实例

    Linux lsof命令详解及实例 命令简介 lsof(list open files)命令是一个列出当前系统打开文件的工具。在Linux系统中,所有内容都以文件的形式表示,因此了解哪些文件被打开,由哪些进程打开,可以帮助我们更好地了解系统的运行情况。 命令语法 lsof [ -?abCcEfgHhiKklLnNOPRstUuVvXx] [ -A [afgG…

    other 2023年6月28日
    00
合作推广
合作推广
分享本页
返回顶部