AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / dba / 问题 / 24491
Accepted
aaaaaaa
aaaaaaa
Asked: 2012-09-19 08:39:26 +0800 CST2012-09-19 08:39:26 +0800 CST 2012-09-19 08:39:26 +0800 CST

如何减少 AWS RDS MySQL 上的数据库大小?

  • 772

我在 Amazon Web Services 上有一个 RDS MySQL 数据库。

我想在控制面板中减小数据库的大小以节省资金。

问:如何让它变小?他们的网站说你必须以某种神奇的方式(从备份等),但我不想误打它!

请一步一步...谢谢! 在此处输入图像描述

这就是发生的事情:亚马逊问我想要的最大尺寸应该是多少。我选择了 10GB。然后我添加数据,直到表超过 10GB。然后亚马逊自动将大小限制增加到 20GB。在他们的手册中,他们说“增加”是自动的,但“减少”不是。

删除一些多余的数据后,数据大小再次低于 10GB,有没有办法创建一个新的 10GB 数据库并使用快照将数据复制到其中?

mysql amazon-rds
  • 1 1 个回答
  • 9931 Views

1 个回答

  • Voted
  1. Best Answer
    RolandoMySQLDBA
    2012-09-19T09:21:16+08:002012-09-19T09:21:16+08:00

    编写将创建脚本的脚本

    MYSQL_CONN="-hAmazonRDSDNSName -u... -p..."
    SQL="SELECT CONCAT('OPTIMIZE TABLE ',table_schema,'.',table_name,';')"
    SQL="${SQL} OptimizeTableSQL FROM information_schema.tables WHERE table_schema = 'signs'"
    SQL="${SQL} ORDER BY (data_length+index_length)"
    mysql ${MYSQL_CONN} -AN -e"${SQL}" > /root/OptimizeAllTables.sql
    less /root/OptimizeAllTables.sql
    

    当您对脚本可以完成这项工作感到满意时,请执行以下操作:

    mysql ${MYSQL_CONN} < /root/OptimizeAllTables.sql
    

    试试看 !!!

    警告

    由于innodb_file_per_table.ibd的默认值为 ON,因此每个正在优化的 InnoDB 表实际上都会缩小其文件。任何 MyISAM 表(我希望你没有)也将缩小它们的.MYD和文件。.MYI

    更新 2012-09-18 18:19 EDT

    我刚刚尝试了以下方法:

    • 使用 5G 磁盘创建 Instance1
    • 修改Instance1到10G磁盘
    • 将Instance1修改为5G Disk(错误信息Requested storage size (5) cannot be less then the current storage size (10):)
    • 使用 5G 创建 Instance2
    • 使用 2MB 数据加载 Instance1
    • 创建Instance1的快照(相同大小:10G)

    如果我恢复快照,它会创建第三个实例。数据库快照必须是整个服务器实例,而不是任何类型的转储。

    您将不得不执行以下混乱的过程:

    1. mysqldump 20GB Instance 中的数据
    2. 创建一个新的 10G 实例
    3. 将 mysqldump 加载到新的 10GB 实例中
    4. 验证您想要的所有数据是否存在
    5. 销毁旧的 20GB

    在第 4 步,请在 20GB 和 10GB 实例上运行此 Big Storage Engine Space Query

    SELECT IFNULL(B.engine,'Total') "Storage Engine",
    CONCAT(LPAD(REPLACE(FORMAT(B.DSize/POWER(1024,pw),3),',',''),17,' '),' ',
    SUBSTR(' KMGTP',pw+1,1),'B') "Data Size", CONCAT(LPAD(REPLACE(
    FORMAT(B.ISize/POWER(1024,pw),3),',',''),17,' '),' ',
    SUBSTR(' KMGTP',pw+1,1),'B') "Index Size", CONCAT(LPAD(REPLACE(
    FORMAT(B.TSize/POWER(1024,pw),3),',',''),17,' '),' ',
    SUBSTR(' KMGTP',pw+1,1),'B') "Table Size" FROM
    (SELECT engine,SUM(data_length) DSize,SUM(index_length) ISize,
    SUM(data_length+index_length) TSize FROM
    information_schema.tables WHERE table_schema NOT IN
    ('mysql','information_schema','performance_schema') AND
    engine IS NOT NULL GROUP BY engine WITH ROLLUP) B,
    (SELECT 3 pw) A ORDER BY TSize;
    

    将 mysqldump 迁移到新的 10GB 实例时,您将看到多少浪费的空间消失了。这肯定会对所有 InnoDB 表进行碎片整理。你可能需要运行上面/root/OptimizeAllTables.sql我给你的脚本()每周一次OPTIMIZE TABLE在数据库中的所有表上运行一次,以保持尽可能小。当它开始接近 10GB 时,您还可以运行 Big Storage Engine Space Query to Monitor。signs.ibd

    • 3

相关问题

  • 是否有任何 MySQL 基准测试工具?[关闭]

  • 我在哪里可以找到mysql慢日志?

  • 如何优化大型数据库的 mysqldump?

  • 什么时候是使用 MariaDB 而不是 MySQL 的合适时机,为什么?

  • 组如何跟踪数据库架构更改?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何查看 Oracle 中的数据库列表?

    • 8 个回答
  • Marko Smith

    mysql innodb_buffer_pool_size 应该有多大?

    • 4 个回答
  • Marko Smith

    列出指定表的所有列

    • 5 个回答
  • Marko Smith

    从 .frm 和 .ibd 文件恢复表?

    • 10 个回答
  • Marko Smith

    如何在不修改我自己的 tnsnames.ora 的情况下使用 sqlplus 连接到位于另一台主机上的 Oracle 数据库

    • 4 个回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    如何选择每组的第一行?

    • 6 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Martin Hope
    Mike Walsh 为什么事务日志不断增长或空间不足? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland 列出指定表的所有列 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney MySQL 能否合理地对数十亿行执行查询? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx 如何监控大型 .sql 文件的导入进度? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    pedrosanta 使用 psql 列出数据库权限 2011-08-04 11:01:21 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST
  • Martin Hope
    bernd_k 什么时候应该使用唯一约束而不是唯一索引? 2011-01-05 02:32:27 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve