前言
我们在部署一个docker应用的时候,经常会遇到的一个场景,就是该docker应用需要用到数据库。这时候我们不外乎有两种选择:
1、使用docker compose命令,关联的新建一个只为这个docker使用的新数据库
2、利旧已有的数据库
我看网上很多博主都是推荐docker compose的方式,当然这种方式也的确简单,只要新建一个yml文件,然后把网上提供的内容粘贴进去保存一下,最后在yml文件对应的目录里运行一下docker-compose up
即可拉起相关的所有容器,而且在protainer的管理界面看起来也很清爽,很适合初学者。
不过对于一个致力于搭建家庭数据中心的强迫症患者来说,每次需要都新建一个数据库容器,不如杀了我算了,所以我自然选择了第2种选择。那么这里就需要解决如何在已有数据库中为这个docker应用新建一个库并且新建一个对这个库有完全管理权限的用户,所以这篇文章就来解决这个问题。
注:本文假设使用的是mariadb数据库,数据库客户端使用DBeaver社区版(谁用谁知道好系列,感谢毛儿推荐)。docker应用就以next-terminal为例(这个堡垒机的搭建参见:docker系列 搭建基于next-terminal的开源堡垒机 )。
初始化数据库
方式1:使用DBeaver完成新库初始化
首先,下载并安装适合自己系统的DBeaver:DBeaver社区版官网下载地址。然后,登录进入对应的mariadb数据库之后,在数据库上右键选新建数据库:
然后创建数据库,一般只需要指定数据库名,其他使用默认值就好了:
这样next-terminal使用的数据库就建好了,然后在用户上点右键选新建用户:
然后指定需要创建的用户名及密码,然后点击右下角的保存:
注:主机的%表示该用户名可以从任意IP地址连接,当然也可以使用localhost指定只能从本机登录,或者使用某个具体的ip地址,这些大家根据实际情况调整即可。
点击保存以后会弹出如下界面,直接点击执行:
新建完next-terminal用户,接下来就是将next-terminal库的操作权限赋予这个用户了。在用户里选择刚刚创建的next-terminal@%,然后在右上选择架构权限,并以及从左到右选择:jumpserver–%(All)–全部选择,然后点击右下方的保存,如下图红框:
接着会弹出下框,直接点击右下角的执行即可:
注:一定要先创建用户,然后再赋权,不然会报错。
方式2:用命令行完成新库初始化
该种方式需要使用到mysql命令,需要在使用该命令能够连接到数据库的主机上运行,这里通常有2种场景:
1、在主机上使用源码方式安装数据库
在主机上通过宝塔面板的软件商店安装数据库或者使用apt方式安装的数据库都是属于这种场景。这时候只需要在主机上直接运行mysql命令即可。
2、使用docker方式安装数据库
这种方式由于数据库是以docker方式部署,所以需要进入docker内部环境运行mysql命令,进入docker内部命令如下:
docker exec -it yourDBcontainer /bin/bash
注:yourDBcontainer可以是container ID,也可以是container name。
运行mysql命令以root身份登录数据库:
mysql -u root -p -h your-database-ip
然后运行如下命令完成新建库以及对应的账号:
create database 'next-terminal' default charset 'utf8mb4';
create user 'next-terminal'@'%' identified by 'password';
grant all on next-terminal.* to 'next-terminal'@'%';
flush privileges;
注:第二行identified by
后面的password
是新建账号的密码,请根据实际情况修改。
大功告成。
后话
除了使用DBeaver(或者其他类似的专业数据库管理工具),也可以直接使用phpmyadmin完成mariadb数据库的初始化操作,只是考虑到以后的运维工作,还是DBeaver使用更加方便,毕竟phpmyadmin只能用于mysql或者mariadb,而DBeaver还可以用于PostgreSQL、SQLite、Microsoft SQL Server和Oracle等其他数据库,而作为一个致力于打造专业”家庭数据中心”的男人,怎么可能只使用一种数据库?