我正准备将我们的生产数据库迁移到另一台服务器。它大约有 38GB,并且使用的是 MYISAM 表。由于我无法物理访问新的服务器文件系统,我们只能使用 mysqldump。
我浏览了这个网站,看看mysqldump在线备份是否会拖垮我们的生产网站。来自这篇文章:Run MySQLDump without Locking Tables ,它说显然 mysqldump 将锁定数据库并防止插入。但是经过几次测试,我很想知道它是否显示其他内容。
如果我用
mysqldump -u root -ppassword --flush-logs testDB > /tmp/backup.sql
mysqldump 最终默认会执行 '--lock-tables',这是一个 READ LOCAL 锁 ( refer to mysql 5.1 doc ),并发插入仍然可用.我做了一个 for 循环,每秒插入其中一个表,而 mysqldump 需要一分钟才能完成。在此期间,每一秒都会插入记录。这意味着,mysqldump 不会中断生产服务器,INSERT 仍然可以继续。
有没有人有不同的经历?我想在继续我的生产服务器之前确保这一点,所以很高兴知道我是否做错了什么导致我的测试不正确。
[我的mysql-server版本是5.1.52,mysqldump是10.13]
最佳答案
现在,您可能有一个包含分离表的数据库,或者一个数据仓库——其中所有内容(根本)都没有规范化,并且表之间没有任何链接。在那种情况下,任何转储都可以。
我假设,包含 38G 数据的生产数据库包含某种形式的图形(BLOB),然后 - 无处不在 - 你有来自其他表的链接。对吧?
因此,据我所知,您有可能失去表之间的严重链接(通常是主键/外键对),因此,您可能会在更新/插入时捕获一个表,而其依赖项(使用该表作为其主要来源)尚未更新。因此,您将失去所谓的数据库完整性。
很多时候,重建完整性是极其麻烦的,最常见的原因是使用/生成/维护数据库系统的系统没有被做成一个面向事务的系统,因此,数据库中的关系无法被追踪除了通过主键/外键关系。
因此,您肯定可以在没有锁的情况下复制您的表以及上面的许多其他建议 - 但您有烧伤手指的风险,并且取决于系统操作的敏感程度 - 您可能严重烫伤自己或只是擦伤表面。
示例:如果您的数据库是一个关键任务数据库系统,包含 ICU 中生命支持设备的建议心跳率,在进行迁移之前我会三思而后行。
但是,如果数据库包含来自 facebook 或类似网站的图片 = 您可能会承受从 0 到 129,388 个丢失链接的后果:-)。
现在 - 分析到此为止。解决方案:
您必须创建一个软件,它可以完全完整地为您进行转储,一个表接一个表集,一个元组一个元组。您需要识别该数据集群,它可以从您当前的在线 24/7/365 基地复制到您的新基地,然后执行此操作,然后标记它已被复制。
IFFF 现在您已经复制的记录发生了变化,您将需要对这些记录进行后续复制。这可能是一件棘手的事情。
如果您运行的是更高级的 MYSQL 版本 - 您实际上可以创建另一个站点和/或副本,或分布式数据库 - 然后以这种方式摆脱它。
IFFF 你有一个让我们说 10 分钟的窗口,你可以根据需要创建它,然后你也可以只复制位于驱动器上的物理文件。我说的是 .stm .std - 等等 - 文件 - 然后你可以关闭服务器几分钟,然后复制。
现在回答一个基本问题:
您需要不时维护您的机器。您的系统没有足够的空间来进行此类操作吗?如果没有 - 那么当硬盘崩溃时你会怎么做。注意“何时”,而不是“如果”。
关于mysqldump 不中断现场生产 INSERT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9905558/
我已经在Sinatra上创建了应用程序,它代表了一个简单的API。我想在生产和开发上进行部署。我想在部署时选择,是开发还是生产,一些方法的逻辑应该改变,这取决于部署类型。是否有任何想法,如何完成以及解决此问题的一些示例。例子:我有代码get'/api/test'doreturn"Itisdev"end但是在部署到生产环境之后我想在运行/api/test之后看到ItisPROD如何实现? 最佳答案 根据SinatraDocumentation:EnvironmentscanbesetthroughtheRACK_ENVenvironm
您如何在Rails中的实时服务器上进行有效调试,无论是在测试版/生产服务器上?我试过直接在服务器上修改文件,然后重启应用,但是修改好像没有生效,或者需要很长时间(缓存?)我也试过在本地做“脚本/服务器生产”,但是那很慢另一种选择是编码和部署,但效率很低。有人对他们如何有效地做到这一点有任何见解吗? 最佳答案 我会回答你的问题,即使我不同意这种热修补服务器代码的方式:)首先,你真的确定你已经重启了服务器吗?您可以通过跟踪日志文件来检查它。您更改的代码显示的View可能会被缓存。缓存页面位于tmp/cache文件夹下。您可以尝试手动删除
在添加一些空格以使代码更具可读性时(与上面的代码对齐),我遇到了这个:classCdefx42endendm=C.new现在这将给出“错误数量的参数”:m.x*m.x这将给出“语法错误,意外的tSTAR,期待$end”:2/m.x*m.x这里的解析器到底发生了什么?我使用Ruby1.9.2和2.1.5进行了测试。 最佳答案 *用于运算符(42*42)和参数解包(myfun*[42,42])。当你这样做时:m.x*m.x2/m.x*m.xRuby将此解释为参数解包,而不是*运算符(即乘法)。如果您不熟悉它,参数解包(有时也称为“spl
require'mechanize'agent=Mechanize.newlogin=agent.get('http://www.schoolnet.ch/DE/HomeDE.htm')agent.clicklogin.link_withtext:/Login/然后我得到Mechanize::UnsupportedSchemeError。 最佳答案 Mechanize不支持javascript但您可以将搜索字段添加到表单并为其分配搜索词并使用mechanize提交表单form=page.forms.firstform.add_fie
在几个项目中,我希望有一个类似rakeserver的rake任务,它将通过任何需要的方式开始为该应用程序提供服务。这是一个示例:task:serverdo%x{bundleexecrackup-p1234}end这行得通,但是当我准备停止它时,按Ctrl+c并没有正常关闭;它中断了Rake任务本身,它说rakeaborted!并给出堆栈跟踪。在某些情况下,我必须执行Ctrl+c两次。我可能可以用Signal.trap写一些东西来更优雅地中断它。有没有更简单的方法? 最佳答案 trap('SIGINT'){puts"Yourmessa
我有可变数量的表格和可变数量的行,我想让它们一个接一个地显示,但如果表格不适合当前页面,请将其放在下一页,然后继续。我已将表格放入事务中,以便我可以回滚然后打印它(如果高度适合当前页面),但我如何获得表格高度?我现在有这段代码pdf.transactiondopdf.table@data,:font_size=>12,:border_style=>:grid,:horizontal_padding=>10,:vertical_padding=>3,:border_width=>2,:position=>:left,:row_colors=>["FFFFFF","DDDDDD"]pdf.
在他们的网站上找不到任何内容。我主要只是想看看哪个值得一试(当然是RIA)。谢谢 最佳答案 SproutCoredemos 关于ruby-是否有SproutCore或Cappuccino的现场演示/示例应用程序,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/1419788/
我有带有gemwebsocket-rails0.7的Rails3.2应用程序。在开发机上,一切正常在生产环境中,我使用Nginx/1.6作为代理服务器,Unicorn作为http服务器。Thin用于独立模式(在https://github.com/websocket-rails/websocket-rails/wiki/Standalone-Server-Mode之后)。nginx配置:location/websocket{proxy_passhttp://localhost:3001/websocket;proxy_http_version1.1;proxy_set_headerUp
有时您会制作特定于项目的gem。这有助于将一些“责任”从主Rails应用程序中抽象出来并转移到一个更加模块化的地方。gem将位于您应用程序的此处:gem'example_gem',path:'./example_gem'你捆绑,一切都很好。现在,您gitinitgem并将其存储在github上它自己的repo中。您尝试这样做以使其对开发人员友好:group:development,:testdogem'example_gem',path:'./example_gem'endgroup:productiondogem'example_gem',github:'company/exampl
我正在将我的第一个Rails应用程序放到互联网上,我已经阅读了有关安全性的Rails指南并实现了其中列出的要点,但有兴趣了解其他信息吗?另外,我目前将上传的内容存储在公共(public)/文档中,这样可以吗?我注意到没有保护目录的htaccess文件。 最佳答案 如果您想保密,将上传的内容存储在可预测的位置是个坏主意。如果您不关心访问它的人,那也没关系。使用.htaccess密码保护目录是一个很好的解决方案。您应该使用Acunetx测试您的应用程序是否存在漏洞($$)或Wapiti(开源)。您还应该阅读:Whatshouldadev