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

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,上述配置文件已调整可直接使用

相关文章:

  • 多模态商品数据接口:融合图像、语音与文字的下一代商品详情体验
  • Loss Margin的原理与推导
  • 一天时间解决期末不挂科
  • 代码解读——ReferenceNet
  • 【位运算】消失的两个数字(hard)
  • STM32 PID控制
  • Hyperlane 框架详解与使用指南
  • shell打印图案
  • 常用的OceanBase调优配置参数
  • Maven 多仓库配置及缓存清理实战分享
  • 【Redis/1-前置知识】分布式系统概论:架构、数据库与微服务
  • vue的created和mounted区别
  • word嵌入图片显示不全-error记
  • Linux下制作Nginx绿色免安装包
  • 介绍一种直流过压保护电路
  • 中和农信创新引领“三农“金融服务新模式
  • vue实现气泡词云图
  • Elasticsearch增删改查语句
  • freeCAD 学习 step1
  • 金属工具制造企业如何做项目管理?数字化系统全面提升交付效率
  • 站长号/小程序搭建
  • 如何建设移动网站/深圳seo推广
  • 南京科技网站设计多少钱/百度首页排名优化平台
  • 一个云主机可以做多少网站/seo优化排名工具
  • 成都网站设计推荐柚米/免费二级域名分发
  • 柳州做网站的/谷歌搜索优化