Linux之Docker安装Mysql 8.0+

1. 拉取Mysql镜像(有外网的情况,如果没有找一台有的拉取镜像后打包,在进行解压镜像)

bash 复制代码
sudo docker pull mysql:8.0.35

2.创建MySQL数据目录和配置目录

bash 复制代码
sudo mkdir -p /usr/local/docker/mysql8/data
sudo mkdir -p /usr/local/docker/mysql8/conf
sudo mkdir -p /usr/local/docker/mysql8/logs

3. 确保目录存在并有正确权限

bash 复制代码
sudo chmod 755 /usr/local/docker/mysql8 /usr/local/docker/mysql8/*

4. 创建my.cnf配置文件

bash 复制代码
sudo vim /usr/local/docker/mysql8/conf/my.cnf

编辑my.cnf配置文件

bash 复制代码
[mysqld]
# 基础设置
user = mysql
port = 3306  #容器内部的端口,不是宿主机的端口
socket = /var/run/mysqld/mysqld.sock

# 数据目录
datadir = /var/lib/mysql

# 字符集设置
character-set-server = utf8mb4
collation-server = utf8mb4_general_ci
init_connect = 'SET NAMES utf8mb4'


# 连接设置
wait_timeout = 28800
interactive_timeout = 28800

#严格性和行为规则 
sql_mode = NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES,ONLY_FULL_GROUP_BY,NO_ZERO_IN_DATE
# 设置为1表示创建的数据库名和表名转换为小写存储,查询时不区分大小写(Linux 默认为0 区分大小写(按创建时的名称严格匹配))
lower_case_table_names = 1
# 增大允许的连接错误次数:控制客户端在达到多少次连接错误后会被服务器阻止连接
max_connect_errors = 1000
# 排序缓冲区大小例如设为 4MB;设置过大会浪费内存(每个连接都会独立分配);监控 Sort_merge_passes(SHOW STATUS LIKE 'Sort%'),如果值较高,说明排序缓冲区可能不足。
sort_buffer_size = 16M
# 查询最大允许数据包大小,可以增加到128MB(134217728字节)
max_allowed_packet = 128M
# 允许的最大连接数
max_connections = 1000
# 增加锁等待超时时间
innodb_lock_wait_timeout = 60
# 增大缓冲池(根据服务器内存调整)
innodb_buffer_pool_size = 4G
# 增加并发线程数 # 默认0(无限制),可设为CPU核心数的2倍
innodb_thread_concurrency = 0
# 控制事务日志(redo log)刷新行为
innodb_flush_log_at_trx_commit = 1 		
 


# 日志设置
log-error = /var/log/mysql/error.log
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow-query.log
long_query_time = 2


# 安全设置
skip_name_resolve = 1
local_infile = 0

[mysql]
default-character-set = utf8mb4

[client]
default-character-set = utf8mb4
port = 3306 # 容器内部的端口,不是宿主机的端口
socket = /var/run/mysqld/mysqld.sock

赋予权限:

bash 复制代码
sudo chmod 644 /usr/local/docker/mysql8/conf/my.cnf

5. 运行创建Docker网络(如果需要)

bash 复制代码
docker network create mysql-network

6. 运行MySQL容器

bash 复制代码
docker run -d \
  --name isolated-mysql8 \
  --unless-stopped always \
  -p 3307:3306 \
  -v /usr/local/docker/mysql8/data:/var/lib/mysql \
  -v /usr/local/docker/mysql8/conf/my.cnf:/etc/mysql/conf.d/custom.cnf \
  -v /usr/local/docker/mysql8/logs:/var/log/mysql \
  -e MYSQL_ROOT_PASSWORD='1908@123456' \
  -e MYSQL_DATABASE=isolated_db \
  -e TZ=Asia/Shanghai \
  mysql:8.0.39 \
  --character-set-server=utf8mb4 \
  --collation-server=utf8mb4_general_ci \
  --default-authentication-plugin=mysql_native_password 
  --bind-address=0.0.0.0

停止并删除容器

bash 复制代码
docker stop isolated-mysql8

docker rm isolated-mysql8

查看MySQL启动日志

bash 复制代码
docker logs isolated-mysql8

实时查看最后50行

bash 复制代码
docker logs -f --tail 50 isolated-mysql8

测试数据库连接

bash 复制代码
docker exec -it isolated-mysql8 mysql -uroot -p'1908@123456'

测试连接 - 查看所有数据库

bash 复制代码
docker exec isolated-mysql8 mysql -uroot -p'1908@123456' -e "SHOW DATABASES;"

测试连接 - 查看MySQL版本

bash 复制代码
docker exec isolated-mysql8 mysql -uroot -p'1908@123456' -e "SELECT VERSION();"

查看当前运行状态

bash 复制代码
docker exec isolated-mysql8 mysql -uroot -p'1908@123456' -e "STATUS"
相关推荐
风落无尘7 分钟前
Stable Diffusion WebUI & ComfyUI 完整安装教程:官方部署+一键整合包+Docker容器化(2026最新)
docker·容器·stable diffusion
廿一夏34 分钟前
MySql存储引擎与索引
数据库·sql·mysql
小鹏linux1 小时前
Ubuntu 22.04 部署开源免费具有精美现代web页面的Casdoor账号管理系统
linux·前端·ubuntu·开源·堡垒机
在角落发呆2 小时前
Linux转发配置:解锁网络互联的核心密码
linux·运维·网络
齐潇宇2 小时前
Zabbix 7 概述与配置
linux·zabbix·监控告警
敲个大西瓜3 小时前
Java项目常用数据归档方式
mysql
江公望4 小时前
Ubuntu htop命令,10分钟讲清楚
linux·服务器
哎呦,帅小伙哦4 小时前
Linux 时间:从原子钟到 clock_gettime 的每一面
linux·运维·服务器
张小姐的猫4 小时前
【Linux】多线程 —— 线程互斥
linux·运维·服务器·c++
CodeMartain4 小时前
Dify Windows 原生部署(无 Docker、纯本地)
运维·docker·容器