常用数据库部署教程


作为一个开发人员,平日里难免会与各种数据库进行打交道,但如果每次使用都在本机从头部署,难免过于繁杂,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 8MySQL 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: 可以认为几乎可以干所有的事,类似 oracledba
-- 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;

文章作者: 烽火戏诸诸诸侯
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 烽火戏诸诸诸侯 !
  目录