docker中mysq安装

简介

容器内的网络服务,和外部机器不能直接通讯

外部机器智能和宿主机通讯,不能直接和容器通讯

我们在这里把宿主机的3307和容器的3306做一个映射

做完映射之后,访问的路径就会变成下图:访问宿主机的3307就相当于访问容器的3306端口。这里的做法和路由器端口映射很相似。

知道了方法和思路之后,我们现在开始操作。

一、离线安装

1.1 在能联网的机器上执行

docker save -o /home/fairy/app/mysql57.tar mysql:5.7

1.1.1到官网下载

地址:https://dev.mysql.com/downloads/mysql/

1.2 上传

把/home/fairy/app/mysql57.tar文件上传到无法上网的机器上

然后执行:

docker load -i /root/Downloads/mysql57.tar

1.3 启动mysql

docker run -d --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7

命令的含义:
docker run:在docker中启动一个容器实例
-d:该容器在后台运行
-p 3306:3306:容器与主机映射端口为,主机3306,容器3306
--name mysql:容器运行后的名称
-v /root/mydata//mysql/log:/var/log/mysql:将容器/var/log/mysql目录下的数据,备份到主机的 /root/mydata//mysql/log目录下
-v /root/mydata//mysql/data:/var/lib/mysql:将容器/var/lib/mysql目录下的数据,备份到主机的 /root/mydata//mysql/data目录下
-v /root/mydata//mysql/conf:/etc/mysql:将容器/etc/mysql目录下的数据,备份到主机的 mysqldata/mysql/conf目录下
-e MYSQL_ROOT_PASSWORD=root:设置当前mysql实例的密码为root
mysql:5.7:需要运行的容器名称以及版本号

通过此处-
v 命令备份后(-v是进行目录映射),就算当前mysql容器实例被删除,那么再次重启mysql容器后,数据将会自动重主机加载到容器当中

二、在线安装

 官网:https://hub.docker.com

2.1 在安装好docker的linux中执行命令

拉取mysql最新版本
docker pull mysql

拉取mysql指定版本
docker pull mysql:版本号

docker pull mysql:
5.7 查看本地是否存在 docker images

2.2 创建数据卷

1:创建一个卷

docker volume create mysql-vol
备注:默认情况下 ,Docker 创建的数据卷为 local 模式,仅能提供本主机的容器访问。

  删除数据卷的命令:

  docker volume rm mysql

2:查看卷 所有的卷都在目录/var/lib/docker/volumes下

> docker volume ls

3:查看卷的详细信息,是为了去得知tomcat的安装目录

> docker volume inspect mytomcat-vol

4:创建一个mysql的目录挂载和卷的映射

  • 带数据卷模式:宿主机目录 --> 数据卷 ---> 容器内目录(我们不清楚目录在哪里,需要去官网查找)

  • 直接挂载模式:宿主机目录 ---> 容器内目录(我们自己创建的目录,自己清楚!后期好修改、维护)

使用 -v 命令

# 方式一
# 指定net网络模式:docker run -it -v 宿主机绝对路径目录:容器内目录 镜像名
docker run -di --net="host" --name=mysql -p 3036:3036 -e MYSQL_ROOT_PASSWORD=123456 mysql:latest
备注:使用 -v 的方式指定容器内需要被持久化的路径,Docker 会自动为我们创建卷,并且绑定到容器中
方式二、默认net网络模式
docker run -itd --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7

  参数说明:

  • -p 3306:3306 :映射容器服务的 3306 端口到宿主机的 3306 端口,外部主机可以直接通过 宿主机ip:3306 访问到 MySQL 的服务。
  • MYSQL_ROOT_PASSWORD=123456:设置 MySQL 服务 root 用户的密码。
  docker run -d -p 3306:3306
  -v /home/mysql/conf:/etc/mysql/conf.d
  -v /home/mysql/data:/var/lib/mysql
  -e MYSQL_ROOT_PASSWORD=123456 --name mysql mysql:5.7
 
 
  
 
************************************************

方式三、挂载方式默认net网络模式

  sudo docker run -itd --privileged=true \

  -p 3306:3306 --name mysql \

  -v /root/mydata/mysql/log:/var/log/mysql \

  -v /root/mydata/mysql/data:/var/lib/mysql \

  -v /root/mydata/mysql/conf:/etc/mysql/conf.d \

  -e MYSQL_ROOT_PASSWORD=123456 \

  -d mysql:5.7

 
方式四、挂载方式默认net网络模式
挂在到当前目录

