- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我正准备将我们的生产数据库迁移到另一台服务器。它大约有 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/
我定期针对 Drupal 数据库运行 mysqldump,伙计,那些缓存表可能会变得很大。考虑到我在重新加载数据后做的第一件事就是清除缓存,如果我可以完全跳过转储所有这些行,我会很高兴。我不想跳过表创
我知道 exit code = 0 的意思是 No error。 我得到 退出代码 = 2。这是什么意思 ? 在哪里可以看到 mysqldump 退出代码的完整列表? 最佳答案 取自 MySQL 5.
我正在清理这个庞大而困惑的数据库。它包含 500 多个表,这是将 Magento Enterprise 与 Joomla 结合到一个数据库中的结果。 更糟糕的是,有一组 70 多个 Joomla 表根
我正在尝试将大型数据库中的一小部分记录加载到测试数据库中。 你如何告诉 mysqldump 只给你 800 万条记录中的 n 条记录? 谢谢 最佳答案 正如 skaffman 所说,使用 --wher
我的 mysqldump 有问题.. 我知道如何从我的电脑启动 mysqldump 命令到远程服务器并自动将 mysqldump 文件保存在我的电脑中...... mysqldump --user=
这是我的完整 bash 脚本: #!/bin/bash logs="$HOME/sitedb_backups/log" mysql_user="user" mysql_password="pass"
在这个问题上工作了一整天..当我请求该表时,它为我提供了整个数据库.. #!/bin/bash # mysqldump --user root --password=mypw sellnjho_rea
我想知道通过phpmyadmin导出大型数据库和通过mysqldump通过终端导出信息的方式是否有区别。 mysqldump 的运行时间更好? 我想知道优点和缺点。 谢谢。 最佳答案 如果你从 mys
我收到以下错误: mysqldump: [ERROR] unknown variable 'database=myDB1' 当我运行这个命令时: mysqldump -u root -p myDB
我最近将服务器升级到 Debian 9,并将 MySQL 升级到最新版本。我有一个简单的备份脚本,在生产站点上执行任何工作之前运行该脚本,但这一次,在运行脚本时,我遇到以下情况: mysqldump:
解决方法见底 我正在运行 mysqldump 作为通过 cron 作业调用的 php 脚本的一部分。 是否可以从 mysqldump 命令返回 stderr,或者将其分配给可以直接读取的变量?或者是否
尝试通过 MySQL Workbench 转储简单数据库,方法是单击...服务器>数据导出>mydb>开始导出 获取消息:mysqldump 版本不匹配...消息显示这些版本mysqldump.exe
我尝试了其他答案中提到的其他解决方案,例如权限、授予问题、端口号、密码/用户名等。这些都不是问题;它们可能是您的问题,因此需要检查。 配置:在 Win10 上运行 Wordpress,安装了 Mari
我必须从服务器转储数据库,将 .sql 传输到另一台服务器,然后运行以下脚本以使用此语法删除某些行: DELETE wp_posts FROM wp_posts INNER JOIN wp_postm
正在尝试从 MAMP 服务器导出数据库。我试过命令: # mysql_dump -u root -proot db_name > db_name.sql # Applications/MAMP/Lib
我只想转储最新的行。但是当我通过 --where 选项时,它不会转储行。但是当我使用相同的 where 子句执行选择查询时,它返回行。这是我的选择查询: SELECT * FROM abc.`xyz
我用它来将所有数据从 my_database 导出到分隔文本到一个文件夹中 mysqldump -u root -p -t -T /path/to/export my_database --field
我经常使用以下命令通过 ssh 在 AWS RDS 上导出 mySql 数据库: mysqldump -u myUserName -h myDBname.randomcharacters.us-reg
我需要包含数据的 mysqldump,但在数据库中还有几个带有 FEDERATED 引擎的表。 mysqldump 也包括 FEDERATED 表的 INSERT,这是导致“重复条目”错误的原因(因为
mysqldump 在生成转储文件时会转义哪些字符?不幸的是,我找不到任何相关文档,所以我尝试了一下,发现只有双引号、单引号和反斜杠 (',",\) 会被反斜杠转义。 但是还有更多吗,或者有任何可用的
我是一名优秀的程序员,十分优秀!