docker安装mysql
一、配置Docker镜像
毫秒镜像:https://1ms.run/
/etc/docker添加文件daemon.json
daemon.json文件内容为:
{
"registry-mirrors": ["https://docker.1ms.run"]
}重启
systemctl daemon-reload
systemctl restart docker二、mysql 5.5
2.1 拉取镜像
docker pull mysql:5.52.2 宿主目录创建
宿主新建目录 /opt/mysql_5.5
新建文件 /opt/mysql_5.5/conf/my.cnf
my.conf文件内容:
[client]
#设置客户端默认字符集utf8mb4
default-character-set=utf8mb4
[mysql]
#设置服务器默认字符集为utf8mb4
default-character-set=utf8mb4
[mysqld]
#配置服务器的服务号,具备日后需要集群做准备
server-id = 1
#数据库文件存放位置
datadir = /var/lib/mysql
#错误日志:MySQL默认会开启错误日志,记录严重的问题和错误。你可以设置log_error选项来指定错误日志文件的路径和名称
#log_error = /var/log/mysql/error.log
#开启MySQL数据库的二进制日志,用于记录用户对数据库的操作SQL语句,具备日后需要集群做准备
#log_bin = /var/log/mysql/mysql-bin.log
#慢查询日志:要开启慢查询日志 需要设置slow_query_log选项为1,并设置slow_query_log_file选项来指定日志文件的路径和名称。你还可以设置long_query_time选项来定义查询执行多久才被认为是“慢”的
#slow_query_log = 1
#long_query_time = 1 #慢查询时间 超过1秒则为慢查询
#slow_query_log_file = /data/mysql/mysql-slow.log
#设置清理超过30天的日志,以免日志堆积造过多成服务器内存爆满。2592000秒等于30天的秒数
# binlog_expire_logs_seconds = 2592000
#解决MySQL8.0版本GROUP BY问题
# sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION'
#允许最大的连接数
max_connections=1000
#禁用符号链接以防止各种安全风险
symbolic-links=0
# 设置东八区时区
default-time_zone = '+8:00'AI优化后的设置
# ================================
# MySQL 5.5 推荐配置模板
# ================================
[client]
# 客户端默认字符集
default-character-set=utf8mb4
[mysql]
# mysql 命令行工具默认字符集
default-character-set=utf8mb4
[mysqld]
##########################
# 基本配置
##########################
server-id = 1 # 唯一服务ID,用于复制
datadir = /var/lib/mysql # 数据存放路径
socket = /var/lib/mysql/mysql.sock # socket 文件
##########################
# 字符集设置
##########################
character-set-server = utf8mb4
collation-server = utf8mb4_general_ci
##########################
# 网络 & 连接
##########################
max_connections = 500 # 最大连接数,根据服务器内存调整
skip-name-resolve = 1 # 禁用 DNS 解析,加快连接速度
##########################
# 安全性
##########################
symbolic-links=0 # 禁用符号链接,防止安全风险
##########################
# 日志配置
##########################
# 错误日志
log_error = /var/log/mysql/error.log
# 慢查询日志
slow_query_log = 1
slow_query_log_file = /var/log/mysql/mysql-slow.log
long_query_time = 1 # 超过1秒认为慢查询
# 二进制日志(复制/集群用)
# log_bin = /var/log/mysql/mysql-bin.log
expire_logs_days = 30 # 自动清理超过30天的binlog
##########################
# SQL模式
##########################
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
##########################
# 性能调优(可根据内存调整)
##########################
table_open_cache = 400
key_buffer_size = 128M
sort_buffer_size = 2M
read_buffer_size = 2M
read_rnd_buffer_size = 1M
join_buffer_size = 1M
thread_cache_size = 8
query_cache_size = 64M
query_cache_type = 1
##########################
# 时区
##########################
default-time_zone = '+8:00'
##########################
# 其他可选
##########################
# max_allowed_packet = 64M
# tmp_table_size = 32M
# innodb_buffer_pool_size = 512M # InnoDB表性能优化2.3 启动容器
容器启动命令
docker run -p 33061:3306 --restart=always --name mysql_5.5 --privileged=true -v /opt/mysql_5.5/log:/var/log/mysql -v /opt/mysql_5.5/data:/var/lib/mysql -v /opt/mysql_5.5/conf/my.cnf:/etc/mysql/my.cnf -e MYSQL_ROOT_PASSWORD=abc@1230 -d mysql:5.5docker-compose.yml文件启动方式
version: '2'
services:
db:
image: mysql:5.5
restart: always
container_name: mysql_5.5
ports:
- "33061:3306"
environment:
MYSQL_DATABASE: database
MYSQL_ROOT_PASSWORD: abc@1230
volumes:
- /data/mysql_5.5/log:/var/log/mysql
- /data/mysql_5.5/data:/var/lib/mysql
- /data/mysql_5.5/conf/my.cnf:/etc/mysql/my.cnf启动命令
docker-compose -f /root/docker-compose-mysql.yml up -d参数说明
-p表示端口映射
--restart=always表示容器退出时总是重启
--name表示容器命名
--privileged=true表示赋予容器权限修改宿主文件权利
-v /opt/mysql_5.5/log:/var/log/mysql表示容器日志挂载到宿主机
-v /opt/mysql_5.5/data:/var/lib/mysql表示容器存储文件挂载到宿主机
-v /opt/mysql_5.5/conf/my.cnf:/etc/mysql/my.cnf表示容器配置文件挂载到宿主机
-e MYSQL_ROOT_PASSWORD=abc@1230表示设置mysql的root用户密码,建议用强密码
-d表示后台运行
mysql:5.5表示镜像名称
MySQL8.0
my.cnf文件内容
[mysqld]
# 设置端口
port=3306
# MySQL 安装目录(容器里是这个)
basedir=/usr
# 数据文件目录
datadir=/var/lib/mysql
# 允许最大连接数
max_connections=200
# 防暴力连接
max_connect_errors=10
# 字符集
character-set-server=utf8mb4
collation-server=utf8mb4_general_ci
# 默认存储引擎
default-storage-engine=INNODB
# 认证插件
default_authentication_plugin=mysql_native_password
[mysql]
default-character-set=utf8mb4
[client]
port=3306
default-character-set=utf8mb4docker-compose.yml文件内容
version: '2'
services:
db:
image: mysql:8.0
restart: always
container_name: mysql_8.0
ports:
- "33062:3306"
environment:
MYSQL_DATABASE: database
MYSQL_ROOT_PASSWORD: abc@1230
volumes:
- /data/mysql_8.0/log:/var/log/mysql
- /data/mysql_8.0/data:/var/lib/mysql
- /data/mysql_8.0/conf/my.cnf:/etc/mysql/my.cnf
拉取镜像
docker pull mysql:8.7
docker pull mysql:5.7
docker pull mysql:5.5
mysql5.5启动
docker run -p 33061:3306 --restart=always --name mysql_5.5 --privileged=true -v /opt/mysql_5.5/log:/var/log/mysql -v /opt/mysql_5.5/data:/usr/local/mysql/data -v /opt/mysql_5.5/conf/my.cnf:/etc/mysql/my.cnf -e MYSQL_ROOT_PASSWORD=abc@1230 -d mysql:5.5
my.cnf文件内容
[client]
#设置客户端默认字符集utf8mb4
default-character-set=utf8mb4
[mysql]
#设置服务器默认字符集为utf8mb4
default-character-set=utf8mb4
[mysqld]
#配置服务器的服务号,具备日后需要集群做准备
server-id = 1
#开启MySQL数据库的二进制日志,用于记录用户对数据库的操作SQL语句,具备日后需要集群做准备
# log-bin=mysql-bin
#设置清理超过30天的日志,以免日志堆积造过多成服务器内存爆满。2592000秒等于30天的秒数
# binlog_expire_logs_seconds = 2592000
#解决MySQL8.0版本GROUP BY问题
# sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION'
#允许最大的连接数
max_connections=1000
# 禁用符号链接以防止各种安全风险
# symbolic-links=0
# 设置东八区时区
default-time_zone = '+8:00'
其他
进入容器
docker exec -u root -it <容器名称> bin/bash查看数据库位置
SHOW VARIABLES LIKE 'datadir';


