iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >docker mysql初始化多个sql脚本
  • 872
分享到

docker mysql初始化多个sql脚本

多个初始化脚本 2023-01-31 08:01:17 872人浏览 安东尼
摘要

现有一台服务器,需要部署Mysql。其中mysql容器,需要在第一次启动时,执行多个sql文件。文件名说明执行顺序init.sql创建数据库以及用户1users.sql用户表2role.sql用户角色3   &

现有一台服务器,需要部署Mysql。其中mysql容器,需要在第一次启动时,执行多个sql文件。

文件名说明执行顺序
init.sql创建数据库以及用户1
users.sql用户表2
role.sql用户角色3

 

 

 

 

 

 

注意:必须严格按照执行顺序来执行,不能错乱。

有些人可能会问:为啥不把这3个sql文件合并成1个sql?答案是可以的。假设有上万个用户,那么这个sql文件就会很大,后期维护不方便。

 

那么可不可以让一个sql文件,执行另外3个sql文件呢?答案是可以的。这样就可以控制sql文件的执行顺序。比如:

source /opt/sql/init.sql;
use test;
source /opt/sql/users.sql;
source /opt/sql/role.sql;

环境说明

操作系统Centos 7.6

Docker版本: 19.03.8

docker-compose版本: 1.24.1

 

目录结构

/opt/mysql_test 目录结构如下:

./
├── docker-compose.yml
└── mysql
    ├── dockerfile
    ├── init
    │   └── init.sql
    ├── mysqld.cnf
    └── sql
        ├── init.sql
        ├── role.sql
        └── users.sql

 

docker-compose.yml

version: '3'
services:
  mysql:
    image: mysql:1
    container_name: mysql
    build: ./mysql
    volumes:
      - /data/mysql/data:/var/lib/mysql
      - ./mysql/init:/docker-entrypoint-initdb.d/
      - ./mysql/sql:/opt/sql
    environment:
      - MYSQL_ROOT_PASSWord=abcd1234
    ports:
      - "3306:3306"
    restart: always
    command: --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci

说明:将sql文件放到容器中的 /docker-entrypoint-initdb.d/ 目录,就会在mysql第一次启动时执行。之后重启容器不会重复执行!

如果此目录放置多个sql文件,它执行时是没有顺序的。因此,这个目录只放一个init.sql,专门用来控制执行sql顺序的。

 

mysql/dockerfile

FROM mysql:5.7
ADD mysqld.cnf /etc/mysql/mysql.conf.d/mysqld.cnf

mysql/init/init.sql

source /opt/sql/init.sql;
use test;
source /opt/sql/users.sql;
source /opt/sql/role.sql;

mysql/mysqld.cnf

[client]
port=3306
Socket = /var/run/mysqld/mysqld.sock
[mysql]
no-auto-rehash
auto-rehash
default-character-set=utf8mb4
[mysqld]
###basic settings
server-id = 2
pid-file    = /var/run/mysqld/mysqld.pid
socket        = /var/run/mysqld/mysqld.sock
datadir        = /var/lib/mysql
#log-error    = /var/lib/mysql/error.log
# By default we only accept connections from localhost
#bind-address    = 127.0.0.1
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
character-set-server = utf8mb4
sql_mode="NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
default-storage-engine=INNODB
transaction_isolation = READ-COMMITTED
auto_increment_offset = 1
connect_timeout = 20
max_connections = 3500
wait_timeout=86400
interactive_timeout=86400
interactive_timeout = 7200
log_bin_trust_function_creators = 1
wait_timeout = 7200
sort_buffer_size = 32M
join_buffer_size = 128M
max_allowed_packet = 1024M
tmp_table_size = 2097152
explicit_defaults_for_timestamp = 1
read_buffer_size = 16M
read_rnd_buffer_size = 32M
query_cache_type = 1
query_cache_size = 2M
table_open_cache = 1500
table_definition_cache = 1000
thread_cache_size = 768
back_log = 3000
open_files_limit = 65536
skip-name-resolve
########log settings########
log-output=FILE
general_log = ON
general_log_file=/var/lib/mysql/general.log
slow_query_log = ON
slow_query_log_file=/var/lib/mysql/slowquery.log
long_query_time=10
#log-error=/var/lib/mysql/error.log
log_queries_not_using_indexes = OFF
log_throttle_queries_not_using_indexes = 0
#expire_logs_days = 120
min_examined_row_limit = 100
########innodb settings########
innodb_io_capacity = 4000
innodb_io_capacity_max = 8000
innodb_buffer_pool_size = 6144M
innodb_file_per_table = on
innodb_buffer_pool_instances = 20
innodb_buffer_pool_load_at_startup = 1
innodb_buffer_pool_dump_at_shutdown = 1
innodb_log_file_size = 300M
innodb_log_files_in_group = 2 
innodb_log_buffer_size = 16M
innodb_undo_logs = 128
#innodb_undo_tablespaces = 3
#innodb_undo_log_truncate = 1
#innodb_max_undo_log_size = 2G
innodb_flush_method = O_DIRECT
innodb_flush_neighbors = 1
innodb_purge_threads = 4
innodb_large_prefix = 1
innodb_thread_concurrency = 64
innodb_print_all_deadlocks = 1
innodb_strict_mode = 1
innodb_sort_buffer_size = 64M
innodb_flush_log_at_trx_commit=1
innodb_autoextend_increment=64
innodb_concurrency_tickets=5000
innodb_old_blocks_time=1000
innodb_open_files=65536
innodb_stats_on_metadata=0
innodb_file_per_table=1
innodb_checksum_alGorithm=0
#innodb_data_file_path=ibdata1:60M;ibdata2:60M;autoextend:max:1G
innodb_data_file_path = ibdata1:12M:autoextend
#innodb_temp_data_file_path = ibtmp1:500M:autoextend:max:20G
#innodb_buffer_pool_dump_pct = 40
#innodb_page_cleaners = 4
#innodb_purge_rseg_truncate_frequency = 128
binlog_gtid_simple_recovery=1
#log_timestamps=system
##############
delayed_insert_limit = 100
delayed_insert_timeout = 300
delayed_queue_size = 1000
delay_key_write = ON
disconnect_on_expired_password = ON
div_precision_increment = 4
end_markers_in_JSON = OFF
eq_range_index_dive_limit = 10
innodb_adaptive_flushing = ON
innodb_adaptive_hash_index = ON
innodb_adaptive_max_sleep_delay = 150000
#innodb_additional_mem_pool_size = 2097152
innodb_autoextend_increment = 64
innodb_autoinc_lock_mode = 1

 

