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版本如下,配置文件抽象出来,数据、日志输出到服务器上

bash 复制代码
[root@uat-gateway-001 logs]# docker --version
Docker version 26.1.4, build 5650f9b

如下为详细安装步骤

bash 复制代码
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的配置文件需要抽象出来方便后续调整,否则重启容器后配置丢失需要重新处理

bash 复制代码
[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是看着别人都有调整,我这里没有对这个文件进行个性化调整配置

bash 复制代码
#配置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不区分大小写

bash 复制代码
#创建库、创建用户、给用户授权库权限  % 表示随处访问,此处可以改为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,上述配置文件已调整可直接使用

相关推荐
小张是铁粉5 分钟前
docker学习二天之镜像操作与容器操作
学习·docker·容器
会又不会7 分钟前
Jenkins-Publish HTML reports插件
运维·jenkins
烟雨书信18 分钟前
Docker文件操作、数据卷、挂载
运维·docker·容器
IT成长日记21 分钟前
【Docker基础】Docker数据卷管理:docker volume prune及其参数详解
运维·docker·容器·volume·prune
这儿有一堆花27 分钟前
Docker编译环境搭建与开发实战指南
运维·docker·容器
LuckyLay28 分钟前
Compose 高级用法详解——AI教你学Docker
运维·docker·容器
Uluoyu36 分钟前
redisSearch docker安装
运维·redis·docker·容器
IT成长日记5 小时前
【Docker基础】Docker数据持久化与卷(Volume)介绍
运维·docker·容器·数据持久化·volume·
热爱生活的猴子5 小时前
阿里云服务器正确配置 Docker 国内镜像的方法
服务器·阿里云·docker
物联网老王7 小时前
Ubuntu Linux Cursor 安装与使用一
linux·运维·ubuntu