• 以docker的方式部署mysql数据库的方法


    1、概述

    本文档介绍如何通过docker的方式来运行mysql数据库,进而以最简单的、最快速的方式来部署mysql

    2、部署过程

    接下来,我们来介绍通过docker部署mysql的过程。

    2.1、创建目录(配置、数据)

    在部署之前,通过以下的命令创建配置目录、数据库,用于将容器内数据持久化到本地,和增加自定义的配置。

    MYSQL_BASEDIR=/data/apps/mysql
    
    mkdir -p ${MYSQL_BASEDIR}/data
    mkdir -p ${MYSQL_BASEDIR}/conf

    2.2、启动mysql服务

    #声明mysql相关的环境变量
    MYSQL_VERSION="8.0.28"
    MYSQL_CONTAINER_NAME=mysql-${MYSQL_VERSION}
    MYSQL_HOST_PORT="3306"
    
    MYSQL_BASEDIR=/data/apps/mysql
    MYSQL_DATADIR=${MYSQL_BASEDIR}/data
    MYSQL_CONFDIR=${MYSQL_BASEDIR}/conf
    
    MYSQL_ROOT_PASSWORD="xxxxxxx"
    MYSQL_IMAGE_TAG="172.20.58.152/database/mysql:8.0.28"
    
    # 运行mysql服务
    
    docker run -d \
      --name ${MYSQL_CONTAINER_NAME} \
      -p ${MYSQL_HOST_PORT}:3306 \
      --restart always \
      -v ${MYSQL_DATADIR}:/var/lib/mysql \
      -v ${MYSQL_CONFDIR}:/etc/mysql/conf.d \
      -e MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD} \
      ${MYSQL_IMAGE_TAG}

    说明:上面使用的镜像172.20.58.152/database/mysql:8.0.28已经提前下载到本地的harbor中了,如果是内网可以直接使用,否则,需要先下载同版本的mysql镜像才能运行。

    2.3、查看服务的状态

    • 查看容器状态
    docker ps -l

    • 查看端口启动情况

    [root@nctest-snap-test-02 mysql]# netstat -ntlp | grep 3306
    tcp6       0      0 :::3306                 :::*                    LISTEN      12104/docker-proxy  
    [root@nctest-snap-test-02 mysql]# 

    确保端口已经正常的启动。

    2.4、通过客户端工具进行连接测试

    docker exec -it mysql-8.0.28 bash -c "mysql -u root -p"

    输入环境变量中声明的root用户的密码,来登录到数据库

    已经可以看到其中的具体的库的信息。

    OK,通过以上的步骤,就完成了数据库的基本部署,那么,如果要自定义配置,该怎么做呢?

    继续往下看··· ···

    3、增加自定义的配置

    在开始,我们声明了配置文件目录conf,我们自定义的配置文件就要以.cnf 【后缀必须是这个】方式放在这个目录中。

    以下为具体的示例:

    • 创建配置文件
    cd ${MYSQL_BASEDIR}/conf
    
    cat > mysqld.cnf <<"eof"
    [mysqld]
    default-time-zone=+08:00
    transaction-isolation=READ-COMMITTED
    server-id=1
    log-bin
    expire_logs_days=7
    log_bin_trust_function_creators=1
    max_connect_errors=99999
    max_error_count=65535
    character-set-server=utf8mb4
    lower_case_table_names=1
    max_connections=10000
    max_user_connections=10000
    wait_timeout=31536000
    interactive_timeout=31536000
    innodb_buffer_pool_size=8192M
    max_allowed_packet=100M
    eof

    • 重启mysql容器

    docker restart mysql-8.0.28

    如果无法重启,且报错如下:

    2022-04-02T06:10:08.742692Z 1 [ERROR] [MY-011087] [Server] Different lower_case_table_names settings for server ('1') and data dictionary ('0').
    2022-04-02T06:10:08.742971Z 0 [ERROR] [MY-010020] [Server] Data Dictionary initialization failed.
    2022-04-02T06:10:08.743214Z 0 [ERROR] [MY-010119] [Server] Aborting

    由于字典已经初始化过了,不可以修改,建议重新初始化!

    也就是说,先将配置文件配置好,在进行2.2步骤的启动mysql服务。

    如果已经运行,可以通过以下的步骤,关闭、删除容器、删除数据库目录,重新启动mysql

    • 关闭、删除数据库
    docker stop mysql-8.0.28
    docker rm mysql-8.0.28
    
    
    MYSQL_BASEDIR=/data/apps/mysql
    MYSQL_DATADIR=${MYSQL_BASEDIR}/data
    rm -rf ${MYSQL_DATADIR}/*

    • 重新初始化数据

    #声明mysql相关的环境变量
    MYSQL_VERSION="8.0.28"
    MYSQL_CONTAINER_NAME=mysql-${MYSQL_VERSION}
    MYSQL_HOST_PORT="3306"
    
    MYSQL_BASEDIR=/data/apps/mysql
    MYSQL_DATADIR=${MYSQL_BASEDIR}/data
    MYSQL_CONFDIR=${MYSQL_BASEDIR}/conf
    
    MYSQL_ROOT_PASSWORD="xxxxx"
    MYSQL_IMAGE_TAG="172.20.58.152/database/mysql:8.0.28"
    
    # 运行mysql服务
    
    docker run -d \
      --name ${MYSQL_CONTAINER_NAME} \
      -p ${MYSQL_HOST_PORT}:3306 \
      --restart always \
      -v ${MYSQL_DATADIR}:/var/lib/mysql \
      -v ${MYSQL_CONFDIR}:/etc/mysql/conf.d \
      -e MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD} \
      ${MYSQL_IMAGE_TAG}

    注意:在mysql 8中很多的配置参数都已经发生了变化,配置的时候,根据提示动态的进行调整。

  • 相关阅读:
    【BZOJ3533】向量集(SDOI2014)-线段树+凸壳+二分
    【BZOJ4869】相逢是问候(六省联考2017)-扩展欧拉定理+线段树
    【BZOJ4012】开店(HNOI2015)-动态点分治+set
    【BZOJ1095】捉迷藏(ZJOI2007)-动态点分治+堆
    【BZOJ2299】向量(HAOI2011)-裴蜀定理
    【BZOJ4942】整数(NOI2017)-线段树+压位
    【BZOJ3594】方伯伯的玉米田(SCOI2014)-DP+二维树状数组
    背包DP专题
    【2018.11.7】【luoguNOIp 热身赛】解题报告及总结
    【一天一DP计划】状压DP
  • 原文地址:https://www.cnblogs.com/chuanzhang053/p/16092020.html
Copyright © 2020-2023  润新知