docker部署mysql 9.0.1的实现

 更新时间:2025年02月24日 10:09:52   作者:灰色人生qwer  
本文主要介绍了docker部署mysql 9.0.1的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

docker 如何部署 mysql 9 ,请看下面步骤:

1. 先看 mysql 官网

在这里插入图片描述

先点进去 8 版本的 Reference Manual 。

在这里插入图片描述

选择 9.0 版本的。

在这里插入图片描述

点到这里来看, 这里有一些基础的安装步骤,可以看一下。 - Basic Steps for MySQL Server Deployment with Docker

在这里插入图片描述

有关使用 Docker 部署 MySQL Server 的更多主题,例如 服务器配置, 持久保存数据和配置, 服务器 错误日志和容器环境变量,请参阅 第 2.5.6.2 节 “有关使用 Docker 部署 MySQL 服务器的更多主题”。

在这里插入图片描述

docker run --name=mysql1 \
--mount type=bind,src=/path-on-host-machine/my.cnf,dst=/etc/my.cnf \
--mount type=bind,src=/path-on-host-machine/datadir,dst=/var/lib/mysql \
-d container-registry.oracle.com/mysql/community-server:tag

OK, 上面是官网的教程,接下来写上我自己的实操。

1. 首先我们要做下载 mysql 9.0.1 的镜像

docker pull mysql:9.0.1

2. 然后运行创建 mysql 容器

docker run -d \
--name mysql9 \
-p 3306:3306 \
-e MYSQL_ROOT_PASSWORD=root \
mysql:9.0.1

查看 mysql 是否正常启动:

docker ps

可以看到已经正常启动了。

在这里插入图片描述

3. 但我们的目标是要实现挂载mysql的 配置文件 到宿主机以便于修改 和 持久化 mysql 的数据。所以我们要先将 mysql 的 配置文件从容器中拷贝出来。

那么, mysql 9 的配置文件在哪呢?

我们从 dockerhub 仓库中可以看到 mysql 的配置文件在 /etc/mysql/my.cnf 。但是,你进去 mysql 9 的容器中会发现 这个路径找不到 my.cnf 文件。

在这里插入图片描述

其实 mysql 官网已经提到了, 在 /etc/my.cnf 。

在这里插入图片描述

OK,既然知道了配置文件的路径,那就拷贝出来。

先在宿主机中创建下面文件夹用于存放 mysql 9 的配置文件 以及 将来要存储 mysql 的数据目录。

mkdir -p /mydata/mysql/conf  /mydata/mysql/data

从 mysql 9 容器中拷贝配置文件出来:

docker cp mysql9:/etc/my.cnf /mydata/mysql/conf

4. 删除 mysql 9 容器

docker stop mysql9
docker rm mysql9

5. 重新创建 mysql9 容器,并实现目录挂在。

docker run --name=mysql9 --mount type=bind,src=/mydata/mysql/conf/my.cnf,dst=/etc/my.cnf --mount type=bind,src=/mydata/mysql/data,dst=/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root -p 3306:3306 -d mysql:9.0.1

你知道这两种写法有什么不同吗?请参考这篇文章 - 《docker 的目录挂载的新语法》

–mount type=bind,src=/path-on-host-machine/my.cnf,dst=/etc/my.cnf
-v /path-on-host-machine/my.cnf:/etc/my.cnf

注意: -e MYSQL_ROOT_PASSWORD=root, 经过我测试,这个密码只能设置 root, 设置其他的登不进去。如果不想设置为 root 密码,那么需要创建新用户,往下看,后面教程有教怎么创建新用户。

使用root以外的密码进行登录的时候会报如下错误:

mysql: [Warning] Using a password on the command line interface can be insecure.
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)

到此 docker 就成功安装了 mysql 9 了。

那下一步我们要做什么呢? 远程连接 mysql 。 没错,所以继续往下看。

6. 修改配置文件添加允许远程访问配置

编辑 /mydata/mysql/conf/my.cnf

在配置文件中找到 [mysqld] 部分,添加下面属性

bind-address = 0.0.0.0

这会允许 MySQL 接受来自任何 IP 地址的连接。

修改完成后,需要重启 mysql 容器。

docker restart mysql9

7. 登录到 mysql 中赋予新用户远程访问的权限

注意:下面这段是旧 mysql 的用法了。在 mysql 9 中不能使用这种用法了。

