Làm cách nào để giảm kích thước cơ sở dữ liệu trên AWS RDS MySQL?


7

Tôi có cơ sở dữ liệu RDS MySQL trên Amazon Web Services.

Tôi muốn giảm kích thước của cơ sở dữ liệu trong bảng điều khiển để tiết kiệm tiền.

Q: Làm thế nào để tôi làm cho nó nhỏ hơn? Trang web của họ nói rằng bạn phải thực hiện một số cách kỳ diệu (từ bản sao lưu hoặc đại loại như vậy), nhưng tôi không muốn đánh nhầm nó!

Từng bước một xin vui lòng ... Cảm ơn! nhập mô tả hình ảnh ở đây

Đây là những gì đã xảy ra: Amazon hỏi kích thước tối đa mong muốn của tôi là gì. Tôi đã chọn 10GB. Sau đó tôi đã thêm dữ liệu cho đến khi bảng vượt quá 10GB. Amazon sau đó tự động tăng giới hạn kích thước lên 20GB. Trong sổ tay của họ, họ nói "tăng" là tự động, nhưng "giảm" thì không.

Sau khi xóa một số dữ liệu dư thừa để kích thước dữ liệu dưới 10GB một lần nữa, có cách nào để tạo một db 10GB mới và sao chép dữ liệu vào đó bằng cách sử dụng ảnh chụp nhanh không?


Tôi chỉ thử nó. Không chỉ là giảm không tự động, nó cũng không được phép. Tôi chỉ cố gắng sửa đổi trường hợp với số thấp hơn và một thông báo lỗi màu đỏ xuất hiện Requested storage size (5) cannot be less then the current storage size (10).
RolandoMySQLDBA

Xin lỗi tôi đã hiểu nhầm câu hỏi. Tôi nghĩ bạn có nghĩa là chỉ thu nhỏ cơ sở dữ liệu.
RolandoMySQLDBA

Câu trả lời:


3

Viết một kịch bản sẽ tạo ra một kịch bản

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

Khi bạn hài lòng rằng kịch bản sẽ thực hiện công việc thì hãy làm điều này:

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

Hãy thử một lần !!!

CAUPAT

Vì mặc định cho innodb_file_per_table là ON, nên mỗi bảng InnoDB được tối ưu hóa sẽ thực sự .ibdthu nhỏ tệp của nó . Bất kỳ bảng MyISAM nào (mà tôi hy vọng bạn không có) cũng sẽ bị thu hẹp .MYD.MYIcác tệp của chúng .

CẬP NHẬT 2012-09-18 18:19 EDT

Tôi chỉ thử như sau:

  • Tạo Instance1 với Đĩa 5G
  • Đã sửa đổi Instance1 thành 10G Disk
  • Đã sửa đổi Instance1 thành 5G Disk (thông báo lỗi Requested storage size (5) cannot be less then the current storage size (10):)
  • Tạo Instance2 với 5G
  • Đã tải Instance1 với dữ liệu 2MB
  • Đã tạo Ảnh chụp nhanh của Instance1 (cùng kích thước: 10G)

Nếu tôi khôi phục ảnh chụp nhanh, nó sẽ tạo ra một Instance thứ ba. Ảnh chụp nhanh DB phải là toàn bộ Máy chủ, không phải là bất kỳ loại nào.

Bạn sẽ phải làm thủ tục lộn xộn sau:

  1. mysqldump dữ liệu từ Instance 20GB
  2. Tạo sơ đồ 10G mới
  3. tải mysqldump vào phiên bản 10GB mới
  4. xác minh tất cả dữ liệu bạn muốn
  5. phá hủy 20GB cũ

Ở bước 4, vui lòng chạy Truy vấn không gian lưu trữ động cơ lớn này trên cả hai phiên bản 20 GB và 10 GB

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;

Bạn sẽ thấy có bao nhiêu không gian lãng phí biến mất khi di chuyển mysqldump sang Instance 10GB mới. Điều này chắc chắn sẽ chống phân mảnh tất cả các bảng InnoDB. Bạn có thể cần chạy tập lệnh trên ( /root/OptimizeAllTables.sql) Tôi đã cho bạn ở trên để chạy OPTIMIZE TABLEtrên tất cả các bảng trong signscơ sở dữ liệu mỗi tuần một lần để giữ mức .ibdnhỏ nhất có thể. Bạn cũng có thể chạy Truy vấn không gian lưu trữ động cơ lớn để theo dõi khi nó bắt đầu tiếp cận 10GB.


2
Bạn code là đáng sợ, nhưng tôi sẽ thử nó. BTW, có ai biết về sự thay thế giá rẻ cho AWS RDS MYSQL không? Tôi đã khởi động wikispeedia được 7 năm rồi và nó đã được bổ sung!
aaaaaaa
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.