MariaDB——備份與恢復



備份和恢復

 為什么要備份?
    災難恢復:硬件故障、軟件故障、自然災害、黑客攻擊、誤操作
    測試
    要注意的點:
      備份需要多少時間
      能夠容忍多少的數據丟失
      恢復數據需要在多長時間完成
      需要恢復哪些數據
       1、做還原測試,用戶測試備份的可用性
       2、還原演練
     備份的時長很重要,備份是要消耗磁盤io的。
     還要做數據庫配置文件參數的備份。
 
 備份類型
    完全備份,部分備份
       完全備份:整個數據集
       部分備份:只備份數據子集
    完全備份、增量備份、差異備份
       增量備份:只備份最近一次完全備份或者增量備份以來的變化的數據。
       差異備份:僅備份最近一次完全備份以來的變化的數據。
    熱備、溫備、冷備
       熱備:讀寫操作均能執行
       溫備:讀操作可以,但是寫不行
       冷備:讀寫操作均不能執行
   
     Myisam:溫備、不能熱備;
     Innodb:熱備;
   
    物理備份、邏輯備份
       物理備份:直接復制數據文件進行備份,與存儲引擎無關。
       邏輯備份:從數據庫‘導出’數據另存進行備份。
  
       物理備份——直接拷貝,你要確保沒有數據寫入,所以物理備份最好使用溫備,先將表鎖住。
       邏輯備份——二進制日志
   
 備份時要考量的因素
      持續多久
      備份過程的時間長
      備份負載:如果負載較高,可能需要停掉。
      恢復時間長短
      備份的時候做好先后手,如果不行怎么辦?不行怎么退出?
 備份什么
      數據
      二進制日志,innodb的事務日志
      代碼(存儲過程、存儲函數、觸發器、時間調度器)
      服務器的配置文件,各個參數設置
 設計備份方案
      數據集:完全備份+增量備份+二進制日志 | 完全備份+差異備份+二進制日志
      備份手段:物理備份、邏輯備份
      對於較大體量的數據建議使用物理備份,對於較小的數據建議使用邏輯備份。
      物理備份和邏輯備份,兩種備份方式的恢復時間有差異。
 備份工具的選擇
    mysqldump+復制binlog:
       mysqldump:完全備份
       復制binlog中指定時間范圍的event:增量備份
    lvm2快照+復制binlog
       lvm2快照:適用cp或者tar等做物理備份:完全備份
       復制binlog中指定時間范圍的event:增量備份
    xtrabackup|mariabackup
       由percona提供的支持對Innodb做熱備的工具:物理備份
       既可以做全量也可以做增量
  
    mysqldump——邏輯備份工具
    lvm2和xtrabackup|mariabackup——都是物理備份工具
  
    lvm2——確保數據庫沒有任何的數據寫入,也即要鎖表。
  
 備份、恢復方法
    基於二進制文件的恢復:
       方式一、
       算好要恢復的數據的時間段,將其中的binlog記錄的sql語句重定向輸出到bin.sql文件中
       mysqlbinlog  --start-datetime=“2019-06-08 22:55:13” --stop-datetime="2019-06-08 22:58:11" mysql-bin.000001 > bin.sql
       進入數據庫,source一下這個文件
       source bin.sql
       方式二、
       mysqlbinlog /var/lib/mysql/mysql-bin.000005 --stop-position=1389 | msyql -uroot -proot
       #沒有start就從頭開始,有start就依據start開始
   
    lvm2備份恢復:
       pvcreate /dev/sdb1
       vgcreate testvg /dev/sdb1
       lvcreate -L 1G -n testlv testvg
       mkfs -t ext4 /dev/testvg/testlv
       mount /dev/testvg/testlv /test   #寫入/etc/fstab 或者/etc/rc.local來讓它開機自動掛載
       #掛載使用,將/test設置為數據庫的數據存儲目錄,然后依照lvm2快照來對其中的數據進行快照備份。
   
       然后使用卷快照來備份數據
       1、lvm2是物理備份,先鎖表
        flush tables with read lock;
       2、快照
        lvcreate -L 1G -s -p rw -n snap_testlv /dev/testvg/testlv
         -L —— --size
         -s —— --snap
         -p —— --permission rw|r
         -n —— --name
         /dev/testvg/testlv : 參照復制的目錄
       3、unlock tables;
       #鎖表之后一定要記得解鎖
       4、mount /dev/testvg/snap_testlv /snap_test  #掛載使用,數據驗證
       #這里需要注意的是,xfs文件系統不支持卷快照
   
       #這個時候你就可以在/snap_test中cp其中的內容了。
       #note:還原的時候要確保的你的屬主和屬組都是mysql,如果是root那么數據庫會出問題。
   
    mariabackup:物理備份工具
       Xtrabackup——是mysql的備份工具,實際上也可以用於mariadb,但是僅限於10以前。
       10以后要用mariabackup
       Mariabackup:
       物理備份工具,可以實現在線備份。
       它是根據事務日志來備份的,在10.3.x及以上版本使用xtrabackup工具會有問題,原因可能是10.3版本的redo日志格式和以前不一樣了。
       #note:事務日志要刪除就成對成組刪除,刪除單個可能會讓數據失去一致性,數據庫會起不來。
       安裝:
       yum install MariaDB-backup  #前提是有MariaDB的源
       全備+恢復:
        1、全量備份
        mariabackup --backup --target-dir=/root/fullbackup --user=root --password=root
        2、准備全備數據
        mariabackup --prepare --target-dir=/root/fullbackup --user=root --password=root
        3、還原數據(確保數據目錄為空)
        mariabackup --copy-back --target-dir=/root/fullbackup --user=root --password=root
        4、修改屬組屬主
        chown -R mysql.mysql /var/lib/mysql
    
       全量+增量+恢復:
        1、全量備份
        mariabackup --backup --target-dir=/root/fullbackup --user=root --password=root
        2、增量備份
        mariabackup --backup --target-dir=/root/inc1 --incremental-basedir=/root/fullbackup --user=root --password=root
        3、准備全備數據
        mariabackup --prepare --target-dir=/root/fullbackup --user=root --password=root
        4、增量和全備的合並
        mariabackup --prepare --target-dir=/root/fullbackup --user=root --password=root --incremental-dir=/root/inc1/ --apply-log-only
         --apply-log-only:在准備增量備份時,必須跳過未提交事務的回滾,使用--apply-log-only選項防止回滾階段
        5、恢復數據(確保數據目錄下是空的)
        mariabackup --copy-back --target-dir=/root/fullbackup --user=root --password=root
        6、修改屬組屬主
        chown -R mysql.mysql /var/lib/mysql
        如果增量不止一個呢?怎么合並?   一直去合並就可以,做增量的時候一定要加上--apply-log-only。


    mysqldump邏輯備份工具:
       #備份testdb數據庫(-l表示備份單個數據庫的時候鎖定該庫的所有表,-x當對所有的數據庫備份時鎖定所有數據庫的所有表)
       mysqldump -uroot -proot -l --databases testdb > testdb.sql
       #備份所有數據庫
       mysqldump -uroot -proot -x --all-databases > all_databases.sql
       #備份testdb數據庫下的students表
       mysqldump -uroot -proot testdb students > students.sql
       #如果要備份多個表那么使用空格隔開即可。
       mysqldump -uroot -proot testdb students test_table > both.sql
       #還原數據(sql命令)
       source testdb.sql  #注意文件的路徑,在當前工作目錄之下。
       #涉及鎖表,溫備;Mysqldump不能實現增量備份。
   
    全備+增量+二進制——>恢復    #還要去篩選一下二進制文件的時間
    當數據上了一定的量級之后,使用mysqldump去備份只能是杯水車薪。
   
  數據庫更換目錄
     如果是由yum安裝的數據庫,默認數據目錄是在/var/lib/mysql,如果需要更改:
      vim /etc/my.cnf.d/server.cnf
      [mysqld]
      datadir=/test3/
      pid_file=/test3/localhost.pid
      socket=/test3/mysql.sock
      wsrep_data_home_dir=/test3/
      log-bin=mysql-bin
      [client]
      socket=/test3/mysql.sock
     chown -R mysql.mysql /test3
     #重啟數據庫:service mariadb restart
     然后進入數據庫查看dir:
     show variables like ’%datadir%‘;
     #實際上寫入配置文件的都是參數
 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM