Câu trả lời:
Nếu bạn muốn sao lưu MySQL đúng cách, không có thời gian chết, bạn nên sao chép cơ sở dữ liệu sang máy chủ dự phòng. Nó không cần phải cực kỳ mạnh mẽ, nó chỉ cần đối phó với tải ghi của cơ sở dữ liệu chủ của bạn. Bạn không nên sử dụng máy chủ này trong sản xuất. Nếu bản sao không bao giờ theo kịp, bạn cần một máy chủ mạnh hơn. Bạn có thể kiểm tra bằng cách so sánh tệp nhật ký và vị trí từ đầu ra của
> SHOW MASTER STATUS\G
trên chủ và
> SHOW SLAVE STATUS\G
trên nô lệ. Tôi nghĩ rằng MySQL5 sẽ hiển thị độ trễ từ SHOW SLAVE STATUS
.
Khi bạn vui vì nô lệ của bạn đang theo kịp, bạn có thể sao lưu bằng cách thực hiện
SLAVE STOP;
trên nô lệmysqldump --opt
trên máy chủ nô lệ.SLAVE START;
trên nô lệNếu bạn làm điều này, thì bạn sẽ có một bản sao lưu nhất quán cơ sở dữ liệu của bạn. Phương pháp này ngăn các cơ sở dữ liệu khác nhau hoặc thậm chí tệ hơn, các bảng khác nhau trong cùng một cơ sở dữ liệu không đồng bộ hóa và ngăn chặn thời gian chết bằng cách khóa các bảng để ghi trong khi bạn thực hiện sao lưu.
Một lợi ích tuyệt vời của thiết lập này là bạn có một bản sao cơ sở dữ liệu mà bạn có thể sử dụng để chạy các truy vấn đắt tiền trên đó sẽ không ảnh hưởng đến dịch vụ trực tiếp của bạn.
Vài lời khuyên ngẫu nhiên:
mysqldump --opt
, vì đó thường là cách nhanh nhất để nhập SQL kết quảTôi sử dụng một tập lệnh sử dụng mysqldump
để trích xuất dữ liệu / lược đồ vào một tệp cho mỗi cơ sở dữ liệu. Dữ liệu được sao lưu bằng bản sao lưu netbackup bình thường vào băng. Bạn rõ ràng có thể thêm chuông và còi nhưng điều này không phải là một bãi rác cơ bản.
#!/bin/sh
# Find out what databases are in mysql and back them up
# Delete old backups
STARTTIME=` date +%Y%m%d-%H%M `
#BACKUP_DIR="/usr/local/db_backups"
BACKUP_DIR="/var/local/db_backups"
LOGFILE="/var/log/db_backups.log"
USER="root"
PASSWD="<password>"
KEEP="7"
(
echo
echo " ---MySQL backups start ${STARTTIME} ---"
#delete any backup written more than ${KEEP} days ago
echo "Removing files over ${KEEP} days old from ${BACKUP_DIR}:"
/usr/bin/find ${BACKUP_DIR} -mindepth 1 -mtime +${KEEP} -print -delete
echo
echo "Performing today's dumps"
#find each database running in this instance of mysl
for DB in ` echo "show databases;"|mysql -u${USER} -p${PASSWD} mysql |awk " NR>1 {print $1} " `
do
#generate a backup file name based on the data base name
BACKUP_FILE="${BACKUP_DIR}/${DB}-${STARTTIME}.sql"
echo "Processing database ${DB} into file ${BACKUP_FILE}"
# dump the database data/schema into the backup file
mysqldump -u${USER} -p${PASSWD} --add-drop-table ${DB} > ${BACKUP_FILE}
gzip ${BACKUP_FILE}
done
ENDTIME=` date +%Y%m%d-%H%M `
echo
echo " ---MySQL backups complete ${ENDTIME} ---"
echo
) >> ${LOGFILE} 2>&1
Thông thường cơ sở dữ liệu được sao lưu mỗi ngày một lần nếu chúng phải được dừng lại, và sau đó các bản sao lưu được chuyển đến một khu vực lưu trữ để hợp nhất sau đó chúng đi vào băng.
Sao lưu cơ sở dữ liệu được thực hiện với các công cụ gốc được cung cấp với công cụ cơ sở dữ liệu hầu hết thời gian.
Sao lưu sẽ không được giữ trên các máy chủ với dữ liệu trong trường hợp lỗi phần cứng.
Chúng tôi khuyên bạn nên cập nhật các bản sao của máy chủ cơ sở dữ liệu của mình khi có thể, tốt hơn là có một macanism chuyển đổi dự phòng cho cơ sở dữ liệu sản xuất.
Thiết lập tiêu chuẩn của chúng tôi là một cụm HA với hai cơ sở dữ liệu được sao chép sang cơ sở dữ liệu khác chỉ đọc.
Chúng tôi sao lưu toàn bộ mỗi ngày một lần và sau đó có chính sách cho mỗi khách hàng loại bỏ các bản sao lưu cũ, nói chung chúng tôi giữ 4 bản sao lưu hàng ngày cuối cùng (để tồn tại vào cuối tuần;), 4 chủ nhật cuối cùng và 4 chủ nhật cuối cùng trong một tháng. Sau đó, một hoặc hai bãi rác một năm sẽ được lưu trữ để được lưu giữ mãi mãi.
Chúng tôi cũng giữ các bản ghi sao chép trong bao lâu, chúng tôi có thể đủ khả năng để dự phòng không gian đĩa. Chúng cũng khá hữu ích như công cụ gỡ lỗi khi chúng ghi lại chính xác ai đã thay đổi cái gì và khi nào.
Về mặt lý thuyết, tất cả những gì bạn cần là một bản sao lưu đầy đủ và tất cả các bản ghi sao chép để có thể khôi phục kịp thời, nhưng sao lưu toàn bộ thường xuyên hơn sẽ tăng tốc độ khôi phục.
Một mẹo nhỏ với sao lưu là sử dụng các bảng innodb và tham số giao dịch --single cho kết xuất mysql, theo cách đó, bản sao lưu sẽ không chặn cơ sở dữ liệu trong khi nó chạy.
Tôi đang sử dụng Xtrabackup của Percona . đó là giải pháp sao lưu không thể chặn cho InnoDB / XtraDB
Toàn bộ mục đích của việc sao lưu là để có thể khôi phục.
Tôi sẽ không ủng hộ kết xuất CSV như một giải pháp sao lưu; tất cả nó sẽ cung cấp cho bạn là dữ liệu thô. Có rất nhiều hơn bên cạnh đó, đặc biệt là với một cơ sở dữ liệu. Bảng mô tả, khung nhìn, procs lưu trữ, bạn đặt tên cho nó. Nếu bạn không có những thứ này thì bạn sẽ không thể lấy lại thành công. Ngoài ra còn có ứng dụng RDBMS và cấu hình để xem xét. Bạn có thể có một số lượng lớn các bản vá, mà bạn cũng cần phải đưa vào môi trường khôi phục của mình để đưa nó về cùng cấp độ. Bạn có thể đang chạy một số cấu hình đặc biệt được quyết định bởi các yêu cầu của ứng dụng của bạn. Bạn thậm chí có thể có một bộ cài đặt hệ điều hành cụ thể cần thiết để cơ sở dữ liệu của bạn chạy tối ưu. Tất cả những thứ này cũng sẽ cần phải được lấy lại, và trừ khi bạn có một giải pháp sao lưu có khả năng thực hiện chúng, đó là sự chậm trễ hơn nữa trong thời gian phục hồi của bạn,
Đối với các bản sao lưu cơ sở dữ liệu (và các bản sao lưu nói chung) tôi luôn thích sử dụng phần mềm sao lưu "thực" có thể xử lý tất cả các phần mềm này.
Gần đây nhất, tôi đã quản lý máy chủ MySQL trong EC2. Chúng tôi thiết lập ảnh chụp nhanh EBS trong công việc định kỳ 15 phút, 3-5 ảnh chụp nhanh được lưu giữ.
Khi chúng tôi thực hiện các máy chủ MySQL 'truyền thống', chúng tôi đã sao lưu hàng ngày qua MySQl-ZRM. Các bản sao lưu về cơ bản là mysqldumps, được gửi đến băng, SAN, vv, tùy thuộc vào nhu cầu của khách hàng.
Cả hai phương pháp có thể được thực hiện mà không dừng cơ sở dữ liệu.
Đối với MySQL, tôi sử dụng automysqlbackup ( http://sourceforge.net/projects/automysqlbackup/ ), vì phần mềm sao lưu của tôi (Backup Exec) không hỗ trợ ảnh chụp nhanh trên các hệ thống Linux.
Nó hoạt động tốt, nhưng tôi sẽ theo dõi chủ đề này để được gợi ý :)
Chúng tôi thực hiện sao lưu hai lần mỗi ngày và cũng chạy sao lưu nhật ký cứ sau 10 - 15 phút.
Ưu điểm của phương pháp này là bạn có thể khôi phục từ một trong hai lần sao lưu hàng ngày và sau đó áp dụng các tệp nhật ký cho đến 15 phút cuối cùng. Bằng cách này, bạn đang giảm thiểu lượng dữ liệu mà bạn có thể mất.
Mức độ thường xuyên bạn sao lưu dữ liệu của bạn là tùy thuộc vào bạn. Bao nhiêu dữ liệu bạn cảm thấy thoải mái với việc mất? Nếu bạn có thể đủ khả năng để mất dữ liệu một ngày thì hãy sao lưu mỗi ngày một lần. Dữ liệu không bao giờ thay đổi? Sau đó, bạn chỉ cần một bản sao!