MySQL的備份與恢復

 

MySQL的備份包括邏輯備份和物理備份
邏輯備份是指備份產生數據的語句,如CREATE DATABASE,CREATE TABLE和INSERT,把這些語句導出,然後存儲到一個腳本中。恢復時,把這個腳本導入到數據庫。有很強的兼容性,甚至可以跨平臺備份和恢復。
物理備份指把對應的數據庫文件拷貝到其他地方。可以跨平臺備份和恢復。
MySQL的備份也可以分爲完全備份,增量備份等
MySQL的備份分爲熱備份(Hot backup,支持讀和寫),溫備份(Warm backup,只支持讀),冷備份(Cold backup ,不支持讀和寫)
備份內容:二進制日誌(主要用於增量備份,或建立從服務器),InnoDB日誌文件(用於物理備份),MySQL的配置文件(如/etc/my.cnf),從服務器的上的slave position information 和relay logs ,及數據庫本身。
備份工具:mysqldump (邏輯備份工具),SELECT INTO OUTFILE(邏輯備份工具),mk-parallel-backup(可以實現並行備份,要求cpu是多核的,第三方工具),ibbackup(專用於INNODB),BACKUP(MySQL 6.0以上纔有此工具),Snapshot,mysqlhotcopy(MyISAM)
 mysqldump命令
       db_name[tb1][tb2] 指定數據庫中的表 
       --all-databases   備份所有數據庫
       --databases      指定數據庫
       --events         導出 CREATE EVENT語句
       --extended-insert 
       --flush-logs      用於日誌滾動
       --insert-ignore    用insert-ignore代替insert
       --lock-all-tables   鎖定所有表
       --lock-tables      鎖定某一表
       --master-data=n   導出二進制文件名稱和位置,n=1時,改變主服務器,n=2時,不再改變主服務器
       --no-data        不備份數據
--opt        等同於同時添加--add-drop-tables --add-locking --create-option --disable-keys --extended-insert --lock-tables --quick --set-charset 選項。本選項能讓 mysqldump 很快的導出數據,並且導出的數據能很快導回。該選項默認開啓,但可以用 --skip-opt 禁用
       --replace        用REPLACE代替INSERT,由插入語句改爲替換語句
       --routines       導出自定義函數和存儲過程
       --single-transaction 在導出數據之前提交一個 BEGIN SQL語句,BEGIN 不會阻塞任何應用程序且能保證導出時數據庫的一致性狀態。它只適用於事務表,例如 InnoDB 和 BD                                                
       --triggers           導出觸發器,該選項默認啓用,用 --ski禁用它p-triggers 
       --where         指定導出表中的哪些數據
如:mysqldump --databases mysql test > test.sql;
    mysqldump mysql --where=”name=’user’” >test.sql;
在很多情況下需要用到管理員賬號和密碼,如:
    mysqldump -uroot –p --all-databases > dump.sql;
    mysqldump -uroot -p mydb t1 > mydb.sql;
恢復和還原:
方式1>mysql -uroot –p db_name < db.name.sql
   方式2>SOURCE /tmp/db_name.sql;
SELECT INTO OUTFILE 命令:
   如:SELECT * INTO OUTFILE ‘/tmp/t1.txt’ FROM t1; 
     恢復: LOAD DATA INFILE  ‘/tmp/t1.txt’ INTO TABLE t1;
mk-parallel-dump 命令:(http://www.maatkit.org/)
 使用方式 mk-parallel-dump --basedir=/backups
      恢復 mk-parallel-restore /backups
文件系統快照(file system snapshot)
mysqlhotcopy 命令:
   --addtodest 把備份結果添加到某一目錄下
   --allowold   如果該目錄已存在,就把原目錄重命名,放到一旁
   --checkpoint=db_name.table_name  
  --dryrun     測試
   --flushlogs   日誌滾動
   --keepold    不刪除原有的備份文件
   --method    取值cp或scp,可以遠程備份
   --regexp     支持正則表達式選擇匹配的數據庫或表
   --resetmaster 表被鎖定後,運行 RESET MASTER命令,重新設置二進制日誌
   --resetsalve   表被鎖定後,運行 RESET SLAVE命令
如:   mysqlhotcopy     mydb     /backup
       mysqlhotcopy    --method=scp   mydb   [email protected]:/backup 備份到遠程主機
  
恢復與還原
mysqlhotcopy備份出來的是整個數據庫目錄,使用時可以直接拷貝到 mysqld 指定的 datadir (在這裏是 /usr/local/mysql/data/)目錄下即可,要注意權限的問題
cp  –rf  db_name /usr/local/mysql/data/
chown -R nobody:nobody /usr/local/mysql/data/ (將 db_name 目錄的屬主改成 mysqld 運行用戶)
 
 
 
MySQL的還原:
     mysqlbinlog
       --start-datetime=”date_time”
       --stop-datetime=”date_time”
       --start-position=start_log_position
       --stop-position=stop_log_position
1>時間點還原
 1)還原整個數據庫
 2)還原二進制日誌(以數字結尾),按順序還原
        mysqlbinlog mysql-bin.000003 > mysql-bin.000003.sql
        mysqlbinlog –stop-datetime=’2009-08-20 15:42:48’ mysql-bin.000002 > mysql-bin.000002.sql
 replication (複製)
MySQL支持兩種複製,基於語句複製(MySQL 3.23 後)和基於行的複製(MySQL 5.1後)
爲何使用複製
 1 數據的異地分佈 2本地服務器平衡 3 備份 4 高可用和故障轉移 5 測試升級
 replication 工作
1) 主服務器記錄數據到二進制日誌
2) 從服務器複製此二進制日誌到重置日誌(Relay log)
3) 從服務器把重置日誌寫入數據庫
 主服務器:
mysql> GRANT REPLICATION SLAVE,REPLICATION CLIENT ON *.* TO test@’192.168.0.%’ IDENTIFIED BY ‘password’;
       log_bin =mysql-bin
       server_id =10
重新啓動MySQL
mysql> SHOW MASTER STATUS;
   從服務器:
            log_bin =mysql-bin
        server_id =2
        relay_log =mysql-relay-bin
        log_slave_updates =1
        read_only =1
       mysql>CHANG MASTER TO MASTER_HOST=’server1’,
           ->MASTER_USER=’test’,
           ->MASTER_PASSWORD=’password’,
           ->MASTER_LOG_FILE=’mysql-bin.000001’,
           ->MASTER_LOG_POS=0;
        SHOW SLAVE STATUS\G
        start slave
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章