免安装原生产环境的MySQL是什么

70次阅读
没有评论

共计 3726 个字符,预计需要花费 10 分钟才能阅读完成。

这篇文章主要介绍“免安装原生产环境的 MySQL 是什么”,在日常操作中,相信很多人在免安装原生产环境的 MySQL 是什么问题上存在疑惑,丸趣 TV 小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”免安装原生产环境的 MySQL 是什么”的疑惑有所帮助!接下来,请跟着丸趣 TV 小编一起来学习吧!

就是它:

dependency   groupId com.wix /groupId   artifactId wix-embedded-mysql /artifactId   version x.y.z /version   scope test /scope   /dependency

代码也简单,直接定义你需要的版本,数据库信息,把要初始化的 SQL 给它,走起。

MysqldConfig config = aMysqldConfig(v5_6_23) // 这里是版本  .withCharset(UTF8) .withPort(2215) .withUser(user1 ,  pwd2) .withTimeZone(Europe/Vilnius) .withTimeout(2, TimeUnit.MINUTES) .withServerVariable(max_connect_errors , 666) .build(); EmbeddedMysql mysqld = anEmbeddedMysql(config) .addSchema(aschema , ScriptResolver.classPathScript( db/001_init.sql)) .start(); //do work mysqld.stop(); //optional, as there is a shutdown hook

这有啥优势:

测试可以跑在和生产环境基本一致的环境,同样的版本,同样的编码和配置,database/schema/user settings 等等

比安装一个更容易,想切换版本,改配置也更轻松;

本地每个项目可以使用不同的版本,不同的配置,啥都不用担心;

对于 MySQL 的多个版本支持 – 5.5, 5.6, 5.7, 8.0;

多种平台和环境都支持。

原理

这背后是怎么实现的呢?

咱们是「刨根究底」公众号,一起来看看。

上面代码配置之后的 start,到底 start 了啥?

咱们看下面这几小段代码:

protected EmbeddedMysql( final MysqldConfig mysqldConfig, final DownloadConfig downloadConfig) { this.config = mysqldConfig; IRuntimeConfig runtimeConfig = new RuntimeConfigBuilder().defaults(mysqldConfig, downloadConfig).build(); MysqldStarter mysqldStarter = new MysqldStarter(runtimeConfig); localRepository.lock(); try { this.executable = mysqldStarter.prepare(mysqldConfig); } finally { localRepository.unlock(); } try { executable.start(); getClient(SCHEMA, mysqldConfig.getCharset()).executeCommands( format( CREATE USER  %s @ %%  IDENTIFIED BY  %s , mysqldConfig.getUsername(), mysqldConfig.getPassword())); } catch (IOException e) { throw new RuntimeException(e); } }
protected MysqldProcess start( final Distribution distribution, final MysqldConfig config, final IRuntimeConfig runtime) throws IOException { logger.info( Preparing mysqld for startup  Setup.apply(config, executable, runtime); logger.info(Starting MysqldProcess  return new MysqldProcess(distribution, config, runtime, this); }

其实这背后依赖了一个叫 embed.process 的开源项目,

public AbstractProcess(Distribution distribution, T config, IRuntimeConfig runtimeConfig, E executable) throws IOException { this.config = config; this.runtimeConfig = runtimeConfig; this.executable = executable; this.distribution = distribution; // pid file needs to be set before ProcessBuilder is called this.pidFile = pidFile(this.executable.getFile().executable()); ProcessOutput outputConfig = runtimeConfig.getProcessOutput(); // Refactor me - to much things done in this try/catch String nextCall=  try { nextCall= onBeforeProcess()  onBeforeProcess(runtimeConfig); nextCall= newProcessBuilder()  ProcessBuilder processBuilder = ProcessControl.newProcessBuilder( runtimeConfig.getCommandLinePostProcessor().process(distribution, getCommandLine(distribution, config, this.executable.getFile())), getEnvironment(distribution, config, this.executable.getFile()), true); nextCall= onBeforeProcessStart()  onBeforeProcessStart(processBuilder, config, runtimeConfig); nextCall= start()  process = ProcessControl.start(config.supportConfig(), processBuilder); nextCall= writePidFile()  if (process.getPid() != null) { writePidFile(pidFile, process.getPid()); } nextCall= addShutdownHook()  if (runtimeConfig.isDaemonProcess()   !executable.isRegisteredJobKiller()) { ProcessControl.addShutdownHook(new JobKiller()); registeredJobKiller = true; } nextCall= onAfterProcessStart()  onAfterProcessStart(process, runtimeConfig); } catch (IOException iox) { stop(); throw iox; } }

它又操作了什么呢? 从名字你也猜到了,它是直接操作进程的,实际在运行时,会下载一个 MySQL,然后通过脚本启停。

初次启动的时候,会直接下载

有了这些,在测试的时候就可以和生产环境一样,启动时加载初始化 SQL 脚本,开始你的工作了。

github 地址:https://github.com/wix/wix-embedded-mysql

到此,关于“免安装原生产环境的 MySQL 是什么”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注丸趣 TV 网站,丸趣 TV 小编会继续努力为大家带来更多实用的文章!

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-07-27发表,共计3726字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)