当前位置: 首页 > java >正文

docker 安装运行mysql8.4.4

先前一直使用mysql5.7,最新公司新项目,无意翻阅看下5.x版本mysql官方已经不再支持,于是准备选用MySQL8,官方8.4版本是个长期支持版本,选则最新版本8.4.4,如下是MySQL官方对版本支持计划

MySQL版本下载查看地址:https://dev.mysql.com/downloads/mysql/

本文基于docker安装,docker版本如下,配置文件抽象出来,数据、日志输出到服务器上

[root@uat-gateway-001 logs]# docker --version
Docker version 26.1.4, build 5650f9b

如下为详细安装步骤 

mysql
docker pull mysql:8.4.4启动mysql8,目的提取配置文件到容器外
docker run -p 13308:3306 --name mysql8 -e MYSQL_ROOT_PASSWORD=ybwCloud@123 -d mysql:8.4.4#拷贝mysql配置文件到本地
docker cp mysql8:/etc/mysql /etc/docker/mysql8/config
#拷贝mysql配置文件数据源到本地
docker cp mysql8:/var/lib/mysql /etc/docker/mysql8/data
#在本地创建logs日志存储文件
#创建错误日志存放文件
mkdir -p /etc/docker/mysql8/logs/error/
touch /etc/docker/mysql8/logs/error/error_log.log#不建议改
#创建查询日志存放地址  原地址/var/lib/mysql/9056323b388c.log 最好复制源文件否则有权限问题
#在外部加了mysql权限没成功,直接在运行容器时加了--privilged  也没成功
mkdir -p /etc/docker/mysql8/logs/general/
touch /etc/docker/mysql8/logs/general/mysql_general.log
#创建慢查询日志存放文件 原本存在/var/lib/mysql/9056323b388c-slow.log 最好复制源文件否则有问题
mkdir -p /etc/docker/mysql8/logs/show_query/
touch /etc/docker/mysql8/logs/show_query/show_query.log
#给日志赋权限
chmod 777 /etc/docker/mysql8/logs/error/error_log.log
chmod 777 /etc/docker/mysql8/logs/general/mysql_general.log
chmod 777 /etc/docker/mysql8/logs/show_query/show_query.log#chmod -R 777 /etc/docker/mysql8/logs/配置MYsql参数
vim /etc/docker/mysql8/config/my.cnf移除原始启动容器
docker rm -f mysql8

mysql的配置文件需要抽象出来方便后续调整,否则重启容器后配置丢失需要重新处理

