2010-08-15 22 views
10

Tôi đã được sao lưu cơ sở dữ liệu MySQL trong nhiều năm bằng lệnh: mysqldump myDatabaseName -u root > myBackupFile.sqlLàm thế nào để khôi phục đáng tin cậy MySQL blobs

Các sao lưu đã xuất hiện để làm việc tốt ...

Sau đó tôi muốn khôi phục một sao lưu vào một cơ sở dữ liệu có tên khác, vì vậy tôi đã làm: mysql myNewDatabaseName -u root < myBackupFile.sql

Tôi gặp một số lỗi về kích thước logfile nên tôi đã ngừng Mysql và xóa logfiles và thiết lập các tham số sau trong tệp my.ini và khởi động lại mysql.

innodb_log_file_size=64M

innodb_log_buffer_size=8M

Các khôi phục tại hoàn thành không có lỗi nhưng một trong ba bảng, trong đó có các đốm màu không bao giờ được phục hồi.

My max-allowed-packet được thiết lập để 32M

Cơ sở dữ liệu kích thước sao lưu là khoảng 2,2 GB đa số kích thước mà là trong bảng mà không khôi phục. Nếu tôi chạy mysqldump trên cơ sở dữ liệu đã khôi phục, kích thước là 185 MB.

Tôi hiện đã thử thực hiện mysqldump với tùy chọn --hex-blob nhưng tôi chưa cố khôi phục tệp đó (3.9 GB).

Tôi thực sự cần phải có cách chống sao lưu để sao lưu và khôi phục khi bản sao lưu hiện tại của tôi xuất hiện vô giá trị. Tôi đặc biệt lo ngại rằng nó "không âm thầm" mà không có mục nhập nhật ký lỗi nào mà tôi có thể thấy.

Môi trường là cửa sổ máy chủ 2003 sp2

Bất kỳ trợ giúp nào được đánh giá cao!

George

+0

Các đốm màu có trong tệp kết xuất không?Có lẽ họ chưa bao giờ được sao lưu để bắt đầu và quá trình khôi phục hoạt động hoàn hảo với dữ liệu thực sự có. Các max_packet ảnh hưởng đến dữ liệu đi cả hai cách. Nếu bạn bán phá giá với giới hạn quá nhỏ, các đốm màu có thể đã bị bỏ hoặc cắt ngắn. –

Trả lời

4

tôi quản lý để sao lưu và khôi phục các đốm màu bằng cách sử dụng sau lệnh mysqldump:

mysqldump --opt --skip-extended-insert --max_allowed_packet=128M -u root myDB > filename 

Không chắc chắn nếu nó xác định max_allowed_packet trên dòng lệnh hoặc skip-extended-insert rằng đã làm các trick.

Tôi giả định rằng max_allowed_packet của 32M đang được sử dụng, nhưng tôi nghĩ rằng trong tệp cấu hình mysql nằm trong phần [mysqld] và vì vậy có thể không áp dụng cho kết xuất.

Tôi vẫn không hiểu tại sao tôi không gặp lỗi trên bãi chứa hoặc khôi phục.

+0

mysqldump bỏ qua max_allowed_packet. Đọc báo cáo lỗi này để cố gắng tìm hiểu xem nó có được thiết kế hay không: http://bugs.mysql.com/bug.php?id=9753 – Leopd

2

mysqldump --skip-extended-insert hoạt động nhưng có thể giảm hiệu suất xuống 100x khi khôi phục, làm cho nó không phải là lựa chọn khả thi.

Khi bạn thực hiện sao lưu, max_allowed_packet bị bỏ qua mysqldump (bởi design?) Phần bổ sung thực tế là net_buffer_length. Vì vậy, hãy đảm bảo rằng max_allowed_packet của bạn lớn hơn net_buffer_length và nó sẽ hoạt động. Như trong:

mysqldump -u root --net_buffer_length=100k oldDB > backup.sql 
mysql -u root --max_allowed_packet=10M newDB < backup.sql 
Các vấn đề liên quan