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"
相关推荐
0xDevNull2 小时前
MySQL EXPLAIN 用法详解
sql·mysql
代码AC不AC2 小时前
【Linux】进程池
linux·主从模式·进程池
feng一样的男子2 小时前
Rocky Linux 9 配置 IPv6 完整指南
linux·网络
十五年专注C++开发2 小时前
Linux 下用 VS Code 高效调试
linux·运维·服务器·c++·vscode
Sylvia33.2 小时前
体育数据API实战:用火星数据实现NBA赛事实时比分与状态同步
java·linux·开发语言·前端·python
张道宁2 小时前
基于Spring Boot与Docker的YOLOv8检测服务实战
spring boot·yolo·docker
XDHCOM2 小时前
MySQL报错LDAP认证初始化连接池失败,远程修复思路和故障排查分享
数据库·mysql·adb
大胖某人2 小时前
Kali系统安装OpenClaw调用DeepSeek API部署方法详解
linux·人工智能
殷紫川2 小时前
一文搞懂 MySQL 核心架构:Server 层与存储引擎全拆解
mysql·架构