[mysqld]
pid-file        = /var/run/mysqld/mysqld.pid
socket          = /var/run/mysqld/mysqld.sock
datadir         = /etc/docker/mysql8/data
secure-file-priv= NULL#管理多因素身份认证功能
#authentication_policy=caching_sha2_password#server级别字符集,服务器安装时指定的默认编码格式,不要人为定义,让系统自己定义
character-set-server = utf8mb4
#设置字段编码
collation-server = utf8mb4_general_ci
#设置初始化连接编码SET NAMES utf8mb4
init_connect='SET NAMES utf8mb4'#不区分数据大小写
lower_case_table_names = 1
#innodb使用后台线程处理数据页的读取IO(输入输出请求),根据cpu核数来更改默认是4
innodb_read_io_threads = 4
#数据库落盘脏页个数
innodb_io_capacity = 400#定义innodb存储引擎的表数据和索引数据的最大内存缓冲区,看机器内存情况定
innodb_buffer_pool_size = 2G
#每个日志文件的大小,综合大小到缓冲池大小的5%~100%,避免日志覆写上不必要的缓冲池刷新行为。注意一个大的日志文件大小会增加恢复进程所需要的时间
#废弃innodb_log_file_size = 128M
innodb_redo_log_capacity = 128M
#独立表空间模式,每个数据库的没表表都会生成一个数据空间
innodb_file_per_table = 1#设置innodb线程的并发数
innodb_thread_concurrency=4#innodb存储引擎下 Buffer Pool缓存大小,一般为物理内存的60%-70%存的60%-70%
innodb_buffer_pool_size=2G#innodb存储引擎下,行锁锁定时间
innodb_lock_wait_timeout=10#每次事务提交的时候会把log buffer刷到文件系统中去,但并不会立即刷写到磁盘。如果只是MySQL数据库挂掉了,由于文件系统没有问题数据不会丢失,减少由事务日志引起的磁盘 I/O
innodb_flush_log_at_trx_commit = 2#索引缓冲区大小
key_buffer_size = 512M#禁用 local-infile选项
local-infile = on#指定链接空闲多长时间断开
lock_wait_timeout = 3600#链接十次数据库服务不正常,会锁住IP安全设置
max_connect_errors = 10#表描述符的缓存大小
table_open_cache = 20000#数据字典缓存中打开的表数量软限制
table_definition_cache = 2000#每个线程的内存大小
thread_stack = 512k#每个需要排序的线程分配该大小的一个缓冲空间。增加该值可以加速ORDER BY或GROUP BY操作。不宜过大,占内存
sort_buffer_size = 2M#用于表关联缓存空间(缓存块嵌套循环连接) 可以避免多次的内表扫描,从而提高性能
join_buffer_size=2M#线程池缓存大小
thread_cache_size = 256#关闭一个交互链接之前所需要等待的时间秒
interactive_timeout = 600
#关闭一个非交互链接之前所需要等待的时间秒
wait_timeout = 600#最大进程连接数
max_connections = 6000
#用户的最大链接数量,剩余链接数用于DBA管理
max_user_connections = 5800
# 暂存的等待的链接数量
back_log = 1024#默认存储引擎 5.5以上默认就是InnoDB
default-storage-engine=InnoDB#临时表的内存缓存大小
tmp_table_size = 32M#临时表的最大值
max_heap_table_size = 512M#log settings 错误日志存放地址
log_error = /var/log/mysql/error/mysql-error.log
#通用查询日志是否开启 默认关闭 OFF关闭 ON开启
general_log=OFF
#查询日志地址
general_log_file = /var/log/mysql/query/mysql_general.log#开启二进制日志 正常情况必须开启 ON开启 OFF关闭
log-bin=mysql-bin-log
#binlog的日志存放地址
#log_bin_basename=/var/log/mysql/binlog
log_bin = /var/log/mysql/mysql-binlogs/mysql-bin
# mysql binlog日志文件保存的过期时间,过期后自动删除 一般不启用,主从中更加不能启用
#expire_logs_days = 5#显示日志中的时间参数
log_timestamps = SYSTEM#配置时区
default-time_zone = '+8:00'   #密码加密方式
mysql_native_password=ON
#default_authentication_plugin = caching_sha2_password#服务能处理的请求包最大大小
max_allowed_packet = 512M#设置最大包,限制server接受的数据包大小
#slave_max_allowed_packet = 512M
replica_max_allowed_packet = 512M#打开的文件描述符限制
open_files_limit = 65536#标识数据库
server_id = 1
#二进制文件大小
binlog_expire_logs_seconds = 604800#存储整个事务生成的binlog event的内存大小
binlog_cache_size=10480
#二进制非事务语句的缓存大小
binlog_stmt_cache_size=4096#sync_binlog:是MySQL 的二进制日志(binary log)同步到磁盘的频率。当每进行1次事务提交之后,MySQL将进行一次fsync之类的磁盘同步指令来将binlog_cache中的数据强制写入磁盘。保证数据不丢失。
sync_binlog = 1#二进制启用后,变量则启用,控制是否可以信任存储函数创建者,1 不会对创建存储函数实施做控制
log_bin_trust_function_creators = 1# 检索的行数必须达到此值才可被记为慢查询
#min_examined_row_limit = 100# 作为从库时生效,从库复制中如何有慢sql也将被记录
#log_slow_slave_statements = 1# Custom config should go here 调用/ect/mysql/conf.d下的配置文件
!includedir /etc/mysql/conf.d/

