zoukankan      html  css  js  c++  java
  • CentOS中使用Dockerfile部署初始化sql文件的mysql

    场景

    Docker中部署mysql数据库:

    https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/99213563

    CentOS中使用Dockerfile部署带websocket的SpringBoot的jar包:

    https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/119849922

    在上面部署Mysql镜像和会使用Dockerfile的基础上。

    如果要实现定制化一个mysql镜像,使容器运行起来就会有数据。

    注:

    博客:
    https://blog.csdn.net/badao_liumang_qizhi
    关注公众号
    霸道的程序猿
    获取编程相关电子书、教程推送与免费下载。

    实现

    1、新建文件

    在服务器上某路径下新建文件夹mysqldockerfile,在此文件夹下新建或者上传如下四个文件

     2、编辑utf8mb4.cnf数据字符编码文件

    init_connect='SET NAMES utf8mb4'
    character-set-server=utf8mb4
    collation-server = utf8mb4_unicode_ci
    default-time_zone = '+8:00'
    [mysql]
    default-character-set=utf8mb4
    [client]
    default-character-set=utf8mb4

    3、编辑脚本文件install_data.sh

    #!/bin/bash
    mysql -uroot -p$MYSQL_ROOT_PASSWORD <<EOF
    source $WORK_PATH/$FILE_0;

    4、编辑Dockerfile文件

    FROM mysql:5.7
    ENV WORK_PATH /usr/local/work
    ENV AUTO_RUN_DIR /docker-entrypoint-initdb.d
    
    ENV FILE_0  init.sql
    ENV INSTALL_DATA_SHELL install_data.sh
    
    RUN mkdir -p $WORK_PATH
    COPY utf8mb4.cnf /etc/mysql/conf.d/utf8mb4.cnf
    COPY ./$FILE_0 $WORK_PATH/
    COPY ./$INSTALL_DATA_SHELL $AUTO_RUN_DIR/
    EXPOSE 3306
    RUN chmod a+x $AUTO_RUN_DIR/$INSTALL_DATA_SHELL

    5、最后init.sql是数据库sql文件

    set character set  utf8;
    drop database if exists badao;
    CREATE DATABASE badao DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
    GRANT all ON badao.* TO 'root'@'%';
    use badao;
    
    -- ----------------------------
    -- 1、部门表
    -- ----------------------------
    drop table if exists sys_dept;
    create table sys_dept (
      dept_id           bigint(20)      not null auto_increment    comment '部门id',
      parent_id         bigint(20)      default 0                  comment '父部门id',
      ancestors         varchar(50)     default ''                 comment '祖级列表',
      dept_name         varchar(30)     default ''                 comment '部门名称',
      order_num         int(4)          default 0                  comment '显示顺序',
      leader            varchar(20)     default null               comment '负责人',
      phone             varchar(11)     default null               comment '联系电话',
      email             varchar(50)     default null               comment '邮箱',
      status            char(1)         default '0'                comment '部门状态(0正常 1停用)',
      del_flag          char(1)         default '0'                comment '删除标志(0代表存在 2代表删除)',
      create_by         varchar(64)     default ''                 comment '创建者',
      create_time         datetime                                   comment '创建时间',
      update_by         varchar(64)     default ''                 comment '更新者',
      update_time       datetime                                   comment '更新时间',
      primary key (dept_id)
    ) engine=innodb auto_increment=200 comment = '部门表';
    
    -- ----------------------------
    -- 初始化-部门表数据
    -- ----------------------------
    set character set  utf8;
    insert into sys_dept values(100,  0,   '0',          '若依科技',   0, '若依', '15888888888', 'ry@qq.com', '0', '0', 'admin', sysdate(), '', null);
    insert into sys_dept values(101,  100, '0,100',      '深圳总公司', 1, '若依', '15888888888', 'ry@qq.com', '0', '0', 'admin', sysdate(), '', null);
    insert into sys_dept values(102,  100, '0,100',      '长沙分公司', 2, '若依', '15888888888', 'ry@qq.com', '0', '0', 'admin', sysdate(), '', null);
    insert into sys_dept values(103,  101, '0,100,101',  '研发部门',   1, '若依', '15888888888', 'ry@qq.com', '0', '0', 'admin', sysdate(), '', null);
    insert into sys_dept values(104,  101, '0,100,101',  '市场部门',   2, '若依', '15888888888', 'ry@qq.com', '0', '0', 'admin', sysdate(), '', null);
    insert into sys_dept values(105,  101, '0,100,101',  '测试部门',   3, '若依', '15888888888', 'ry@qq.com', '0', '0', 'admin', sysdate(), '', null);
    insert into sys_dept values(106,  101, '0,100,101',  '财务部门',   4, '若依', '15888888888', 'ry@qq.com', '0', '0', 'admin', sysdate(), '', null);
    insert into sys_dept values(107,  101, '0,100,101',  '运维部门',   5, '若依', '15888888888', 'ry@qq.com', '0', '0', 'admin', sysdate(), '', null);
    insert into sys_dept values(108,  102, '0,100,102',  '市场部门',   1, '若依', '15888888888', 'ry@qq.com', '0', '0', 'admin', sysdate(), '', null);
    insert into sys_dept values(109,  102, '0,100,102',  '财务部门',   2, '若依', '15888888888', 'ry@qq.com', '0', '0', 'admin', sysdate(), '', null);

    要注意这里的设置编码的地方

    set names utf8;
    set character set  utf8;
    drop database if exists badao;
    CREATE DATABASE badao DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;

    判断是否已经存在数据库,存在则删除掉,然后授予root权限。

    最后删除创建表,然后插入表数据时要注意,避免出现中文乱码问题,在插入数据前要添加

    set character set  utf8;

    比如:

    -- ----------------------------
    -- 初始化-部门表数据
    -- ----------------------------
    set character set  utf8;
    insert into sys_dept values(100,  0,   '0',          '若依科技',   0, '若依', '15888888888', '123qq.com', '0', '0', 'admin', sysdate(), '', null);
    insert into sys_dept values(101,  100, '0,100',      '深圳总公司', 1, '若依', '15888888888', '123qq.com', '0', '0', 'admin', sysdate(), '', null);

    6、构建镜像

    docker build -t mysqlwithdata .

    注意后面有个点,代表Dockerfile在当前目录

    7、运行容器

    docker run -itd --name mysqlwithdata -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysqlwithdata

    8、运行成功后查看运行中的容器

    docker ps

     

    9、此时访问数据库应该已经带数据了

    如果没有数据,可以查看日志

    docker logs -f mysqlwithdata

    如果要修改脚本或者配置文件等需要重新执行该过程,需要

    停掉容器

    docker stop mysqlwithdata

    删除掉容器

    docker rm mysqlwithdata

    删除掉镜像

    docker rmi mysqlwithdata:latest

    然后修改后重新执行上面的过程。

    博客园: https://www.cnblogs.com/badaoliumangqizhi/ 关注公众号 霸道的程序猿 获取编程相关电子书、教程推送与免费下载。
  • 相关阅读:
    Xposed学习一:初探
    drozer浅析三:命令实现与交互
    drozer源码学习二:info+scanner
    drozer源码学习:app
    android dalvik浅析一:解释器及其执行
    智能汽车安全风险及防护技术分析
    几维安全“把手伸向金融交易系统”
    几维安全携手苏宁易购,创造企业安全建设新模式
    传输协议不安全,数据泄露谁之过?——流量劫持技术分析
    【一周安全热点】黑客“撞库”破解抖音百万账户密码两月获利上百万元|美国佛罗里达州向勒索软件运营商支付60万美元赎金
  • 原文地址:https://www.cnblogs.com/badaoliumangqizhi/p/15206229.html
Copyright © 2011-2022 走看看