首页 > 数据库 >Docker 部署MySQL

Docker 部署MySQL

时间:2024-05-12 13:30:01浏览次数:26  
标签:name utf8mb4 部署 mysql t1 MySQL table Docker schema

1、创建配置目录

mkdir -p MySQL目录/conf

2、切换到配置目录

cd MySQL目录/conf

3、创建配置文件

vim my.cnf
[client]
# 设置mysql客户端连接服务端时默认使用的端口
port=3306
default-character-set=utf8mb4
[mysql]
# 设置mysql客户端默认字符集
default-character-set=utf8mb4
[mysqld]
# 设置3306端口
port=3306
# 允许最大连接数
max_connections=1000
# 允许连接失败的次数。这是为了防止有人从该主机试图攻击数据库系统
max_connect_errors=100
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
# 是否对sql语句大小写敏感,1表示不敏感
lower_case_table_names=1
# MySQL连接闲置超过一定时间后(单位:秒)将会被强行关闭
interactive_timeout =1800
# MySQL默认的wait_timeout  值为8个小时, interactive_timeout参数需要同时配置才能生效
wait_timeout=1800
# Metadata Lock最大时长(秒), 一般用于控制 alter操作的最大时长sine mysql5.6
# 执行 DML操作时除了增加innodb事务锁外还增加Metadata Lock,其他alter(DDL)session将阻塞
lock_wait_timeout=3600
# 内部内存临时表的最大值。
# 比如大数据量的group by ,order by时可能用到临时表,
# 超过了这个值将写入磁盘,系统IO压力增大
tmp_table_size=64M
max_heap_table_size=64M
# 设置分组模式
sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION'
# 设置全局聚合方式
init_connect='SET collation_connection = utf8mb4_general_ci'
init_connect='SET NAMES utf8mb4'
# 设置密码验证规则
authentication_policy=mysql_native_password
# 服务端使用的字符集默认为UTF8
character-set-server=utf8mb4
collation-server=utf8mb4_general_ci
# 跳过客户端发送的字符集信息
skip-character-set-client-handshake
# 禁用DNS解析
skip-name-resolve

4、运行镜像

docker run -p 3306:3306 \
           --name=mysql \
           --restart=always \
           --privileged=true \
           -v MySQL目录/conf:/etc/mysql/conf.d \
           -v MySQL目录/logs:/var/log \
           -v MySQL目录/data:/var/lib/mysql \
           -v MySQL目录/mysql-files:/var/lib/mysql-files \
           -e MYSQL_ROOT_PASSWORD=数据库密码 \
           -d \
           mysql:8.0.32
  • --restart=always:随docker启动。
  • --privileged=true:容器内的root拥有真正的root权限。
  • -e MYSQL_ROOT_PASSWORD=:设置root账号的密码。

5、旧版本字符集校正

