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"
相关推荐
等我调个Bug10 分钟前
Linux基本指令
linux·服务器
_upupup9 小时前
Linux的调试工具——gdb/cgdb
linux·服务器
JeJe同学10 小时前
Docker镜像导入、容器启动
linux·运维·docker
Jason_zhao_MR10 小时前
Linux与实时控制如何兼得
linux·嵌入式硬件·机器人·工业控制
闲云野鹤在人间11 小时前
MySQL|从理论、安装、备份到主从复制、MHA高可用详解
linux·运维·数据库·mysql·云计算
一个风轻云淡12 小时前
GCC 和 GDB命令简单解读
java·linux·前端
H.莓飛12 小时前
【数据结构】二叉树_OJ题
linux·开发语言·数据结构·算法
资料库0112 小时前
Linux 8个常见运维故障排查
java·linux·运维
要开心吖ZSH12 小时前
MySQL 慢 SQL 排查操作手册-个人笔记版
java·笔记·sql·mysql·慢查询
零基础12313 小时前
Ubuntu 常用命令汇总
linux·运维·开发语言