Docker 部署MySQL

算法流沙
• 阅读 160

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;
点赞
收藏
评论区
推荐文章
blmius blmius
4年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
待兔 待兔
1年前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Wesley13 Wesley13
4年前
MySQL安装
1\.配置文件my.ini    在安装目录下创建my.ini文件,配置以下内容\mysql\defaultcharactersetutf8\mysqld\basedirD:\\DevProgram\\MySQL\\mysql5.7.18winx64datadirD:\\DevProgram\\MyS
Stella981 Stella981
4年前
KVM调整cpu和内存
一.修改kvm虚拟机的配置1、virsheditcentos7找到“memory”和“vcpu”标签,将<namecentos7</name<uuid2220a6d1a36a4fbb8523e078b3dfe795</uuid
Easter79 Easter79
4年前
Twitter的分布式自增ID算法snowflake (Java版)
概述分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移
Stella981 Stella981
4年前
Linux下利用Docker搭建MYSQL5.7
引言本文旨在介绍如何在Linux使用Docker快速搭建一个MYSQL环境,用于日常的开发调试,有需要的朋友可参考一下。配置MYSQL1)创建mysql配置目录创建配置目录mkdir p /etc/mysql/conf.d/创建数据和日志目录mkdir pv /opt/my
Wesley13 Wesley13
4年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Stella981 Stella981
4年前
Django之常用配置
<h1在其它文件导入及变量命名注意事项</h1变量命名:必须都大写<preclass'brush:python'fromdjango.confimportsettings</pre<h1静态文件夹配置</h1比如需要引入jquery、bootstrap等文件,需要配置静态文件,步骤如下:步骤一、在<项目名称目录下新建
Wesley13 Wesley13
4年前
vertx读取配置文件,获得端口号
1:在src/conf目录下创建conf.json{"http.port":8082}2:创建Verticle,config().getInteger("http.port",8080),将会读取配置文件,是否有http.port,没有就使用8080作为默认,packageverticl
Ngnix常用配置及和基本功能讲解
Ngnix已经广泛应用于Jone和Jdos的环境部署上,本文对Ngnix的常用的配置和基本功能进行讲解,适合Ngnix入门学习。1核心配置找到Nginx安装目录下的conf目录下nginx.conf文件,Ngnix的基本功能配置是由它提供的。1.1配置文件