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.5
2.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'
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.5
docker-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]
# 设置3306端口
port=3306
# 设置mysql的安装目录
basedir=/var/lib/mysql
# 设置mysql数据库的数据的存放目录
datadir/var/lib/mysql/Data
# 允许最大连接数
max_connections=200
# 允许连接失败的次数。这是为了防止有人从该主机试图攻击数据库系统
max_connect_errors=10
# 服务端使用的字符集默认为UTF8
character-set-server=utf8
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
# 默认使用“mysql_native_password”插件认证
default_authentication_plugin=mysql_native_password
[mysql]
# 设置mysql客户端默认字符集
default-character-set=utf8mb4
[client]
# 设置mysql客户端连接服务端时默认使用的端口
port=3306
default-character-set=utf8
docker-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: Zhuoyu@2025
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';