百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

秒级搭建各类数据库测试环境

ccwgpt 2024-11-27 12:24 50 浏览 0 评论

背景

试想一下这种情况,你负责的某个项目数据源有SQL Server、Oracle和MySQL,假设现在不让你访问生产库,也没有测试库给你用,你就只有一台开发电脑,要你做开发你怎么做?

你肯定会说,这问题还不简单吗?在开发电脑上安装这些数据库不就行了?答案是可以,但是偏题了嘛,你要在一台电脑上同时装SQL Server、Oracle和MySQL,能做到秒级?起码得废半天劲儿吧

话说n年前我也遇到过这种需求,必须得在我那破笔记本上装个SQL Server,装完占用硬盘10G多,用了一上午才装完,都不用干活儿了,等就完事,卸载还可能卸载不干净

我们的核心需求是搭建个测试环境,或者临时用一下,就不用过多优化,一个字,快就完事了,那么有秒级搭建的方法么?

有,下面docker上场,docker是什么就不用过多介绍了,以前写了很多篇文章介绍,注意,docker是全平台支持的,但是如果是在非Linux环境下,我建议先装个Linux虚拟机,然后在虚拟机里面装docker,这么做的原因是非Linux环境下发行的docker desktop其实也是自己内置了一个Linux虚拟机,一个手动挡,一个自动挡的区别,我建议你用自动挡,这样更清楚原理一些

如果你还没有安装docker,先装一个吧,我以前写过一篇全平台安装docker的文章【史上最全(全平台)docker安装方法!】,可以作为参考

  • Windows:https://docs.docker.com/docker-for-windows/install/
  • Mac OS:https://docs.docker.com/docker-for-mac/install/
  • Linux:https://docs.docker.com/engine/install/

在docker下搭建至少有两个好处

  • 快速启动
  • 资源隔离

SQLServer

dockerhub参考:
https://hub.docker.com/_/microsoft-mssql-server

这是微软官方出品的基于Ubuntu的SQL Server docker镜像,看下最新版镜像大小(2021-04-30),1.49G,真香

mcr.microsoft.com/mssql/server   latest              62c72d863950        3 weeks ago         1.49GB

秒级启动命令:

# 启动SQL Server,如果是Docker Desktop要把单引号改成双引号
docker run -e 'ACCEPT_EULA=Y' -e 'SA_PASSWORD=yourStrong(!)Password' -e 'MSSQL_PID=Developer' -p 1433:1433 -d --name MSSQL_1433 mcr.microsoft.com/mssql/server

# 进入容器内
docker exec -it MSSQL_1433 /opt/mssql-tools/bin/sqlcmd -S localhost -U sa -P yourStrong(!)Password

# 创建数据库
CREATE DATABASE testDB
go

然后就可以用下面这套参数连接数据库了

主机:127.0.0.1
端口:1433
数据库:testDB
用户名:sa
密码:yourStrong(!)Password

下面是环境变量的解释

  • ACCEPT_EULA:全称Accept End-User Licensing Agreement,接收最终用户许可证协议,必须得接收嘛,不然微软不给你用
  • SA_PASSWORD:全称System Administrator Password,系统管理员密码,密码必须是8位以上的大小写字母和数字/特殊符号的组合。
  • MSSQL_PID:全称Microsoft SQL Server Product Id,SQL Server的产品ID,默认是Developer

产品ID还可以是以下这些值

  • Developer : 默认值,以开发版运行
  • Express : 以学习版运行
  • Standard : 以标准版运行
  • Enterprise : 以企业版运行
  • EnterpriseCore : 以企业核心版运行

完整的环境变量可以参考此处:
https://docs.microsoft.com/en-us/sql/linux/sql-server-linux-configure-environment-variables?view=sql-server-2017

Oracle

Oracle数据库有Express Edition(精简版,简称xe)和Enterprise Edition(企业版,简称ee),xe版本我没找到任何官方的镜像,ee倒是有Oracle官方镜像,但是要使用的话必须填下面这玩意儿,emmmm,还是算了吧,这一点也不符合我们的题意:秒级

搜索大法好,找个评分高的镜像

docker search Oracle
NAME                            STARS
oraclelinux                     756  
jaspeen/oracle-11g              172  
oracleinanutshell/oracle-xe-11g 155
wnameless/oracle-xe-11g-r2      59
absolutapps/oracle-12c-ee       48

通过搜索发现jaspeen/oracle-11g
oracleinanutshell/oracle-xe-11g
评分高,前者我看过了比较繁琐,也不符合我们的题意,那就
oracleinanutshell/oracle-xe-11g

dockerhub参考:
https://hub.docker.com/r/oracleinanutshell/oracle-xe-11g

看下下载的镜像有多大,2.13G,体积还是挺大的

oracleinanutshell/oracle-xe-11g   latest              ad13c30ec346        2 years ago         2.13GB

秒级启动命令:

# 启动Oracle 11g xe,如果是Docker Desktop要把单引号改成双引号
# ORACLE_ALLOW_REMOTE表示允许远程连接
docker run -d --name ORACLE_1521 -p 1521:1521 -e 'ORACLE_ALLOW_REMOTE=true' oracleinanutshell/oracle-xe-11g

