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"
相关推荐
小猿姐9 小时前
MySQL Top 10 热点问题 AI 运维实战:从内核诊断到云原生运维
mysql·云原生·aiops
AlfredZhao12 小时前
vi 删除指定范围的行,不用再反复按 dd
linux·vi
用户97183563346618 小时前
银河麒麟 KY10 申威(SW64) 安装 nginx-1.16.1-2.p01.ky10.sw_64.rpm 详细步骤
linux
猪脚踏浪19 小时前
linux 拷贝文件或目录到指定的位置
linux
云技纵横19 小时前
Gap Lock 死锁实战:5 秒在本地复现 MySQL 间隙锁死锁
后端·mysql
无响应de神19 小时前
三、用户与权限管理
数据库·mysql
摇滚侠1 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
bush41 天前
嵌入式linux学习记录十四、术语
linux·嵌入式
载数而行5201 天前
Linux 11 动态监控指令top
linux