# 1. 如果已经有现有用户,修改权限:
GRANT ALL PRIVILEGES ON database.* TO 'root'@'%' IDENTIFIED BY 'root';

FLUSH PRIVILEGES;

上面这种写法在 mysql 9 中运行会报如下错误:

mysql>  GRANT ALL PRIVILEGES ON mysql.* TO 'root'@'%' IDENTIFIED BY 'root';
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'IDENTIFIED BY 'root'' at line 1

在 MySQL 8.0 和 9.0 版本中,GRANT 语句的语法发生了一些变化,尤其是涉及到用户创建和权限赋予的部分。特别地,MySQL 8.0+ 版本不允许在 GRANT 语句中直接使用 IDENTIFIED BY 来设置密码,密码设置应该通过 CREATE USER 或 ALTER USER 语句进行。

这个错误是因为在 MySQL 9.0.1 中,我们试图在 GRANT 语句中使用 IDENTIFIED BY,而 MySQL 9.0.1 的语法不允许这样做。

正确的做法:

# 1. 首先使用 CREATE USER 语句创建一个新用户,并设置密码:
CREATE USER 'username'@'%' IDENTIFIED BY 'password';

# 2. 然后使用 GRANT 语句为该用户授予权限:
GRANT ALL PRIVILEGES ON mysql.* TO 'username'@'%';

# 3. 最后,执行 FLUSH PRIVILEGES 使权限立即生效:
FLUSH PRIVILEGES;

我们这里以 root 用户举例,在 mysql 库 下的 user 表可以查看到已有用户。

所以直接执行下面语句就行:

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%';
FLUSH PRIVILEGES;

然后再用 Navicate 去连接,已经可以正常连接上了。

在这里插入图片描述

到此这篇关于docker部署mysql 9.0.1的实现的文章就介绍到这了,更多相关docker部署mysql 9.0.1内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 查看docker是否处于启动状态的方法详解

    查看docker是否处于启动状态的方法详解

    Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,本文主要给大家介绍了查看docker是否处于启动状态的方法,需要的朋友可以参考下
    2024-06-06
  • 解决docker安装完成报:bridge-nf-call-iptables is disabled问题

    解决docker安装完成报:bridge-nf-call-iptables is disabled问题

    这篇文章主要介绍了解决docker安装完成报:bridge-nf-call-iptables is disabled问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-11-11
  • Docker 跨主机容器间相互访问的实现

    Docker 跨主机容器间相互访问的实现

    本文主要介绍了Docker 跨主机容器间相互访问的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-01-01
  • docker容器启动失败如何查看日志

    docker容器启动失败如何查看日志

    这篇文章主要介绍了docker容器启动失败如何查看日志问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-05-05
  • 一篇文章弄懂Docker镜像的制作、上传、拉取和部署

    一篇文章弄懂Docker镜像的制作、上传、拉取和部署

    Docker包含三个基本概念,分别是镜像(Image)、容器(Container)和仓库(Repository),镜像是 Docker 运行容器的前提,这篇文章主要给大家介绍了如何通过一篇文章弄懂Docker镜像的制作、上传、拉取和部署的相关资料,需要的朋友可以参考下
    2021-08-08
  • 基于Docker的PHP调用基于Docker的Mysql数据库

    基于Docker的PHP调用基于Docker的Mysql数据库

    Docker 是一个开源的应用容器引擎,自从接触docker以来,一直想建立基于Docker的PHP调用基于Docker的Mysql数据库,下面通过本文给大家介绍下,感兴趣的朋友参考下
    2016-11-11
  • docker容器时区错误问题

    docker容器时区错误问题

    常出现docker中运行的容器获取到的时间与北京时间相差8小时的问题,其实是因为容器运行的时区不正确。本文主要介绍了docker容器时区错误问题,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-12-12
  • 一文搞定Docker安装ElasticSearch的过程

    一文搞定Docker安装ElasticSearch的过程

    通过本文可以帮助大家快速学习Docker安装ElasticSearch的过程,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2021-08-08
  • docker容器如何查看运行日志

    docker容器如何查看运行日志

    这篇文章主要介绍了docker容器如何查看运行日志问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-07-07
  • Docker 下MySQL数据库的备份和恢复的操作方法

    Docker 下MySQL数据库的备份和恢复的操作方法

    这篇文章主要介绍了Docker 下MySQL数据库的备份和恢复操作方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-02-02

最新评论