首先声明一点,在容器中部署数据库不是一个好的方案。
关于这一点我当然清楚,只是为了更方便的安装部署,也就没所谓了,自己电脑家里办公需要Maria。
docker -v
# 或者
docker version
结果如下:
结论是:Docker version 20.10.14
从上图我们也看到了这两个命令的一个区别。
我们当然可以直接拉取,但是我们这里先看看都有哪些Maria的镜像:
docker search mariadb
以上命令是从docker 远程仓库中查询所有的镜像名为mariadb的镜像。
该命令的返回值解读:
NAME:镜像仓库源的名称
DESCRIPTION:镜像描述
STARS:标星数量,就和GitHub是一样的,代表着点赞的意思
OFFICIAL:是否是docker官方发布
AUTOMATED:自动构建
拉取镜像:
docker pull mariadb
这个命令会拉取名称为mariadb的这个,且是最新版本的,因为我们没有指定版本。
docker run -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 --name mariadb -d mariadb
docker ps
docker container update --restart=always mariadb
docker exec -it mariadb bash
mysql -u root -p
# 或者
mysql -u root -p 密码
输入上面第一个命令后,会让我们输入我们运行容器的时候设置的root用户的密码,然后就进入了第二个红框的界面,这个时候我们就进入了mariadb的命令行中。
show databases;
注意,此时是在Maria的命令行中操作的,切不可退出。
我们看到了,有四个数据库,说明我们的Maria数据库已经创建好了。此时我们如果远程登陆的话,是需要创建一个自己的数据库的,当然你也可以直接连上面的数据库,不过这是不推荐的。
通过终端(或者叫做数据库客户端)连接我们的docker数据库。
上图是我连接的mysql这个数据库的参数,结果如何呢?
显示的数据库实际是2个,而不是我们在docker中的Maria中查询的那样,那么我们在客户端查询一下呢?实际上应该是一致的。
看来如我们所想,确实是一致的,一共四个,具体这四个库的作用,不在本篇的讨论范围之内,有兴趣的小伙伴可以自行了解。
实际工作中不大可能让你使用root用户登录数据库的,那么我们就需要创建一个用户了。
CREATE USER dake@'%' identified BY '123456';
创建了dake这个用户,并让他可以远程登陆(@'%'),密码是:123456。
CREATE USER dake@'localhost' identified BY '123456';
SELECT host,user FROM `user`;
CREATE database study;
SHOW DATABASES;
grant all privileges on study.* to dake;
以上命令是授予dake用户访问study数据库的权限。
flush privileges;
此时通过dake用户可以登录study数据库,可以查看study数据库的情况,但是如果想查看所有的数据库,或者查询所有的用户——即执行命令:
SHOW DATABASES;
SELECT host,user FROM `user`;
它会告诉你study数据库的user表不存在,因为这个是系统表,目前只有root用户可以访问。
不过没关系,我们可以给dake用户授予所有权限:
grant all privileges on *.* to dake;
flush privileges;
授予dake用户所有权限并刷新权限表。
此时我们再去查询所有数据库或者查看所有的用户情况:
SHOW DATABASES;
SELECT host,user FROM `user`;
至此,我们通过docker创建Maria,新建了数据库study、创建了dake用户,并且授予了dake用户访问study数据库的权限(也可以授予所有的权限),现在我们可以开开心心的进行数据库操作了。