hefeng_aspnet头像
Docker 环境安装 MySQL 8.4.x封面图

Docker 环境安装 MySQL 8.4.x

目录

拉取

端口

环境变量

自定义MySQL配置文件

传参方式配置MySQL

数据存储

注意事项

在MySQL初始化完成之前没有连接

针对现有数据库的用法

数据库备份与还原

个人推荐实战


如果您喜欢此文章,请收藏、点赞、评论,谢谢,祝您快乐每一天。

拉取

docker pull mysql:8.4.2

端口

端口协议描述
3306tcp客户端至服务器的连接端口(MySQL协议)
33060tcp客户端至服务器的连接端口(MySQL X协议)

一般情况下,仅使用 3306 即可,正式环境根据需要自己调整。

环境变量

参数描述可选值备注
MYSQL_ROOT_PASSWORDROOT密码String
MYSQL_ALLOW_EMPTY_PASSWORD允许空密码yes初始化时使用
MYSQL_RANDOM_ROOT_PASSWORD生成随机ROOT密码yes
MYSQL_DATABASE默认创建数据库String
MYSQL_USER,MYSQL_PASSWORD默认普通用户与密码String用户名密码将作为MYSQL_DATABAS的用户名密码
MYSQL_ONETIME_PASSWORD将root用户密码设置为过期用户yesMySQL 5.6+后可用

示例:

# 自定义密码
docker run -d --name mysql -e MYSQL_ROOT_PASSWORD=123 -p 3306:3306 mysql:8.4.2
# 使用空密码
docker run -d --name mysql -e MYSQL_ALLOW_EMPTY_PASSWORD=yes -p 3306:3306 mysql:8.4.2
# 使用随机密码,在日志内查看随机密码
docker run -d --name mysql -e MYSQL_RANDOM_ROOT_PASSWORD=yes -p 3306:3306 mysql:8.4.2
docker logs mysql | grep 'GENERATED ROOT PASSWORD'
# 指定默认数据库,用户名,密码
docker run -d --name mysql -e MYSQL_ROOT_PASSWORD=123 -e MYSQL_DATABASE=mydb -e MYSQL_USER=test -e MYSQL_PASSWORD=test -p 3306:3306 mysql:8.4.2

自定义MySQL配置文件

MySQL默认配置文件为 /etc/mysql/my.cnf ,其引入 /etc/mysql/conf.d/ 、 /etc/mysql/mysql.conf.d/ 两个文件夹下的配置文件。若自定义配置文件在 /my/custom/config-file.cnf ( config-file.cnf 文件名可自定义),则使用 -v 参数自定义MySQL配置文件。

示例:

docker run -d --name mysql -v /my/custom:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=123 -p 3306:3306 mysql:8.4.2

传参方式配置MySQL

此方法无需配置文件,即可修改MySQL配置,但是不够灵活。

示例:

docker run -d --name mysql -e MYSQL_ROOT_PASSWORD=123 -p 3306:3306 mysql:8.4.2 --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci

运行以下命令查看完整参数列表(内容太多,不详细列举了)。

示例:

docker run -it --rm mysql:tag --verbose --help

数据存储

容器内默认数据库存储位置为 /var/lib/mysql ,该路径是容器内 /etc/mysql/mysql.conf.d/mysqld.cnf 配置文件指定的;建议使用 -v 参数绑定物理机。

示例:

docker run -d --name mysql -v /my/data/:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123 -p 3306:3306 mysql:8.4.2

注意事项

在MySQL初始化完成之前没有连接

如果在容器启动时没有初始化数据库,则将创建一个默认数据库。尽管这是预期的行为,但这意味着在此类初始化完成之前,它将不接受传入的连接。使用自动化工具(例如) docker-compose 同时启动多个容器时,这可能会引起问题。如果您尝试连接到MySQL的应用程序无法处理MySQL停机时间或等待MySQL正常启动,则可能有必要在服务启动之前放置connect-retry循环。

针对现有数据库的用法

如果mysql使用已经包含数据库的数据目录启动容器实例, MYSQL_ROOT_PASSWORD 则应在运行命令行中忽略该变量;在任何情况下都将忽略它,并且不会以任何方式更改现有数据库。

示例:

