Tôi đã xem xét điều này một chút. Tôi nhận thấy có những câu hỏi tương tự trên Stack Overflow và chính Amazon cũng có một tài liệu hữu ích đưa ra lời khuyên ở đây:
http://aws.amazon.com/articles/2933
Mối quan tâm của tôi là như sau:
Amazon khuyên bạn mysqldump
chỉ nên sử dụng cho "số lượng nhỏ dữ liệu" mà họ xác định là dưới 1GB. Cơ sở dữ liệu tôi dự định di chuyển là hơn 20GB.
Một điều đó là tốt đẹp về mysqldump
, tuy nhiên, là nó có --single-transaction
cờ, cho phép tôi để đảm bảo tình trạng DB đó là phù hợp với một điểm duy nhất trong thời gian.
Đối với lượng dữ liệu lớn hơn, khuyến nghị của Amazon là xuất cơ sở dữ liệu thành các tệp phẳng (ví dụ: CSV) và sau đó sử dụng mysqlimport
để nhập dữ liệu đó vào RDS. Cách tốt nhất mà tôi biết làm thế nào để làm điều này , tuy nhiên, là thông qua SELECT ... INTO OUTFILE
lệnh, chỉ hoạt động một bảng mỗi lần. Tất nhiên, nhược điểm của nó là không đảm bảo tính nhất quán --single-transaction
.
Tôi cho rằng tôi có thể đảm bảo tính nhất quán bằng cách tạm thời lấy toàn bộ DB; nhưng tôi muốn tránh điều đó nếu có thể.
- Cách tốt nhất để đưa cơ sở dữ liệu lớn (> 20GB) của tôi vào các tệp phẳng để sau đó tôi có thể sử dụng là
mysqlimport
gì? - Nếu nó thực sự là
SELECT ... INTO OUTFILE
lệnh, làm thế nào để tôi xuất tất cả các bảng trong cơ sở dữ liệu (tốt nhất là không phải thực hiện cùng một lúc)? - Có cách nào tốt để đảm bảo tính nhất quán trong tất cả điều này không?
--opt
là mặc định, làm tăng tốc mọi thứ. Tôi nghĩ rằng chúng tôi đã mất 6 giờ để tải lại vào một máy chủ mạnh, nhưng quá trình chuyển đổi là chuyển đổi ... :)