作为一个开发人员,平日里难免会与各种数据库进行打交道,但如果每次使用都在本机从头部署,难免过于繁杂,Docker
此时无疑成为最优解。
只需在本机安装一个虚拟机,通过 Docker
容器便可实现快速部署,无需繁琐的环境依赖,而一旦出现问题,直接删除容器重新创建即可,仅用于开发测试绰绰有余。
下面即介绍常用数据库通过
Docker
容器部署教程。
一、MySQL5
1. 配置管理
创建 my.cnf
配置文件用于管理 MySQL
相关的配置。
cd /usr/local/dockerdata/mysql/conf
vim my.cnf
将以下内容复制到文件中,完成后 esc
+ :wq
保存退出。
[mysqld]
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
datadir = /var/lib/mysql
# log-error = /var/log/mysql/error.log
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
max_connections = 2000
max_user_connections = 1900
max_connect_errors = 100000
max_allowed_packet = 50M
lower_case_table_names=1
[mysqld]
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
(1) bin log配置
在上述的 my.conf
配置文件添加如下内容,完成后重启 MySQL
容器服务即可生效。
server-id = 1
log_bin = mysql-bin
binlog_format = row
binlog_row_image = full
expire_logs_days = 10
gtid_mode = on
enforce_gtid_consistency = on
查看 bin log
记录的内容步骤如下:
docker exec -it mysql /bin/bash # 进入容器
show variables like '%log_bin%'; # 查看目录
cd /var/lib/mysql # 进入目录
mysqlbinlog --base64-output=decode-rows -v mysql-bin.000001;
2. 服务启动
在启动容器之前先创建对应目录用于存放相关配置与数据,可根据自身需要修改路径。
# 配置文件目录
mkdir -p /usr/local/dockerdata/mysql/conf
# 数据存放目录
mkdir -p /usr/local/dockerdata/mysql/data
# 日志存放目录
mkdir -p /usr/local/dockerdata/mysql/logs
注意将其中的目录换成你上一步创建的路径,默认的用户名为 root
,密码这里我设置的是 123456
,如果想要设置免密登录替换为 -e MYSQL_ALLOW_EMPTY_PASSWORD=yes
即可。
同时这里通过 -v
参数将容器的目录内容映射到外部物理机以便后续使用。
docker run --privileged=true \
-p 3306:3306 \
--name mysql \
-v /usr/local/dockerdata/mysql/conf:/etc/mysql/conf.d \
-v /usr/local/dockerdata/mysql/data:/var/lib/mysql \
-v /usr/local/dockerdata/mysql:/logs \
-e MYSQL_ROOT_PASSWORD=123456 \
-d mysql:5.7
3. 修改密码
首先需要修改配置文件为免密登录。
vi /usr/local/dockerdata/mysql/conf/my.cnf
# 在文件中添加下面两行内容,然后保存退出。
skip-name-resolve
skip-grant-tables
设置完免密后重启容器,然后再进入容器重新设置密码。
docker restart mysql # 重启容器
docker exec -it mysql bash # 进入容器
mysql # 进入MySQL
use mysql; # 切换数据库
# 修改密码
update mysql.user set authentication_string = password("xxxx") where user="root";
二、MySQL8
1. 配置管理
MySQL 8
配置与 MySQL 5
不同是在 8 版本 sql_mode
中移除了 NO_AUTO_CREATE_USER
,其对应配置如下:
[mysqld]
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
datadir = /var/lib/mysql
# log-error = /var/log/mysql/error.log
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
# turn on the bin-log
server-id = 1
log_bin = mysql-bin
binlog_format = row
binlog_row_image = full
expire_logs_days = 10
gtid_mode = on
enforce_gtid_consistency = on
max_connections = 2000
max_user_connections = 1900
max_connect_errors = 100000
max_allowed_packet = 50M
lower_case_table_names=1
[mysqld]
skip-name-resolve
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
2. 启动命令
MySQL 8
与 MySQL 5
的启动命令上其实并没有什么太大差别,这里略去的映射目录创建的步骤。
启动服务后通过工具或应用链接提示
则在连接串上添加 allowPublicKeyRetrieval=True
参数。
docker run -d \
--privileged=true \
-p 3306:3306 \
-p 33060:33060 \
--name mysql8 \
-m 500m \
-v /home/budai/dockerdata/mysql8/data:/var/lib/mysql \
-v /home/budai/dockerdata/mysql8/config:/etc/mysql/conf.d \
-e MYSQL_ROOT_PASSWORD=123456 \
-e TZ=Asia/Shanghai \
--lower_case_table_names=1 \
mysql:8.0.21
三、Oracle
1. 容器启动
Oracle
镜像拉取和服务启动命令如下:
# 拉取镜像
docker pull registry.cn-hangzhou.aliyuncs.com/helowin/oracle_11g
# 启动容器
docker run -d \
-p 1521:1521 \
--name oracle \
registry.cn-hangzhou.aliyuncs.com/helowin/oracle_11g
2. 新增用户
完成容器创建后还需要进行用户的创建和授权操作。
通过下述步骤连接至数据库控制台:
# 进入容器
docker exec -it oracle /bin/bash
cd /home/oracle && source .bash_profile
sqlplus /nolog
# 登录数据库
conn /as sysdba
startup mount
下述步骤创建用户并授权,这里创建了账号密码为 root/123456
的管理员用户,可根据自身需求场景替换。
# 修改用户 system 的密码为 system
alter user system identified by system;
# 修改用户 sys 的密码为 system
alter user sys identified by system;
# 创建用户 root 的密码为 123456
create user root identified by 123456;
# 授权 root 为管理员
grant connect, resource, dba to root;
alter profile default limit password_life_time unlimited;
alter system set processes=2000 scope=spfile;
# 解锁用户 root
alter user root account unlock;
3. 服务连接
需要注意上面选择的 Oracle
镜像为阿里云镜像,因而连接时服务名并不是 ORCL
而是 helowin
。
四、PostgreSQL
1. 服务启动
搭建 PostgreSQL
环境同样也只需拉取镜像启动即可。
# 拉取镜像
docker pull postgres
# 启动容器
docker run -d \
--name posdgres \
-p 5432:5432 \
-e POSTGRES_PASSWORD=123456 \
postgres
五、MongoDB
1. 目录创建
首先创建相应的目录用于存储映射文件。
mkdir -p /usr/local/dockerdata/mongodb/db
mkdir -p /usr/local/dockerdata/mongodb/configdb
2. 容器启动
创建目录之后即可拉取容器并通过 docker run
启动,这里同样将内容的目录映射到物理机。
# 拉取镜像
docker pull mongo
# 启动容器
docker run -d \
--name mongodb \
-p 27017:27017 \
-v /usr/local/dockerdata/mongodb/configdb:/data/configdb \
-v /usr/local/dockerdata/mongodb/db:/data/db \
docker.io/mongo --auth
3. 用户创建
MongoDB
创建用户的相关命令如下:
docker exec -it mongo mongo admin
db.createUser({ user: 'root', pwd: '123456', roles: [ { role: "userAdminAnyDatabase", db: "admin" } ] });
六、Vertica
1. 容器启动
mkdir /usr/local/dockerdata/vertica # 创建映射目录
docker run -d \
--name vertica \
-p 5433:5433 \
-v /usr/local/dockerdata/vertica:/home/dbadmin/docker \
jbfavre/vertica:latest
3. 用户管理
通过 create user
关键字创建新用户。
-- create user
create user <user_name> identified by '<password>';
-- update password
ALTER USER <user_name> IDENTIFIED BY '<password>';
完成用户创建之后通过 grant
关键字授予用户权限,其中 <rolename>
取值如下:
- dbduser: 允许非
dba
用户访问database designer
使用命令行函数。 - dbadmin: 可以创建删除用户,角色以及模式;查询系统表;结束用户进程;修改配置文件等操作;但是不能启停数据库。
- pseudosuperuser: 可以认为几乎可以干所有的事,类似
oracle
的dba
。
-- grant privilege
grant <rolename> to <user_name>;
-- remove privilege
REVOKE <rolename> FROM <user_name>;
2. 模式管理
(1) Schema创建
Schema
模式创建语法如下:
CREATE SCHEMA <schema_name>;
GRANT ALL ON schema <schema_name> TO <user_name>;
(2) 表授权
表授权语法如下:
-- grant all table to user
GRANT ALL ON ALL TABLES IN SCHEMA <schema_name> TO <user_name>;
-- grant single table to user
GRANT ALL ON <schema_name>.<table_name> TO <user_name>;
-- remove table privilege
REVOKE ALL ON <schema_name>.<table_name> FROM linewell;