# 启动一个容器并指定数据库目录以及数据库密码
docker run -d --name mysql -v mydb:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -p 3306:3306 mysql:8.4.2
# 删除容器
docker rm -f mysql
# 再次启动容器并使用刚刚的数据库目录,但是改变密码
docker run -d --name mysql -v mydb:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=654321 -p 3306:3306 mysql:8.4.2
# 此时,数据库的密码依旧是123456,即第二次启动时,环境变量不起作用

数据库备份与还原

示例:

# 备份
docker exec some-mysql sh -c 'exec mysqldump --all-databases -uroot -p"$MYSQL_ROOT_PASSWORD"' > /some/path/on/your/host/all-databases.sql

# 还原
docker exec -i mysql sh -c 'exec mysql -uroot -p"$MYSQL_ROOT_PASSWORD"' < /some/path/on/your/host/all-databases.sql

该示例中的 $MYSQL_ROOT_PASSWORD 使用的 docker run 时设置的参数,当MySQL手动更换密码,或者使用其他参数启动时,需要在-p后面使用明文密码

个人推荐实战

1、mkdir -p /work/mysql :在Linux跟路径下新建 work 目录用于存放工作数据,在 /work/ 下新建 mysql 目录用于存储MySQL容器数据

2、mkdir -p /work/mysql/config /work/mysql/data /work/mysql/log :在 /work/mysql/下新建 data 目录,用于存储MySQL数据文件; log 目录,用于存储MySQL日志文件; config 目录,用于存储MySQL配置文件

3、vim /work/mysql/config/config.cnf :在 /work/mysql/config/ 下新建 config.cnf 文件作为MySQL配置文件,内容如下:

[mysql]
# 客户端默认字符集
default-character-set=utf8mb4
[mysqld]
# === 基础配置 ===
# 服务端使用的字符集
character-set-server=utf8mb4
# 数据库排序字符集
collation_server=utf8mb4_general_ci
# 服务器在关闭交互式连接之前等待活动的秒数,默认28800(8小时)
interactive_timeout=7200
# 服务器关闭非交互连接之前等待活动的秒数,默认28800(8小时)
wait_timeout=3600
# 写入错误日志的消息以及写入文件的常规查询日志和慢速查询日志消息中的时间戳的时区,默认UTC时间,SYSTEM代表取系统时间
log_timestamps=SYSTEM
# 最大允许数据包
max_allowed_packet=1073741824
# 关闭MySQLx(一般情况下用不到)MySQL5.7不支持此选项,使用时需要注释此配置
mysqlx=0
# === 日志相关 ===
## >>> 错误日志
# 错误日志存放文件,默认 datadir 目录下
log_error=/var/log/log-error.log
# 开启事务中所有死锁的InnoDB信息记录在错误日志中
innodb_print_all_deadlocks=ON
## >>> 二进制日志
# 二进制日志文件基础名称以及路径,默认 datadir 目录下
log_bin=/var/log/log-bin
## >>> 慢查询日志
# 开启慢查询日志,默认OFF,建议开发和测试环境开启
slow_query_log=ON
# 慢查询日志文件位置
slow_query_log_file=/var/log/log-slow.log
# 慢查询时间阈值,默认10,单位:秒
long_query_time=1
## >>> 中继日志,主从复制时,从机需要配置
# 中继日志文件位置,默认 datadir 目录下
#relay_log=/var/log/log-relay

4、运行容器并使用 MYSQL_ALLOW_EMPTY_PASSWORD 设置默认空密码。命令如下

docker run -d --restart always --name mysql \
-v /work/mysql/config/:/etc/mysql/conf.d \
-v /work/mysql/data/:/var/lib/mysql \
-v /work/mysql/log/:/var/log \
-e MYSQL_ALLOW_EMPTY_PASSWORD=yes \
-e TZ=Asia/Shanghai \
-p 3306:3306 \
mysql:8.4.2

5、使用 docker exec 进入容器内或者使用 SQLyog 、 Navicat 等工具连接MySQL,之后修改密码。命令如下

docker exec -it mysql sh -c 'mysql -uroot --skip-password'
use mysql;
ALTER USER 'root'@'%' IDENTIFIED BY "123";
flush privileges;
DROP USER root@localhost;
exit;

如果您喜欢此文章,请收藏、点赞、评论,谢谢,祝您快乐每一天。

转载自 CSDN-专业IT技术社区

原文链接:https://blog.csdn.net/hefeng_aspnet/article/details/170586829

文章来源转载

评论

评论列表

微信小程序
QQ小程序

关于作者

点赞数:0
关注数:0
粉丝:0
文章:0
关注标签:0
加入于:--