使用Docker安装MySQL8以上版本

使用Docker安装MySQL8以上版本

系统使用的为centos7的linux操作系统,非此操作系统请选择其他文章


一、创建目录

使用命令新建log、data、conf目录

mkdir -p /mydata/mysql/log
mkdir -p /mydata/mysql/data
mkdir -p /mydata/mysql/conf
  • data 目录:这通常指的是 MySQL 数据目录,用于存储 MySQL 数据库的实际数据文件。在 Docker 中,MySQL 的数据目录默认为 /var/lib/mysql。通过将宿主机上的一个目录映射到容器中的这个目录,可以实现 MySQL 数据的持久化存储,确保即使容器被删除或重新启动,数据库的数据也不会丢失。
  • log 目录:这是 MySQL 的日志目录,用于存储 MySQL 数据库的运行日志文件。在 Docker 中,MySQL 的日志目录默认为 /var/log/mysql。将宿主机上的一个目录映射到容器中的这个目录,可以方便地查看和管理 MySQL 的运行日志,包括错误日志、查询日志等。
  • conf 目录:这是 MySQL 的配置文件目录,用于存储 MySQL 的配置文件。在 Docker 中,MySQL 的配置文件通常是 /etc/mysql/my.cnf。通过将宿主机上的一个目录映射到容器中的这个目录,可以提供自定义的 MySQL 配置文件,例如调整缓冲区大小、连接限制、字符集设置等。

二、创建容器

1、获取镜像

使用命令拉取MySQL镜像,不屑版本号默认拉取最新的版本latest,如果需要拉取特定版本号可以到官网https://hub.docker.com/_/mysql/tags进行查看,也可通过拉取最新MySQL镜像命令获取可拉取的版本号列表

# 查看docker版本
docker search mysql
# 拉取最新MySQL镜像
docker pull mysql
# 拉取对应版本MySQL镜像
docker pull mysql:8.0.32

2、查看镜像

docker images

3、创建容器

(1)在 /mydata/mysql/conf/ 目录下创建自定义的 custom.cnf 配置文件。文件名随意,文件格式必须为 .cnf 。

vim /mydata/mysql/conf/custom.cnf

MySQL默认配置文件 /etc/my.cnf 末尾中有这么一行:!includedir /etc/mysql/conf.d/ ,意思是,在 /etc/mysql/conf.d/ 目录下新建自定义的配置文件 custom.cnf也会被读取到,而且还是优先读取的(Docker Hub中的MySQL教程文档有说到)。
(2)添加容器运行的配置参数。

[mysqld]
init-connect="SET collation_connection=utf8mb4_0900_ai_ci"
init_connect="SET NAMES utf8mb4"
skip-character-set-client-handshake

(3)创建容器并运行。一些参数在【方法一创建容器】里面有说明,这里不再细说。

docker run --name mysql -v /mydata/mysql/log:/var/log/mysql -v /mydata/mysql/data:/var/lib/mysql -v /mydata/mysql/conf:/etc/mysql/conf.d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql
  • -name
            容器名称
  • -v
            参数 -v 是 --volume list 的简写,将指定的文件夹挂载为容器的卷(Volume),用来共享文件(日志文件、配置文件、数据文件)
  • /mydata/mysql/log
            日志目录
  • /mydata/mysql/data
            数据目录
  • /mydata/mysql/conf
            配置文件目录
  • -p 3306:3306
            参数 -p 是 --publish list 的简写,将3306端口映射到容器的3306端口,对外提供端口。如果同时启动多个mysql容器,对外端口号可以不同,服务之间不会冲突
  • -e MYSQL_ROOT_PASSWORD=123456
            参数 -e 是 --env list 的简写,设置环境变量,将 root 用户的密码变量(MYSQL_ROOT_PASSWORD)设置为 123456
  • -d mysql
            参数 -d 是 --detach 的简写,指的是容器运行在后台并打印容器ID。后面的mysql可以加版本号,例如mysql:latest、mysql:8.0.31 等等

3、禁用 root 账户被外部工具连接。

        进入到容器里,连接mysql,删除mysql数据库user表中 user=“root”,host="%"的那条记录。因为这条数据会允许 root 账户被允许外部工具(如Navicat或SQLyog)连接,实际上,应该禁止这么做,正确做法是只允许 root 账户本地连接。如果想 root 账户继续被外部工具连接,那就把root密码设置得更复杂,过于简单不安全!

切换到 mysql 数据库:

use mysql;

删除mysql数据库user表中 user=“root”,host="%"的那条记录:

delete user from mysql.user where user='root' and host='%';

刷新权限:

flush privileges;

4、创建新账户供外部工具连接

    使用 CREATE 创建账户,例如对应mysql.user表中,字段user为 username,字段host为 % ,账号密码为 password,“%”代表任何主机。使用 GRANT 授予账户特定权限。

CREATE USER 'username'@'%' IDENTIFIED BY 'password';
或
create user 'zyt'@'%' identified by 'dbydc&666';

授予账户特定权限。ALL 和 ALL PRIVILEGES 是一样的,可简写为 ALL 。

GRANT ALL ON *.* TO 'username'@'%' WITH GRANT OPTION;
或
grant all on *.* to 'zyt'@'%' with grant option;

刷新账号权限

FLUSH PRIVILEGES;
或
flush privileges;

设置容器自启动。

docker update --restart=always mysql
  • 20
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值