php - 将非常大的 MySQL 数据库中的特定表/列备份并压缩到不同的服务器上

标签 php mysql database backup database-backups

我的目标是对数据库的特定部分进行每日备份(覆盖前一天的备份),这样我就可以轻松下载并导入它,并在出现问题时获得所有重要数据。

我目前有一个 20GB 的 Web 服务器 (Ubuntu),我的数据库约为 11GB 并且正在增长(缓慢),所以我知道我需要启动第二个 Web 服务器来存储备份。 (一旦主服务器达到约 20GB,我最终需要升级它。)

我的数据当前设置在几个索引表中,但我不需要备份所有数据,因此我想运行一个查询,仅选择我需要的数据并重建一个新数据库(. sql)。这将有助于减小大小,但文件仍然会很大,所以我还想压缩该文件,GZIP 是可行的方法吗?这也可以将整个数据库整齐地打包到一个文件中,这正是我所需要的。

此外,由于我可能会使用第二个服务器向第一个服务器请求数据,因此如何确保请求不会超时?

TL;DR 需要在另一台服务器上运行巨大(10+ GB)数据库的每日备份,同时删除过程中的某些表/列并进行压缩以优化硬盘和带宽使用这样我就可以根据需要轻松下载并导入备份(一个文件)。

最佳答案

Mysqldump可以输出选定的表,并且您可以通过管道将输出传输到gzip:

$ mysqldump mydatabase table1 table2 table3 |
    gzip -c > dump.sql.gz

mysqldump 有一个选项可以转储行的子集。

$ mysqldump --where "created_at > '2014-03-01'" ...other options...

当然,您转储的所有表都必须识别 WHERE 条件。也就是说,如果您引用其中一个表中不存在的列,则会出现错误。

Mysqldump 没有选择列子集的选项。


回复您的评论:

$ (mysqldump ...first... ; mysqldump ...second...) | gzip -c > dump.sql.gz

关于php - 将非常大的 MySQL 数据库中的特定表/列备份并压缩到不同的服务器上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23544098/

相关文章:

php - 如何在编辑方法中停止在 codeigniter 中更新密码?

PHP - 在混合字符串中将 ASCII 转换为 Unicode

php - 电子邮件营销统计实现

php - 通过 LIMIT 1 获取最后一次登录 - PHP 和 MYSQL

mysql - 我厚吗? MySQL : "Not unique table/alias" on LEFT JOIN

php - 如何运行安装了 Nginx 的 docker 容器?

java - postExecute 方法 URL 参数中的 Android 错误未添加到 mysql 数据库中

python - 在 SQLAlchemy 中使用 declarative_base 时,如何在需要时绑定(bind)引擎?

Java处理大量数据

mysql - mysql 不工作的情况