1.拉取Mysql
docker pull mysql:8.3.0
2.检查成功了没有
docker images mysql:8.3.0
3.创建先关目录
# conf放配置文件,data放数据,log放日志
mkdir -p /home/mysql/{conf,data,log}
4.创建配置文件
vim /home/mysql/conf/my.cnf
把这些cv进去,写好保存
[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'
5.启动容器
- docker run: 启动一个新的容器。
- -p 3306:3306: 将主机的 3306 端口映射到容器的 3306 端口,这是 MySQL 默认的服务端口。
- –restart=always: 设置容器总是自动重启,无论容器退出代码是什么。
- –name mysql: 为容器指定一个名称 “mysql”。
- –privileged=true: 给予容器扩展权限,通常在需要更高级别的系统访问权限时使用(注意:这会降低容器的安全性)。
- -v /home/mysql/log:/var/log/mysql: 将主机的 /home/mysql/log 目录挂载到容器内的 /var/log/mysql,用于存储 MySQL 的日志文件。
- -v /home/mysql/data:/var/lib/mysql: 将主机的 /home/mysql/data 目录挂载到容器内的 /var/lib/mysql,这是 MySQL 数据库存储数据的地方。
- -v /home/mysql/conf/my.cnf:/etc/mysql/my.cnf: 将主机的配置文件 /home/mysql/conf/my.cnf挂载到容器内作为 MySQL 的主配置文件。
- -e MYSQL_ROOT_PASSWORD=123456: 设置环境变量 MYSQL_ROOT_PASSWORD,其值是数据库的 root 用户密码,正式的不要写这么简单。
- -d mysql:8.3.0: 在后台运行(-d)指定的 Docker 镜像,这里是指定版本为 8.3.0 的 MySQL 镜像。
docker run \
-p 3306:3306 \
--restart=always \
--name mysql \
--privileged=true \
-v /home/mysql/log:/var/log/mysql \
-v /home/mysql/data:/var/lib/mysql \
-v /home/mysql/conf/my.cnf:/etc/mysql/my.cnf \
-e MYSQL_ROOT_PASSWORD=123456 \
-d mysql:8.3.0
测试连接,成功
6.进入容器修改密码(可选)
- 进入名为mysql的容器
docker exec -it mysql bash
- 连接数据库并输入密码
mysql -u root -p
- 修改密码为abcdef
ALTER USER 'root'@'%' IDENTIFIED BY 'abcdef';
- 刷新权限
FLUSH PRIVILEGES;
-
测试一下
-
退出
# 退出MySQL
exit;
# 退出容器
exit;
7.关闭/重启容器(可选)
- 关闭容器
# 等10s关
docker stop mysql
# 立即关
docker stop -t 0 mysql
- 检查一下
# 查看所有容器,包括未启动的
docker ps -a
3. 重新启动
docker start mysql
- 再看一下,没有问题,搞定
docker ps