上述命令的含义:
-v $PWD/data:/var/lib/mysql         $PWD 可以获取当前的路径,$PWD/data:/var/lib/mysql 表示把当前路径下的data目录挂载到容器里面的/var/lib/mysql
-v $PWD/my.cnf:/etc/mysql/my.cnf
-v $PWD/mysql-files:/var/lib/mysql-files


上述命令的含义:
docker run:在docker中启动一个容器实例
-d:该容器在后台运行
-p 3306:3306:容器与主机映射端口为,主机3306,容器3306
--name mysql:容器运行后的名称
-v /root/root/mydata/mysqllog:/var/log/mysql:将容器/var/log/mysql目录下的数据,备份到主机的 /root/mydata//mysql/log目录下
-v /root/root/mydata/mysqldata:/var/lib/mysql:将容器/var/lib/mysql目录下的数据,备份到主机的 /root/mydata//mysql/data目录下
-v /root/root/mydata/mysqlconf:/etc/mysql:将容器/etc/mysql目录下的数据,备份到主机的 mysqldata/mysql/conf目录下
-e MYSQL_ROOT_PASSWORD=root:设置当前mysql实例的密码为root
--restart=always -> 开机启动容器,容器异常自动重启
通过此处-v 命令备份后(-v是进行目录映射),就算当前mysql容器实例被删除,那么再次重启mysql容器后,数据将会自动重主机加载到容器当中


方式五、创建网络
docker network create my-network
通过自建网络,实现docker内各容器通信
docker run -dit --name mysql --restart=always \
-p 3306:3306 \
-e TZ=Asia/Shanghai \
--network=my-network \
-e MYSQL_ROOT_PASSWORD=Wtf13579. \
-v /usr/local/dockerdata/mysql/log:/var/log/mysql \
-v /usr/local/dockerdata/mysql/data:/var/lib/mysql \
-v /usr/local/dockerdata/mysql/conf:/etc/mysql/conf.d \
-d mysql:5.7 \

2.2 创建配置文件

切换到上述命令配置的主机/root/mydata//mysql/conf目录下

cd /root/mydata//mysql/conf

#创建 my.cnf文件 touch my.cnf

使用vim命令对 my.cnf文件添加如下内容,

在docker中安装的mysql默认字符集是latin1,需要改成utf8

[client]
default_character_set=utf8
[mysqld]
collation_server = utf8_general_ci
character_set_server = utf8

重启mysql容器实例,让刚才的配置文件生效

docker restart mysql

#查看是否启动成功
docker ps

2.3 运行mysql

修改权限密码方式

① 进入mysql容器
docker exec -it mysql /bin/bash

② 登录mysql(PS:密码123456) mysql -u root -p
③ 执行修改脚本 ALTER
USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456'; flush privileges;

 

备注:

##创建一个user用户,密码为123456
CREATE USER 'user'@'%' IDENTIFIED BY '123456';

##给user用户赋予数据库的所有权限 GRANT ALL PRIVILEGES ON
*.* TO 'user'@'%';
##刷新用户 flush privileges;

  配置远程权限:

用root用户登陆,然后:
grant all privileges on *.* to 创建的用户名 @"%" identified by "密码";
flush privileges; * 刷新刚才的内容*


参数说明:

格式:grant 权限 on 数据库名.表名 to 用户@登录主机 identified by "用户密码";

@ 后面是访问mysql的客户端IP地址(或是 主机名) % 代表任意的客户端,如果填写 localhost

为本地访问(那此用户就不能远程访问该mysql数据库了)。同时也可以为现有的用户设置是否具有远程访问权限。

 

撤权并删除用户:
要取消一个用户的权限,使用REVOKE语句。REVOKE的语法非常类似于GRANT语句,除了TO用FROM取代并且没有INDETIFED BY和WITH GRANT OPTION子句:
REVOKE privileges (columns) ON what FROM user
user部分必须匹配原来GRANT语句的你想撤权的用户的user部分。privileges部分不需匹配,你可以用GRANT语句授权,然后用REVOKE语句只撤销部分权限。
REVOKE语句只删除权限,而不删除用户。即使你撤销了所有权限,在user表中的用户记录依然保留,这意味着用户仍然可以连接服务器。

要完全删除一个用户,你必须用一条DELETE语句明确从user表中删除用户记录:
DELETE FROM user WHERE User=’user_name’ and Host=’host_name’;
FLUSH PRIVILEGES;
说明:
DELETE语句删除用户记录,而FLUSH语句告诉服务器重载授权表。(当你使用GRANT和REVOKE语句时,表自动重载,而你直接修改授权表时不是。)
 
 

 

 
posted @ 2022-09-08 16:23  O波V步  阅读(76)  评论(0编辑  收藏  举报