然后就可以用下面这套参数连接数据库了

主机:127.0.0.1
端口:1521
sid:xe
用户名:system
密码:oracle

当然,一般而言不能用system账号连数据库,下面是创建账号一把梭流程

-- 创建用户myuser,密码password
create user myuser identified by password; 
-- 分配表空间权限
grant create table,unlimited tablespace to myuser;
-- 分配查询权限
grant select any table to myuser;
-- 分配增删改权限
grant update any table,drop any table,insert any table to myuser;
-- 分配创建session权限(登陆)
grant create session to myuser;

MySQL

MySQL就好说多了,官方镜像一堆一堆的,任君挑选,5.X和8.X都有

dockerhub参考:
https://hub.docker.com/_/mysql

看下下载的镜像有多大,447M和556M,不大不小

mysql                             5.7.34              87eca374c0ed        10 days ago         447MB
mysql                             8.0.24              0627ec6901db        10 days ago         556MB

秒级启动命令:

# 启动MySQL 5,如果是Docker Desktop要把单引号改成双引号
docker run --name MYSQL_3306 -p 3306:3306 -e 'MYSQL_ROOT_PASSWORD=my-secret-pw' -d mysql:5.7.34

如果需要MySQL 8.X,直接改tag就可以了

# 启动MySQL 8,如果是Docker Desktop要把单引号改成双引号
docker run --name MYSQL_3306 -p 3306:3306 -e 'MYSQL_ROOT_PASSWORD=my-secret-pw' -d mysql:8.0.24

然后就可以用下面这套参数连接数据库了

主机:127.0.0.1
端口:3306
数据库:(可为空)
用户名:root
密码:my-secret-pw

PostgreSQL

dockerhub参考:
https://hub.docker.com/_/postgres

秒级启动命令:

# 启动PostgreSQL,如果是Docker Desktop要把单引号改成双引号
docker run --name POSTGRES_5432 -p 5432:5432 -e 'POSTGRES_PASSWORD=mysecretpassword' -d postgres

然后就可以用下面这套参数连接数据库了

主机:127.0.0.1
端口:5432
数据库:(可为空)
用户名:postgres
密码:mysecretpassword

搭建MySQL数据库服务

需求

在一些项目现场,很多时候,都是缺少专门的数据库运维人员的,但是开发人员开发项目,又需要用到MySQL数据库服务器,而且不同的项目的数据库又要分开

解决方案

对于非数据库运维人员,安装MySQL数据库有一定的难度,所以在这里推荐用docker来搭建MySQL数据库服务。这种方案门槛低,对于非数据库专业人员也能秒级搭建好一条MySQL服务。

搭建步骤

拉取MySQL数据库镜像

docker pull mysql:latest

直接执行这个命令,意思是拉取最新的镜像,但是实际项目可能需要制定的数据库版本,所以这里需要制定标签,拉取需要的镜像

docker pull mysql:5.7.28

创建MySQL容器

拉取好镜像之后,就可以创建2个MySQL容器了,对外访问端口为3306,3307

[root@localhost ~]# docker run --name mysql5.7.28_3306 -e MYSQL_ROOT_PASSWORD=root -p 3306:3306 -d -it mysql:5.7.28
423e39a1c8669a53942aed14002102adbb8871c47edfbaa67825691eb16d0d45
[root@localhost ~]# docker run --name mysql5.7.28_3307 -e MYSQL_ROOT_PASSWORD=root -p 3307:3306 -d -it mysql:5.7.28
ff668e421d59b1fef61d58b70532bf87d5915da1c47d63db690857d74d283e12
[root@localhost ~]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED              STATUS              PORTS                               NAMES
ff668e421d59        mysql:5.7.28        "docker-entrypoint.s鈥 29 seconds ago       Up 27 seconds       33060/tcp, 0.0.0.0:3307->3306/tcp   mysql5.7.28_3307
423e39a1c866        mysql:5.7.28        "docker-entrypoint.s鈥 About a minute ago   Up About a minute   0.0.0.0:3306->3306/tcp, 33060/tcp   mysql5.7.28_3306

这样2个容器就创建好了,只是用docker ps显示的结果被截断了,不够友好,可以用下面的命令,来展示你需要看到的列信息就好

[root@localhost ~]# docker ps --format "table {{.ID}}\t{{.Image}}\t{{.Names}}\t{{.Ports}}\t{{.RunningFor}}\t{{.Status}}"
CONTAINER ID        IMAGE               NAMES               PORTS                               CREATED              STATUS
ff668e421d59        mysql:5.7.28        mysql5.7.28_3307    33060/tcp, 0.0.0.0:3307->3306/tcp   About a minute ago   Up About a minute
423e39a1c866        mysql:5.7.28        mysql5.7.28_3306    0.0.0.0:3306->3306/tcp, 33060/tcp   2 minutes ago        Up 2 minutes

MySQL服务测试

验证端口

[root@localhost ~]# netstat -an|egrep "3306|3307"
tcp6       0      0 :::3306                 :::*                    LISTEN     
tcp6       0      0 :::3307                 :::*                    LISTEN     

