MySQL 的備份方法

jopen 13年前發布 | 23K 次閱讀 MySQL 數據庫服務器

邏輯備份

        通過一些普通的SQL SELECT查詢語句的集合,通過表掃描創建邏輯備份。

    優缺點:速度慢,可在線備份。

物理備份
        通過對原始二進制數據的復制獲得的備份。
    優缺點:速度快,但必須離線備份(數據庫系統必須關閉)。

備份實用程序和操作系統及方案
?
1、InnoDB Hot Backup應用
        備份InnoDB引擎的商業產品,在備份時保持數據庫的查詢和更新,無需離線或顯示鎖定表。
        也可備份MyISAM表,但需要在備份的過程中阻塞MyISAM表的更新。
        可備份部分或全部數據庫、壓縮備份的輸出文件、進行有選擇的備份(如備份指定的表)。
        包含兩個文件 ibbackup和innobackup

    使用ibbackup備份:在命令行中指定兩個備份所需的文件作為參數,第一個為標準的my.cnf 配置文件,第二個文件包含用于保存備份的文件信息。
    shell> ibbackup my.cnf backup.cnf
    文件的參數如下:
        datadir = directory
        innodb_data_home_dir = directory
        innodb_data_file_patch = parameter-list
        innodb_log_group_home_dir = directory
        innodb_log_file_in_group = group_number
        innodb_log_file_size = size

    實例:
        [mysqld]
        datadir = /usr/local/mysql/data
        innodb_data_home_dir = /usr/local/mysql/data
        innodb_data_file_patch = ibdata1:10M:autoextend
        innodb_log_group_home_dir = /usr/local/mysql/data
        innodb_log_file_in_group = 2
        innodb_log_file_size = 20M
    假設要將備份文件寫入 /home/cbell/backup 目錄,則 backup.cnf 如下:
        datadir = /home/cbell/backup
        innodb_data_home_dir = /home/cbell/backup
        innodb_data_file_patch = ibdata1:10M:autoextend
        innodb_log_group_home_dir = /home/cbell/backup
        innodb_log_file_in_group = 2
        innodb_log_file_size = 20M
    還可以使用 --compress 選項壓縮備份
        ibbackup --compress my.cnf  backup.cnf

    應用日志備份:由于備份過程中InnoDB數據庫仍在運行,如果想得到完全一致的備份,必須將當前日志應用到備份文件中以同步數據。
    執行此操作只需要備份配置文件和 --applylog 選項,如:
    shell$ ibbackup --applylog  /home/cbell/backup.cnf
    如果使用了 compress 選項,那么還需要提供 --uncompress 選項,如:
    shell$  ibbackup --applylog --uncompress /home/cbell/backup.cnf

    使用ibbackup還原數據
        直接啟動MySQL實例即可,如:
        shell$  mysqld --defaults-file=/home/cbell/backup.cnf

    innobackup腳本:是一個perl腳本,可以自動執行ibbackup的許多操作
        a) 執行備份
            perl innobackup  /etc/mysql/my.cnf  /home/cbell/backup
            perl innobackup --apply-log  /etc/mysql/my.cnf  /home/cbell/backup

        b) 恢復數據
            perl innobackup --apply-log /etc/mysql/my.cnf /home/cbell/backup
            mysqladmin -uroot shutdown
            perl innobackup --copy-file /etc/mysql/my.cnf  /home/cbell/backup
            service mysqld start
        
        c) 支持PITR(及時恢復)(http://www.innodb.com/doc/hot_backup/manual.html)

2、物理文件的復制    
    需要停止服務器,常見方法使用 tar 命令創建歸檔,然后將歸檔復制到另一個系統上并恢復數據目錄。
    或者在備份的過程中保證沒有數據更新的情況下就不需要關閉服務器,如鎖定所有表并執行 flush tables 命令,然后在復制文件之前將服務器離線。
    mysqlhotcopy.sh 位于安裝文件目錄的 ./scripts文件夾下,允許對數據庫進行熱備份,但只能用來備份MyISAM或文檔引擎。(unix上使用)

3、mysqldump工具
    優缺點:使用靈活、方便;速度慢、更大的存儲空間
    mysqldump -uroot --all-databases
    mysqldump -uroot db1, db2
    mysqldump -uroot my_db t1
    可以非常方便轉儲數據庫模式,如使用--no-data選項

4、XtraBackup
    XtraDB的熱備份方案,可備份InnoDB、XtraDB、MyISAM表。
    http://www.percona.com/docs/wiki/percona-xtrabackup:xtrabackup_manual

5、邏輯卷管理器快照備份
    LVM快照
        lvm文件系統快照備份的前提是系統中有不小于當前數據庫文件所在卷的空閑磁盤空間。
    ZFS快照
        a) 創建可管理的ZFS文件系統
            zpool create -f mypool c0d0s5
            zfs create mypool/mydata
        b) 創建備份(執行新文件系統的快照)
            zfs snapshot mypool.mydata@backup_12_dec_2012
        c) 將文件系統恢復到某個指定的備份
            cd /mypool/mydata
            zfs rollback mypool/mydata@backup_12_dec_2012
 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!