mysql.cnf是看着别人都有调整,我这里没有对这个文件进行个性化调整配置

#配置mysql.cnf
#vim /usr/local/src/docker/mysql/config/conf.d/mysql.cnf
##############################
[mysql]
prompt = "\\u@\\d \\r:\\m:\\s>"
no_auto_rehash
loose-skip-binary-as-hex
################################
prompt = "\\u@\\d \\r:\\m:\\s>"   #设置命令行工具的提示符 默认为 mysql>
no_auto_rehash                    #命令行工具中的自动命令补全功能
loose-skip-binary-as-hex          #

启动运行容器

docker run -p 3308:3306 --name mysql8 -e MYSQL_ROOT_PASSWORD=设置数据库root密码 -e TZ=Asia/Shanghai \
-v /etc/docker/mysql8/config:/etc/mysql \
-v /etc/docker/mysql8/data:/etc/docker/mysql8/data \
-v /etc/docker/mysql8/logs:/var/log/mysql \
--privileged=true --restart=always -d mysql:8.4.4 --lower_case_table_names=1

#说明下,3308为容器外访问端口,3306容器内访问端口,-v 设置环境,冒号前为容器外路径,冒号后为容器内路径,privileged=true为给与最大权限,restart=always 自动启动容器,lower_case_table_names 为0区分大小写 1不区分大小写

#创建库、创建用户、给用户授权库权限  % 表示随处访问,此处可以改为Ip固定Ip访问,localhost本地访问
CREATE USER 'user'@'%' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON youDatabase.* TO 'user'@'%';

这里踩雷几处:

1:mysql8和MySQL5.7配置项很多对参数名称进行调整,上述配置文件已调整为mysql8

2:mysql8默认使用的身份认证插件

3:重启容器后,一直报错原因是旧数据和新容器不兼容,后来data目录全部删除,重启解决

4:binlog目录5.7参数名log_bin_basename,8参数名log_bin,上述配置文件已调整可直接使用

http://www.xdnf.cn/news/13151.html

相关文章:

  • ceph 查看 pg 迁移进度的脚本
  • Oracle SQL*Plus 配置上下翻页功能
  • 大数据零基础学习day1之环境准备和大数据初步理解
  • APP开发好后如何分发内测
  • uniapp+vue2+h5图片下载保存,微信浏览器、非微信浏览器
  • java8 通过方法引用 vo::setLevel将对象的 setter 方法作为参数传递
  • Linux日志管理和时间管理
  • Java多线程实现之Callable接口深度解析
  • PyTorch终极实战:从自定义层到模型部署全流程拆解​
  • 接口测试中缓存处理策略
  • Code Composer Studio快捷键
  • OkHttp 中实现断点续传 demo
  • 【数据结构】图论经典:Dijkstra最短路径算法精解与工程优化
  • 计算机毕业设计微信小程序题库系统 在线答题 题目分类 错题本管理 学习记录查询系统源码+论文+PPT+讲解 基于微信小程序的题库系统设计与实现
  • JavaScript 核心对象深度解析:Math、Date 与 String
  • qt3d自定义生成mesh图形
  • 深度学习小项目合集-视频介绍下自取
  • 计算机系统概述(4)
  • LocalDate类使用
  • 电脑扩展屏幕工具
  • 【完整源码】白泽题库系统:基于PyQt5的智能刷题与考试平台开发全解析
  • 群晖NAS是否有专业的安全防护措施?是否支持无密码登录?
  • Android第十七次面试总结(Java数据结构)
  • 在写外部FLASH的应用时发现一些问题,在这里分享一下我的想法
  • 【OpenCV】双相机结构光成像与图像交叉融合实现【python篇】
  • Spring详解【1】
  • 跨平台商品数据接口的标准化与规范化发展路径:淘宝京东拼多多的最新实践
  • 2.1 状态空间表达式
  • C++课设:实现本地留言板系统(支持留言、搜索、标签、加密等)
  • 中文分词双向匹配