可以看到,3306和3307端口已经开启。


MySQL客户端连接测试

[mysql@localhost ~]$ mysql -uroot -proot -h 192.168.17.128 -P 3306
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.28 MySQL Community Server (GPL)

Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> quit
Bye
[mysql@localhost ~]$ 
[mysql@localhost ~]$ mysql -uroot -proot -h 192.168.17.128 -P 3307
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.28 MySQL Community Server (GPL)

Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> quit

可以看到,两个MySQL数据库服务已经搭建好了,整个搭建都不到1分钟。

相关推荐

5 分钟搭建 Node.js 微服务原型(node 微服务架构)

微服务已成为在Node.js中构建可扩展且强大的云应用的主流方法。同时也存在一些门槛,其中一些难点需要你在以下方面做出决策:组织项目结构。将自定义服务连接到第三方服务(数据库,消息代理等)处理微服...

当前的前端,真的不配叫程序员吗?

今天看到一个比较令人震惊的帖子,说前端不配叫程序员,令我很吃鲸,是谁我就不说了,帖子出处是一个大龄程序员组里面的,想想也不觉得奇怪了,毕竟对于年龄比较大的程序员来说,前端起步比较晚,最开始就是一个切图...

聊聊asp.net中Web Api的使用(asp.net core web api教程)

扯淡随着app应用的崛起,后端服务开发的也越来越多,除了很多优秀的nodejs框架之外,微软当然也会在这个方面提供更便捷的开发方式。这是微软一贯的作风,如果从开发的便捷性来说的话微软是当之无愧的老大哥...

NodeJS中,listen Access:permission denied解决办法

错误描述:Win10系统,NodeJS程序。使用express框架开发的http服务器,启动时出现错误提示“listenAccess:permissiondenied"。错误原因:这是由于...

Hono — 下一代高性能web框架(天融信下一代vnp)

最近公司可能要有变革,要统计我们的技能。真的是很无语,但是有没有办法。哎,问豆包吧提起Hono大家可能很陌生,这是什么?但是我提到Expressjs、nodejs想必前端小伙伴很熟悉啊。那么Hon...

生活例子说明线程,简单明了(列举一个日常生活中的例子以程序的形式表示)

1.程序设计的目标在我看来单从程序的角度来看,一个好的程序的目标应该是性能与用户体验的平衡。当然一个程序是否能够满足用户的需求暂且不谈,这是业务层面的问题,我们仅仅讨论程序本身。围绕两点来展开,性能...

Node实战006:自定义模块的创建和使用详解

Node的应用是由模块组成的,每个文件的定义都是一个模块(module变量代表当前模块)并有自己的作用域。Node遵循commonjs的模块规范,用来隔离每个模块的作用域,使每一个模块在自身的命名空间...

Node.js基本内容和知识点(node.js的概念)

简单的说Node.js就是运行在服务端的JavaScript,起初段定位是后端开发语言,由于技术的不够成熟,一般小型项目会完全使用node.js作为后台支撑,大项目中,运行不够稳定,不会轻易使用...

干货 | 如何利用Node.js 构建分布式集群

引言在软件定义的世界里,企业通过Web应用和移动应用程序来提供大部分的服务,Node.js迅速成为时下最为流行的一个平台之一,就和它可以搭建响应速度快、易于扩展的web应用和移动应用有很大关系,并凭...

nodejs mongodb 实现简易留言板(node.js留言板)

一个朋友问了一下mongodb的一些操作问题我就做了下面这个简单的留言板给他做一个实例希望能帮助到他express的框架就不说了express的问题请移步nodejs之expressht...

nodejs mqtt 智能售货机系统物联网控制系统源码分享

智能售货机系统(Moleintelligentvendingmachinesystem)是一套物联网控制系统性的解决方案。主要涉及到的语言和库有c,c++,js,nodejs,vue.js,...

为什么 Node.js 这么火,而同样异步模式 Python 框架 Twisted 却十几年一直不温不火?

说nodejs只是靠营销的是否太天真了些?当初nodejs出来的时候各种BUG,我简单的测试其大文件传输都会出现各种问题。而同時期的其他阵营早就甩其几条街了。但是为什么却能一直不断发展壮大?...

2020年14个最有用的NodeJS库(node用什么数据库)

Express快速,简单,极简的节点Web框架对…有好处·易于处理多种类型的请求,例如GET,PUT,POST和DELETE请求·快速构建单页,多页和混合Web应用程序每周下载1100万Lice...

连载:2016年最好的JS框架和库(下)

继续上一期的介绍:Agility.jsAgility.js是专为JS服务的MVC库,你可以免费编写可再用和可维护的浏览器代码,Agility支持Js,样式(CSS)、内容(HTML)和行为(JS)。C...

awesome-nodejs 终极资源库:60K+星标的开发者宝藏

Node.js终极资源库:60K+星标的开发者宝藏引言在GitHub上,有一个备受瞩目的Node.js资源仓库,以其惊人的60.6k星标量和6kfork量,成为了Node.js开发者的必备参考。这个...

取消回复欢迎 发表评论: