Tôi vừa mới mua một máy tính để bàn gia đình mới. Tôi có ba cơ sở dữ liệu MySQL mà tôi muốn chuyển qua. Tôi đã hủy tất cả chúng bằng mysqldump trước khi tháo ổ đĩa khỏi máy cũ.
Việc khôi phục cơ sở dữ liệu lớn nhất mất nhiều thời gian (cho đến nay đã được 24 giờ). Tôi đang khôi phục thông qua:
mysql -uxxxx -p
Nhập mật khẩu: yyyy
mysql> tạo cơ sở dữ liệu foo;
mysql> sử dụng foo;
mysql> bắt đầu giao dịch;
mysql> \. <tệp kết xuất>
tôi cầu nguyện tôi nhớ làm
khi điều này kết thúc!
Tôi đã từ bỏ nỗ lực khôi phục đầu tiên của mình mà không cần giao dịch vì mất quá nhiều thời gian.Tôi dự định không bận tâm đến giao dịch khi khôi phục hai cơ sở dữ liệu khác vì nó dường như không có gì khác biệt.
Tôi có thể làm gì để tăng tốc độ khôi phục không? Tôi có nên thực hiện sao lưu theo cách khác không - Tôi chỉ sử dụng vanilla mysqldump
dòng lệnh, với --skip-column-statistic
vì kết xuất sẽ thất bại, như được đề xuất trong câu trả lời stackoverflow này.
Để tham khảo, máy mới chạy Windows 10 và MySQL 8.0.25 Community; máy cũ chạy Windows 7 và MySQL 5.6.22.
Xem xét kỹ hơn các tệp kết xuất (để tìm phiên bản máy chủ), tôi thấy rằng các bảng được tạo với các chỉ mục của chúng, theo sau là rất nhiều câu lệnh INSERT INTO. Điều này không có vẻ đặc biệt thông minh. Có cách nào để gây ra mysqldump
để tạo ra một tập lệnh:
- Tạo các bảng không có chỉ mục
- Chèn các hàng; và sau đó
- Tạo các chỉ mục.
có vẻ như là một cách tiếp cận tốt hơn khi cơ sở dữ liệu đang được khôi phục. (Hơi ngạc nhiên là đây không phải là mặc định!) Tôi cho rằng điều này có thể thực hiện được với MySQL - Tôi đã sử dụng SQLLite trong 3 năm qua và chắc chắn là có thể thực hiện được ở đó.
Cập nhật
câu hỏi này không phải là hoàn toàn trả lời bởi Làm cách nào để tăng tốc độ khôi phục MySQL từ tệp kết xuất?, vì câu hỏi đó đặc biệt đề cập đến các bảng MyISAM và của tôi là InnoDB. (Xin lỗi. Lẽ ra tôi nên đề cập đến công cụ lưu trữ trong câu hỏi ban đầu của mình.)
Tuy nhiên, câu trả lời đó đã thúc đẩy và cung cấp thông tin cho những nỗ lực của tôi để giải quyết vấn đề, điều mà tôi ghi lại trong câu trả lời của riêng mình bên dưới.