写点什么

Docker 怎么部署 MySQL ?

作者:秃头小帅oi
  • 2024-05-14
    福建
  • 本文字数:2231 字

    阅读完需:约 7 分钟

Docker 怎么部署 MySQL ?

 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;


前端的世界总是在不断变化,作为开发者,我们需要保持好奇心和学习热情,不断探索新的技术,只有这样,我们才能在这个快速发展的时代中立于不败之地。Web Components 就是这样一个值得我们深入探索的领域,让我们拭目以待,它将给前端世界带来怎样的变革。

介绍一款程序员都应该知道的软件JNPF快速开发平台,很多人都尝试用过它,它是功能的集大成者,任何信息化系统都可以基于它开发出来。

这是一个基于 Java Boot/.Net Core 构建的简单、跨平台快速开发框架。前后端封装了上千个常用类,方便扩展;集成了代码生成器,支持前后端业务代码生成,实现快速开发,提升工作效率;框架集成了表单、报表、图表、大屏等各种常用的 Demo 方便直接使用;后端框架支持 Vue2、Vue3。如果你有闲暇时间,可以做个知识拓展。

用户头像

摸个鱼,顺便发点有用的东西 2023-06-19 加入

互联网某厂人(重生版)

评论

发布
暂无评论
Docker 怎么部署 MySQL ?_秃头小帅oi_InfoQ写作社区