mysql/sql/init.sql

-- 创建数据库
CREATE DATABASE  `test` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-- 创建普通用户
grant all PRIVILEGES on test.* to test@'%' identified by '123456';
flush privileges;
use test;

 

mysql/sql/users.sql

CREATE TABLE `users` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `username` varchar(50) COLLATE utf8mb4_bin NOT NULL COMMENT '用户名',
  `password` varchar(255) CHARACTER SET utf8mb4 DEFAULT NULL COMMENT '密码',
  `phone` varchar(20) CHARACTER SET utf8mb4 DEFAULT NULL COMMENT '手机号',
  `email` varchar(255) CHARACTER SET utf8mb4 DEFAULT NULL COMMENT '邮箱',
  `create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;

INSERT INTO `test`.`users` (`id`, `username`, `password`, `phone`, `email`, `create_time`) VALUES ('1', 'xiao', '123', '12345678910', '123@qq.com', '2020-04-10 01:22:07');

 

mysql/sql/role.sql

CREATE TABLE `role` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(50) DEFAULT NULL COMMENT '角色名称,显示用',
  `create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `update_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '更新时间',
  `status` tinyint(1) DEFAULT '1' COMMENT '是否失效,1-有效,0-失效',
  `version` int(11) DEFAULT '1',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

INSERT INTO `test`.`role` (`id`, `name`, `create_time`, `update_time`, `status`, `version`) VALUES ('1', 'admin', '2020-04-17 09:35:48', '2020-04-17 09:35:48', '1', '1');

 

构建镜像

cd /opt/mysql_test
docker-compose build

运行

docker-compose up -d

查看日志

docker logs -f mysql
输出:
...
2020-04-21 07:29:05+00:00 [Note] [Entrypoint]: /usr/local/bin/docker-entrypoint.sh: running /docker-entrypoint-initdb.d/init.sql
...

Version: '5.7.29-log'  socket: '/var/run/mysqld/mysqld.sock'  port: 3306  MySQL CommUnity Server (GPL)
2020-04-21T07:29:09.473241Z 0 [Note] InnoDB: Buffer pool(s) load completed at 200421  7:29:09

可以发现,执行了初始化脚本。

 

查看数据

用户表

1.png

 

角色表

 1.png


您可能感兴趣的文档:

--结束END--

本文标题: docker mysql初始化多个sql脚本

本文链接: https://www.lsjlt.com/news/193683.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • docker mysql初始化多个sql脚本
    现有一台服务器,需要部署mysql。其中mysql容器,需要在第一次启动时,执行多个sql文件。文件名说明执行顺序init.sql创建数据库以及用户1users.sql用户表2role.sql用户角色3   &...
    99+
    2023-01-31
    多个 初始化 脚本
  • SpringBoot启动并初始化执行sql脚本问题
    目录SpringBoot启动并初始化执行sql脚本我们先看一下源码下面我们验证一下这两种方式SpringBoot项目在启动时执行指定sql文件1. 启动时执行2. 执行多个sql文件...
    99+
    2023-01-12
    SpringBoot启动 SpringBoot初始化 SpringBoot初始化执行sql
  • SpringBoot如何启动并初始化执行sql脚本
    这篇“SpringBoot如何启动并初始化执行sql脚本”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“SpringBoot如...
    99+
    2023-07-05
  • MySQL初始化脚本mysql_install_db使用简介及选项参数
    mysql_install_db是一个默认放在.../mysql/scripts的一个初始化脚本。 该脚本可以在任何装有perl的操作系统上被使用,在5.6.8之前的版本,该脚本是一个shell脚本,并只...
    99+
    2024-04-02
  • Mysql5.6.36脚本编译安装及初始化教程
    概述 本文为centos7.3自动化编译安装mysql5.3.6的脚本及后续初始化操作,话不多少,直接上脚本。 安装脚本install.py如下: #coding=utf-8 #!/usr/bin/p...
    99+
    2024-04-02
  • go语言多个变量如何初始化
    这篇文章主要介绍了go语言多个变量如何初始化的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇go语言多个变量如何初始化文章都会有所收获,下面我们一起来看看吧。多个变量初始化的方法:1、利用var关键字的形式来一次...
    99+
    2023-07-04
  • go语言多个变量怎么初始化
    多个变量初始化的方法:1、利用var关键字的形式来一次定义并初始化多个变量,语法“var(变量1 = 表达式1 变量2 = 表达式2 变量3 = 表达式3)”;2、使用冒号等于“:=”的形式来一次定义并初始化多个变量,语法“变量1, 变量2...
    99+
    2023-05-14
    go语言 Golang 变量
  • c语言如何初始化多个变量
    在C语言中,可以使用逗号运算符来初始化多个变量。下面是一个示例: int a, b, c; a = 1, b = 2, c = 3;...
    99+
    2024-04-02
  • SpringBoot如何整合liquibase及liquibase生成初始化脚本
    这篇文章主要介绍SpringBoot如何整合liquibase及liquibase生成初始化脚本,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!一. SpringBoot集成liquibase项目集成liquibase...
    99+
    2023-06-29
  • 简易版Linux服务器如何初始化Shell脚本
    本篇内容介绍了“简易版Linux服务器如何初始化Shell脚本”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!该Shell脚本主要用于新安装L...
    99+
    2023-06-09
  • Docker-compose封装mysql并初始化数据以及redis
    现有一台服务器,需要部署mysql和redis。其中mysql容器,需要在第一次启动时,执行sql文件。redis保持空数据即可。 关于Docker-compose的安装,请参考连接:https://www.cnblogs.com...
    99+
    2023-01-31
    初始化 数据 compose
  • OGG中各种数据泵的初始化脚本是什么
    OGG中各种数据泵的初始化脚本是什么,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。一、先导元数据## 导出元数据 (用户模式)userid=system/system_cm...
    99+
    2023-06-06
  • Android中多个ContentProvider的初始化顺序详解
    目录缘起:1. 利用 ContentProvider 初始化 Library:2. 自定义 ContentProvider 初始化顺序:总结缘起: 利用 ContentProvide...
    99+
    2024-04-02
  • SpringBoot整合liquibase及liquibase生成初始化脚本的方式
    目录一. SpringBoot集成liquibase二. liquibase生成数据库表和数据的初始化脚本一. SpringBoot集成liquibase 项目集成liquibase...
    99+
    2024-04-02
  • Linux服务器如何实现安全初始化Shell脚本
    这篇文章主要为大家展示了“Linux服务器如何实现安全初始化Shell脚本”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Linux服务器如何实现安全初始化Shell脚本”这篇文章吧。使用方法:将...
    99+
    2023-06-16
  • Docker 制作 MySQL 镜像并使用 `/docker-entrypoint-initdb.d/` 机制初始化数据
    需求 制作一个 MySQL Docker 镜像并初始化数据库信息 环境 win 11Docker-Desktop 4.14.0 (91374) 分析 启动一个MySQL容器很容易。如何初始化数据呢? 大概我们会尝试很多操作,比如百度常见到 ...
    99+
    2023-08-23
    数据库 mysql docker
  • Android中多个ContentProvider的初始化顺序是什么
    这篇“Android中多个ContentProvider的初始化顺序是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“An...
    99+
    2023-06-30
  • 如何实现简易版Linux服务器初始化Shell脚本
    这篇文章主要介绍如何实现简易版Linux服务器初始化Shell脚本,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!该Shell脚本主要用于新安装Linux服务器系统的初始化工作,具体包括:关闭IPv6模块关闭SELin...
    99+
    2023-06-16
  • vue-cli脚手架初始化项目各个文件夹用途
    node_modules:项目依赖文件夹 public:一般放置一些静态资源(图片)。需要注意,放在public文件夹中的静态资源,webpack进行打包的时候,会原封不动的打包到d...
    99+
    2023-01-28
    vue-cli脚手架初始化项目 vue项目各个文件夹的作用
  • 具有多个返回值的方法的“if”初始化语句
    一分耕耘,一分收获!既然打开了这篇文章《具有多个返回值的方法的“if”初始化语句》,就坚持看下去吧!文中内容包含等等知识点...希望你能在阅读本文后,能真真实实学到知识或者帮你解决心中的疑惑,也欢迎...
    99+
    2024-04-05
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作