在实际工作中,需要搭建关系型数据库(RMDB)进行功能的测试与验证,本文基于docker镜像,提供针对关系型数据库MySQL、PostgreSQL、SQLServer测试数据库的快速搭建。
包含了拉取关系型数据库(RMDB)并启动容器,创建数据库、用户及相应的授权操作,最后提供建表及示例数据,用于进行功能测试验证。
docker pull mysql:5.7.30
# 正式使用
docker run -d --name mysql5.7 -p 13306:3306 -v D:/docker/mysql/single/log:/var/log/mysql -v D:/docker/mysql/single/data:/var/lib/mysql -v D:/docker/mysql/single/conf:/etc/mysql -e MYSQL_ROOT_PASSWORD=root mysql:5.7.30
# 测试期间使用,可以快速的定位容器启动或使用过程中的问题
docker run --rm --name mysql5.7 -p 13306:3306 -v D:/docker/mysql/single/log:/var/log/mysql -v D:/docker/mysql/single/data:/var/lib/mysql -v D:/docker/mysql/single/conf:/etc/mysql -e MYSQL_ROOT_PASSWORD=root mysql:5.7.30
使用 mysql -hlocalhost -P13306 -uroot -proot
进入mysql客户端
CREATE USER 'dbuser'@'%' IDENTIFIED BY 'abc@1234';
grant all privileges on *.* to 'dbuser'@'%' identified by 'abc@1234';
FLUSH PRIVILEGES;
之后,就可以使用 mysql -hlocalhost -P13306 -udbuser -pabc@1234
进行进入mysql客户端
CREATE DATABASE test;
CREATE TABLE customers (
id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(30) NOT NULL,
addr VARCHAR(30) NOT NULL,
email VARCHAR(50),
registration_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
INSERT INTO customers (name, addr, email)
VALUES ('John', '广州市', '[email protected]'),
('Jane', '广州市', '[email protected]'),
('Bob', '广州市', '[email protected]'),
('Alice', '广州市', '[email protected]'),
('张三', '广州市', '[email protected]'),
('李四', '广州市', '[email protected]'),
('Frank', '广州市', '[email protected]'),
('Grace', '广州市', '[email protected]'),
('赵六', '广州市', '[email protected]'),
('Isabella', '广州市', '[email protected]'),
('Jacob', '广州市', '[email protected]'),
('Karen', '广州市', '[email protected]'),
('Linda', '广州市', '[email protected]');
参见《docker for windows–MySQL 5.7.x 主从及主从复制配置及问题解决》
详见参见 docker安装postgresql
docker pull postgres:12.14-alpine3.17
docker run --rm --name pg12 -v D:/docker/rmdb/pg/data:/var/lib/postgresql/data -e POSTGRES_PASSWORD=Test123 -p 5432:5432 postgres:12.14-alpine3.17
进入容器
docker exec -it pg12 bash
su - postgres
psql -U postgres
#或执行如下命令,但需要输入上面定义的密码
psql -h localhost -d testdb -U postgres -W
然后执行如下命令:
create database testdb TEMPLATE template0 ENCODING 'utf8' ;
create user pguser with password '123456';
--允许用户用于登录
ALTER USER pguser WITH login;
grant all privileges on database testdb to pguser;
然后就可以使用如下命令执行SQL语句
psql -h localhost -d testdb -U pguser -W
CREATE TABLE customers (
id serial PRIMARY KEY,
name VARCHAR(30) NOT NULL,
addr VARCHAR(30) NOT NULL,
email VARCHAR(50),
registration_date timestamp NOT NULL DEFAULT NOW()
);
INSERT INTO customers (name, addr, email)
VALUES ('John', '广州市', '[email protected]'),
('Jane', '广州市', '[email protected]'),
('Bob', '广州市', '[email protected]'),
('Alice', '广州市', '[email protected]'),
('张三', '广州市', '[email protected]'),
('李四', '广州市', '[email protected]'),
('Frank', '广州市', '[email protected]'),
('Grace', '广州市', '[email protected]'),
('赵六', '广州市', '[email protected]'),
('Isabella', '广州市', '[email protected]'),
('Jacob', '广州市', '[email protected]'),
('Karen', '广州市', '[email protected]'),
('Linda', '广州市', '[email protected]');
部署参考:
部署并连接到 SQL Server Linux 容器
通过Docker部署并配置SQLServer
#拉取镜像
docker pull mcr.microsoft.com/mssql/server:2019-latest
# 运行容器
#运行MS SQLServer, 容易出现的错误是密码不满足要求,SQLServer的要求是至少8位且需要由大写字母、小写字母、数字、符号中的至少3种组成
docker run --rm --name SQLServer -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=Abc12345" -p 1433:1433 --hostname sqlserver1 mcr.microsoft.com/mssql/server:2019-latest
# 进入容器
docker exec -it SQLServer bash
#连接到sqlserver
/opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P "Abc12345"
包含创建数据库、创建用户并授权
注意:和PostgreSQL有一点点相似,SQLServer也是将用户分为了登录用户和数据库用户的,所以需要分别创建
CREATE DATABASE testdb;
SELECT Name from sys.Databases;
go
create login dbuser with password='abc@1234', default_database=testdb;
create user dbuser for login dbuser with default_schema=dbo;
go
#授予所有权限
exec sp_addrolemember 'db_owner', 'dbuser';
go
use testdb;
go
CREATE TABLE customers ( id Int PRIMARY KEY, name NVARCHAR(30) NOT NULL, addr NVARCHAR(30) NOT NULL, email NVARCHAR(50));
INSERT INTO customers (id,name, addr, email) VALUES (1,'John', N'广州市', '[email protected]'),(2,'Jane', N'广州市', '[email protected]'),(3,'Bob', N'广州市', '[email protected]'), (4,'Alice', N'广州市', '[email protected]'),(5,N'张三', N'广州市', '[email protected]'), (6,N'李四', N'广州市', '[email protected]'), (7,'Frank', N'广州市', '[email protected]'),(8,'Grace', N'广州市', '[email protected]'), (9,'赵六', N'广州市', '[email protected]'),(10,'Isabella', N'广州市', '[email protected]'),(11,'Jacob', N'广州市', '[email protected]'),(12,'Karen', N'广州市', '[email protected]'),(13,'Linda', N'广州市', '[email protected]');
go
select * from customers;
go
退出后,可以使用
/opt/mssql-tools/bin/sqlcmd -S localhost -U dbuser -P "abc@1234" -d testdb
直接进入操作。