Làm thế nào để bạn thường sao lưu cơ sở dữ liệu của bạn?


8

Tôi đang sử dụng mysql

Bạn có thường xuyên sao lưu cơ sở dữ liệu của mình không?

Làm thế nào để bạn thường sao lưu cơ sở dữ liệu của bạn?

Xuất tất cả dữ liệu sang định dạng sql hoặc cvs và giữ nó trong một thư mục ??

Câu trả lời:


11

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

  1. Dừng sao chép với SLAVE STOP;trên nô lệ
  2. Làm một mysqldump --opttrên máy chủ nô lệ.
  3. Bắt đầu nhân rộng một lần nữa với 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:

  • Đừng cố gắng sao lưu dựa trên các tệp dữ liệu mysql. Nó rắc rối hơn giá trị của nó và các bãi chứa MySQL linh hoạt hơn.
  • Cẩn thận với bảng khóa mysqldump trong khi bán phá giá.
  • Coi chừng sự không nhất quán trong các bãi chứa trừ khi bạn khóa mọi bàn trong khi đổ
  • Sử dụng mysqldump --opt, vì đó thường là cách nhanh nhất để nhập SQL kết quả
  • Đổ thường xuyên như bạn có thể. Chúng tôi kết xuất hàng ngày vì chúng tôi có 40GB dữ liệu.
  • Thỉnh thoảng kiểm tra bãi rác của bạn trên một máy chủ dự phòng để đảm bảo chúng hoạt động.

2
Seconds_Behind_Master từ SHOW SLAVE STATUS có sẵn trong 4.1.9 trở lên.
Dan Carley

+1 về nhân rộng và bãi thường xuyên. Tôi thấy tương đối không đau khi làm việc lần đầu tiên (không có nhiều kinh nghiệm về mysql trước đó). Tôi không hoàn toàn đồng ý về các bản sao lưu tệp, Nếu bạn có không gian để làm cả hai thì việc sao lưu dựa trên tệp sẽ dễ dàng hơn để xây dựng lại một máy chủ mới nếu máy chủ cơ sở dữ liệu của bạn thay thế, các bãi chứa sql riêng lẻ cho mỗi cơ sở dữ liệu sẽ nhiều hơn hữu ích nếu bạn cần khôi phục dữ liệu mà ai đó đã mất.
thứ

3

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

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.

Đối với phần mềm, ví dụ bạn có thể xem bacula hoặc zmanda


1

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.



1

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.


0

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.


0

Đố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 ý :)


0

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!

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.