网站项目需求分析,上海省住房与城乡建设厅网站,做小程序要多少钱,重庆网站建设开发docker 如何部署 mysql 9 #xff0c;请看下面步骤#xff1a;
1. 先看 mysql 官网 先点进去 8 版本的 Reference Manual 。 选择 9.0 版本的。 点到这里来看#xff0c; 这里有一些基础的安装步骤#xff0c;可以看一下。 - Basic Steps for MySQL Server Deployment wit…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 --namemysql1 \
--mount typebind,src/path-on-host-machine/my.cnf,dst/etc/my.cnf \
--mount typebind,src/path-on-host-machine/datadir,dst/var/lib/mysql \
-d container-registry.oracle.com/mysql/community-server:tagOK, 上面是官网的教程接下来写上我自己的实操。
1. 首先我们要做下载 mysql 9.0.1 的镜像
docker pull mysql:9.0.12. 然后运行创建 mysql 容器
docker run -d \
--name mysql9 \
-p 3306:3306 \
-e MYSQL_ROOT_PASSWORDroot \
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/conf4. 删除 mysql 9 容器
docker stop mysql9
docker rm mysql95. 重新创建 mysql9 容器并实现目录挂在。
docker run --namemysql9 \
--mount typebind,src/mydata/mysql/conf/my.cnf,dst/etc/my.cnf \
--mount typebind,src/mydata/mysql/data,dst/var/lib/mysql \
-e MYSQL_ROOT_PASSWORDroot \
-p 3306:3306 \
-d mysql:9.0.1你知道这两种写法有什么不同吗请参考这篇文章 - 《docker 的目录挂载的新语法》 –mount typebind,src/path-on-host-machine/my.cnf,dst/etc/my.cnf -v /path-on-host-machine/my.cnf:/etc/my.cnf 到此 docker 就成功安装了 mysql 9 了。
那下一步我们要做什么呢 远程连接 mysql 。 没错所以继续往下看。
6. 修改配置文件添加允许远程访问配置
编辑 /mydata/mysql/conf/my.cnf
在配置文件中找到 [mysqld] 部分添加下面属性
bind-address 0.0.0.0这会允许 MySQL 接受来自任何 IP 地址的连接。
修改完成后需要重启 mysql 容器。
docker restart mysql97. 登录到 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 教程可以参考这个人的文章 - Docker 教程图文讲解,整理的挺好的。