旧版本的字符集格式与8.0版本是有出入的,执行下面3个SQL的查询结果,即可校正MySQL字符集为8.0格式。

  • select concat('alter database ', schema_name, ' default character set utf8mb4 collate utf8mb4_general_ci;')
      from information_schema.schemata
     where schema_name not in ('sys', 'mysql', 'performance_schema', 'information_schema')
       and (lower(default_collation_name) != 'utf8mb4_general_ci' or lower(default_character_set_name) != 'utf8mb4');
    
  • select concat('alter table ', table_schema, '.', table_name,
                  ' default character set utf8mb4 collate = utf8mb4_general_ci;')
      from information_schema.tables
     where table_schema not in ('sys', 'mysql', 'performance_schema', 'information_schema')
       and table_type = 'BASE TABLE'
       and lower(table_collation) != 'utf8mb4_general_ci';
    
  • set group_concat_max_len = 10240;
    
    select concat(c1, c2, ';')
      from (select c1, group_concat(c2) c2
              from (select concat('alter table ', t1.table_schema, '.', t1.table_name) c1,
                           concat(' modify ', '`', t1.column_name, '` ', t1.data_type,
                                  if(t1.data_type in ('varchar', 'char'), concat('(', t1.character_maximum_length, ')'),
                                     ''),
                                  if(t1.column_default != '', concat(' default \'', t1.column_default, '\''), ''),
                                  ' collate utf8mb4_general_ci',
                                  if(t1.is_nullable = 'NO', ' not null', ' null'), ' comment ', '''', t1.column_comment,
                                  '''')                                                c2
                      from information_schema.columns t1,
                           information_schema.tables t2
                     where t1.table_schema = t2.table_schema
                       and t1.table_name = t2.table_name
                       and t2.table_type = 'BASE TABLE'
                       and (lower(t1.collation_name) != 'utf8mb4_general_ci' or lower(t1.character_set_name) != 'utf8mb4')
                       and t1.table_schema not in ('sys', 'mysql', 'performance_schema', 'information_schema')) t1
             group by c1) t;
    

标签:name,utf8mb4,部署,mysql,t1,MySQL,table,Docker,schema
From: https://www.cnblogs.com/skysailstar/p/18187720

相关文章

  • 【网络知识系列】-- 网络安全设备应用部署拓扑图
    AI防火墙应用大中型企业边界防护内网管控与安全隔离云数据中心安全联动传统数据中心边界防护AntiDDoS防御系统应用城域网防护数据中心防护IPS新一代入侵防御系统应用互联网边界出口:对出口带宽精细控制,防止带宽滥用;保护内网免受外网攻击。数据中心服务器前端:抵御......
  • consul部署
      下载二进制包下载地址:https://developer.hashicorp.com/consul/install https://releases.hashicorp.com/consul/1.18.1/consul_1.18.1_linux_amd64.zip 下载解压wgethttps://releases.hashicorp.com/consul/1.18.1/consul_1.18.1_linux_amd64.zip[root@mcw12......
  • Docker Compose 备忘清单
    DockerCompose备忘清单Docker-compsoe是一个开源项目,用于定义和运行多容器Docker应用程序的工具。由Docker社区维护。通过一个YAML文件来配置应用程序的服务,以便可以使用一个命令启动、停止和重启整个应用程序。DockerCompose开源地址DockerCompose发行地址github......
  • MySQL Join原理分析(缓冲块嵌套与索引嵌套循环)
    场景假设A表(1000条数据)leftjoinB表(1000条数据)。嵌套循环(Nested-LoopJoin)极简概括:顾名思义多层循环叠加,由于MySQL条数数量有限,所用for循环而不用while,在MySQL中就是多层for循环。性能问题:MySQL使用这种作为join方式最简单,A表joinB表每次join查询都需要一百万次内部关联,每次......
  • java MySQL的in查询两个字段同时相等的多个数据查询
    在Java中想进行下面的查询,不想写循环一条条查selectid,name,address,age fromuserswherename='A' and address='addr1'selectid,name,address,age fromuserswherename='B' and address='addr2'selectid,name,address,age fromusers......
  • 贝壳面试:MySQL联合索引,最左匹配原则是什么?
    文章很长,且持续更新,建议收藏起来,慢慢读!疯狂创客圈总目录博客园版为您奉上珍贵的学习资源:免费赠送:《尼恩Java面试宝典》持续更新+史上最全+面试必备2000页+面试必备+大厂必备+涨薪必备免费赠送:《尼恩技术圣经+高并发系列PDF》,帮你实现技术自由,完成职业升级,薪......
  • MySQL中的一些其他比较符
    一、在两者之间(可以看成数学中的闭区间)BETWEEN...AND...在两个值之间(包含)SELECTLAST_NAME,SALARYFROMemployeesWHERESALARYBETWEEN3500AND6000;二、匹配一个任意值列表IN(set)使用该关键字之后会给定一个列表,所取的值都在这个列表中间,在查询数据的时候,会对这个set中......
  • Microsoft Deployment Toolkit(MDT)是微软提供的一套免费的部署工具,旨在简化和自动化 Wi
    MicrosoftDeploymentToolkit(MDT)是微软提供的一套免费的部署工具,旨在简化和自动化Windows操作系统及其他Microsoft产品的部署过程。MDT可以帮助IT管理员在企业环境中轻松地部署Windows操作系统,以及必要的应用程序和设置。MDT提供了一系列工具和功能,包括:部署环......
  • mysql使用group by查询报错SELECT list is not in GROUP BY clause and contains nona
    官方解释:ONLY_FULL_GROUP_BY是MySQL数据库提供的一个sql_mode,通过这个sql_mode来保证,SQL语句“分组求最值”合法性的检查.这种模式采用了与Oracle、DB2等数据库的处理方式。即不允许selecttargetlist中出现语义不明确的列.对于用到GROUPBY的select语句,查出......
  • Kubernetes Dashboard部署安装recommended.yaml
    ```yml#Copyright2017TheKubernetesAuthors.##LicensedundertheApacheLicense,Version2.0(the"License");#youmaynotusethisfileexceptincompliancewiththeLicense.#YoumayobtainacopyoftheLicenseat##http://www.apache.......