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"
相关推荐
2401_8920709819 小时前
【Linux C++ 日志系统实战】LogFile 日志文件管理核心:滚动策略、线程安全与方法全解析
linux·c++·日志系统·日志滚动
雪可问春风19 小时前
docker环境部署
运维·docker·容器
lwx91485220 小时前
Linux-Shell算术运算
linux·运维·服务器
somi720 小时前
ARM-驱动-02-Linux 内核开发环境搭建与编译
linux·运维·arm开发
呆瑜nuage20 小时前
MySQL表约束详解:8大核心约束实战指南
数据库·mysql
双份浓缩馥芮白20 小时前
【Docker】Linux 迁移 docker 目录(软链接)
linux·docker
元宝骑士20 小时前
FIND_IN_SET使用指南:场景、优缺点与MySQL优化策略
后端·mysql
黄昏晓x21 小时前
Linux ---- UDP和TCP
linux·tcp/ip·udp
路溪非溪21 小时前
Linux驱动开发中的常用接口总结(一)
linux·运维·驱动开发
此刻觐神21 小时前
IMX6ULL开发板学习-01(Linux文件目录和目录相关命令)
linux·服务器·学习