我很难find如何在开发,testing和生产服务器之间pipe理数据库模式和数据的好例子。 这是我们的设置。 每个开发者都有一个运行我们的应用程序和MySQL数据库的虚拟机。 做他们想做的事情是他们个人的沙箱。 目前,开发人员将对SQL模式进行更改,并将数据库转储到他们提交到SVN的文本文件中。 我们想要部署持续集成开发服务器,它将始终运行最新的提交代码。 如果我们现在这样做,它会从每个版本的SVN重新加载数据库。 我们有一个运行“候选版本”的testing(虚拟)服务器。 部署到testing服务器目前是一个非常手动的过程,通常需要从SVN加载最新的SQL并调整它。 另外,testing服务器上的数据不一致。 你最终将得到最后一个提交的开发者在他的沙箱服务器上的testing数据。 凡是一切破裂的是部署到生产。 由于我们无法用testing数据覆盖实时数据,因此需要手动重新创build所有模式更改。 如果有大量的模式更改或转换脚本来操纵数据,这可能会变得非常多毛。 如果问题只是模式,那么这将是一个更容易的问题,但是在开发过程中也会更新数据库中的“基础”数据,例如安全和权限表中的元数据。 这是我看到朝向持续集成和一步构build迈进的最大障碍。 你如何解决它? 后续问题:如何跟踪数据库版本,以便知道要运行哪些脚本来升级给定的数据库实例? 像Lance这样的版本表是否在标准程序下面提到? 感谢塔伦蒂诺的参考。 我不在.NET环境中,但是我发现他们的DataBaseChangeMangement wiki页面非常有帮助。 尤其是这个Powerpoint演示文稿(.ppt) 我将编写一个Python脚本,用于检查给定目录中*.sql脚本的名称与数据库中的表,并根据构成第一部分的整数运行那些不在那里的脚本文件名。 如果这是一个非常简单的解决scheme,就像我怀疑的那样,那么我会在这里发布它。 我有一个工作脚本。 它处理初始化数据库,如果它不存在,并根据需要运行升级脚本。 还有用于擦除现有数据库和从文件导入testing数据的开关。 大约200行,所以我不会发表(尽pipe如果有兴趣,我可以把它放在pastebin上)。
当我试图在terminal内运行MySQL的以下命令时: mysql -u $user -p$password -e "statement" 执行按预期工作,但始终发出警告: 警告:在命令行界面上使用密码可能不安全。 但是,我必须使用一个存储我的密码的环境variables( $password )来执行上面的语句,因为我想从terminal内的bash脚本中迭代运行该命令,而且我绝对不喜欢等待提示出现并迫使我在一个脚本中input我的密码50或100次。 所以这是我的问题: 抑制警告是否可行? 这个命令正如我所说的那样工作正常,但是当我循环并运行命令50或100次时,窗口变得非常混乱。 我应该遵守警告信息,不要在我的脚本中写密码吗? 如果是这样的话,那么每次提示强迫我时都必须input我的密码吗? 运行man mysql并没有帮助,只是说 –show-warnings 如果有任何陈述,会在每个陈述后显示警告。 该选项适用于交互式和批处理模式。 并没有提到如何closuresfunction,如果我不丢失的东西。 我在OS X 10.9.1小牛,并从自制软件使用MySQL 5.6。
我将在密码+ salt上运行SHA256,但是我不知道在设置mysql数据库的时候需要多长时间才能生成VARCHAR。 什么是好长度?
我想在本地主机上删除root用户的密码。 我怎样才能做到这一点? 我错误地设置了root用户的密码。 这就是为什么phpmyadmin给出了一个错误: #1045 – Access denied for user 'root'@'localhost' (using password: NO)
我想运行一个简单的查询来抛出Table1所有行,其中主列值不在另一个表( Table2 )的列中。 我试过使用: SELECT * FROM Table1 WHERE Table1.principal NOT IN Table2.principal 这是抛出一个语法错误。 谷歌search引导我到人们说MySQL不支持NOT IN和需要使用一些非常复杂的东西的论坛。 这是真的? 还是我犯了一个可怕的错误?
我正在使用Putty(命令行)并运行一个 mysql> SELECT * FROM sometable; “sometable”有许多领域,这导致许多列试图在terminal显示。 字段包装到下一行,因此很难将列标题与字段值alignment。 有什么解决scheme在terminal浏览这些数据? (ps我没有/想访问phpMyAdmin或其他GUI界面) 寻找命令行解决scheme,例如将MySQL Query结果保存到文本或CVS文件( save-mysql-query-results-into-a-text-or-csv-file )
我已经在我的MySQL数据库上使用了一段时间的索引了,但是从来没有正确地学过这些索引。 一般来说,我会在任何我将要使用WHERE子句进行search或select的字段上放置一个索引,但是有时它看起来并不那么黑白。 什么是MySQL索引的最佳实践? 示例情况/难题: 如果一个表有六列,而且所有这些列都是可search的,那么我应该把它们全部或全部都编入索引吗? 。 索引有什么负面的性能影响? 。 如果我有一个VARCHAR 2500列可以从我的网站的部分search,我应该索引它?
我通过MacPorts安装了MySQL。 什么是我需要停止服务器的命令(我需要testing当我的应用程序的行为时,MySQL死了)?
为什么在DEFAULT或ON UPDATE子句中只能有一个CURRENT_TIMESTAMP的TIMESTAMP列? CREATE TABLE `foo` ( `ProductID` INT(10) UNSIGNED NOT NULL, `AddedDate` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, `UpdatedDate` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP ) ENGINE=INNODB; 结果的错误: 错误代码:1293 表格定义不正确; 在DEFAULT或ON UPDATE子句中只能有一个TIMESTAMP列和CURRENT_TIMESTAMP
MySQL中的模式和数据库有区别吗? 在SQL Server中,数据库是与模式相关的更高级别的容器。 我读过Create Schema和Create Database在MySQL中做基本相同的事情,这使我相信模式和数据库对于相同的对象是不同的单词。