在centos 里面编译安装MySQL多实例,编译时间太长,配置多实例也费尽,如果不是专门学习MySQL,而只是使用MySQL服务,使用docker 一条命令瞬间完成一个多实例,方便快捷,而且数据卷分离可以在docker容器外保存数据。
运行:
docker run -d –name myMysql2 -v ~/data/mysql2:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -p 3308:3306 mysql
你就可以本机ip+3308端口访问MySQL,数据把存在本机指定的目录,本例为 ~/data/mysql2,root密码为123456
1 安装docker
mac 和 win
去 安装docker官网 下载对应安装包安装
Ubuntu
1 | $sudo wget -qO- https://get/docker.com/ | sh |
#current_username是你当前的用户名,这样以后就可以免sudo 运行docker 命令了
或者参考这里Docker入门
2 获取mysql镜像
从docker hub的仓库中拉取mysql镜像
docker pull mysql
查看镜像
1 | docker images |
3 运行mysql容器
** 3.1 运行第一个mysql实例的命令如下:**
1 | docker run -d --name myMysql -v ~/data/mysql1:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -p 3307:3306 mysql |
-d : –detach,后台运行。
–name : 为你的镜像创建一个别名,该别名用于更好操作。
-p : 映射端口,一般我们会将默认端口进行更改,避免与本机的mysql端口冲突,如果你宿主机有mysql,请更改端口,如 -p 3307:3306。 3307代表本地端口 3306为容器端口这是固定的(固定在MySQL官方镜像里),
-e : 环境变量。为mysql的root用户设置密码为123456。
-v : 指定数据卷,意思就是将mysql容器中的/var/lib/mysql(这个是数据库所有数据信息文件)映射到宿主机~/data/mysql里面。
** 3.2 运行第二个mysql实例的命令如下:**
只需要与第一个容器的的 –name 以及 本机数据目录, 映射的本机端口这3者不同即可
docker run -d --name myMysql2 -v ~/data/mysql2:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -p 3308:3306 mysql
在本机登陆到第一个实例
1 | mysql -h 127.0.0.1 -P 3307 -u root -p |
在本机登陆到第二个实例
1 | mysql -h 127.0.0.1 -P 3308 -u root -p |
一定要指定 ip
参数,不可以省略 否则报错,连接失败
1 | mysql -uroot -p -P3307 |
删除容器,看数据卷是否还在
1 | docker stop myMysql |
依然还在,这说明如果我们创建新的mysql容器,那么只需要指定数据卷就可以了。
从Docker登录MySQL的终端
1 | docker exec -it myMysql /bin/bash |
###登录数据库
1 | mysql -uroot -p |
使用MYSQL数据库
1 | use mysql |
查询MYSQL的root用户情况
1 | select host, user, plugin from user; |
修改root用户插件验证方式
1 | ALTER USER ‘root‘@‘%‘ IDENTIFIED WITH mysql_native_password BY ‘xxxxxxxxxx‘; |
刷新权限
1 | FLUSH PRIVILEGES; |
由于MySQL 5.7版本以后的mysql数据库下已经没有password这个字段了,password字段改成了authentication_string,查询时使用authentication_string字段即可
增加用户,授予权限
1 | grant all on *.* to 'test'@'%' identified by '1234'; |
这时一条授予权限命令,当用户不存在时,则会自动创建。
. 前一个*星号代表所有数据库,后一个星号代表所有数据表
‘test”@’% : test是用户名,%为所有IP。
identified by ‘1234’ : 密码设置为1234。
Docker 常用命令
查看
docker ps
主要有些参数要说一下
- 不加参数,表示查看当前正在运行的容器
- -a,查看所有容器包括停止状态的容器
- -l,查看最新创建的容器
- -n=x,查看最后创建的x个容器
列一下docker ps的结果
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
这些分别代表什么
CONTAINER ID:容器ID,唯一标识容器
IMAGE:创建容器时所用的镜像
COMMAND:在容器最后运行的命令
CREATED:容器创建的时间
STATUS:容器的状态(你会看到UPXXX,表示运行状态)
PORTS:对外开放的端口号
NAMES:容器名(也具有唯一性,docker是不允许创建容器名相同的容器的)
启动
1 | docker start |
我们在用docker ps -a的时候会看见一些容器的状态是CREATED的,这里就需要我们用
docker start 容器名或容器ID
来启动容器。但是需要注意,用这个命令后,容器进入运行状态,当容器完成任务后,会自己退出,进入停止状态。如果需要再次启动start命令
这里提一个参数,能够让容器在退出后能够自动重启--restart
这个参数会检查容器的退出码,并据此来决定是否要重启容器。
这里写图片描述
这个例子大家不要轻易尝试,这样会不停的输出hello world,用ctrl+C都没有停掉这个(这里过后好好想想为什么没有停掉?????????)
最后我开了另一个终端输入了docker stop docker_restart
才终止了容器
终止
在上面也说了一下命令是
docker stop 容器名或容器ID
而这个docker stop
命令是给容器进程发送一个SIGTERM
信号(可捕捉),默认行为是容器退出。
如果要强行停止一个容器的话,最好用docker kill
命令
它是发送一个SIGKILL
信号(不可捕捉)
删除
命令:docker rm 容器名
我们不能删除一个正在运行的容器,必须先 docker stop``或者
docker kill` 后我们才能删除.
当然如果我们加-f这个参数我们也是可以删除一个正在运行的容器的
如何一次删除所有容器docker没有给相关命令,但是我们可以这样
这里写图片描述
-q是只列出容器ID
参考: