MariaDB數據庫介紹之一、備份(mysqldump、lvm2快照、xtrabackup)

 一、MariaDB簡介及新特性

         MariaDB數據庫管理系統是MySQL的一個分支,主要由開源社區在維護,採用GPL授權許可 MariaDB的目的是完全兼容MySQL,包括API和命令行,使之能輕鬆成爲MySQL的代替品。在存儲引擎方面,使用XtraDB來代替MySQL的InnoDB。MariaDB基於事務的Maria存儲引擎,替換了MySQL的MyISAM存儲引擎。

        MariaDB的一個獨特特性是它的連接到Cassandra後端的引擎。引擎本身只是一個加入到Cassandra服務器中單獨運行中介(Cassandra是一個NoSQL類型的鍵-值存儲,由Facebook創建後來成爲了Apache的項目;它可用於集羣且沒有單點故障,它同樣不是完全ACID的)。


二、MariaDB日誌介紹

查詢日誌

query log

記錄查詢操作 ;默認不開啓

慢查詢日誌

slow_query_log 

查詢語句查詢時間超出指定執行時間 

 指定時長--long_query_time;

錯誤日誌

log_error

mysqld啓動或關閉過程中輸出的事件信息 ;運行中產生的錯誤信息;時間調度器產生的日誌信息;主從複製架構從服務器啓動線程時產生的信息

二進制日誌

log_bin 

是mariadb數據庫最重要的日誌,用於時間點還原一定要開啓;

記錄導致數據改變或潛在導致數據改變的SQL語句

事務日誌

 transaction log

redo log:記錄事務修改後的數據,提交的(commit),需要同步至數據文件中 

undo log:記錄事務前的原始數據,回滾的(role back)

中繼日誌

relay_log 

複製架構中,從服務器用於保存從主服務器的二進制日誌中讀取到的事件


三、MariaDB備份類型、備份工具及相關的備份策略介紹

① 備份的類型
根據數據集劃分

完全備份:整個數據集

部分備份:只備份數據子集

根據時間軸變化情況劃分

完全備份、增量備份、差異備份  

增量備份:僅備份最近一次完全備份或增量備份(如果存在增量)以來變化的數據

 差異備份:僅備份最近一次完全備份以來的變化的數據

根據備份服務是否在線劃分

熱備份、溫備份、冷備份

 熱備:讀寫操作均可執行

 溫備:讀操作可執行;但寫操作不成

 冷備:讀寫操作均不可執行


根據備份模式的角度劃分

物理備份:直接複製數據文件進行備份 ,需要結合複製工具(cp、tar、rsync)

邏輯備份:從數據庫中”導出“數據另存而進行的備份; 需專用的協議客戶端

   注:邏輯備份與存儲引擎無關


② 備份工具的選擇 +備份方案                                                                                                              

 1、 mysqldump + 複製binlog  

                mysqldump:安全備份;客戶端命令,通過mysql協議連接至mysqld服務器

                複製二進制日誌指定時間範圍內event;增量備份 

2、lvm2-snapshot + 複製binlog

              基於lvm2-snapshot:使用cp或tar等工具做物理備份,完全備份

               複製二進制日誌指定時間範圍內event;增量備份 

3、xtrabackup

Xtrabackup是由percona提供的mysql數據庫備份工具;xtrabackup僅對innodb存儲引擎的數據庫熱備;MyISAM不支持熱備和增量備份



四、上述複製方案的實現過程:

①mysqldump + 複製binlog 

<1> mysqldump是mysql數據庫自帶的一種邏輯備份工具,適用於所有存儲引擎,支持溫備;完全備份,部分備份;對innodb存儲引擎支持熱備

使用語法:  mysqldump [options] [db_name [tbl_name ...]]

常用選項:

        --databases : 備份指定的數據庫 

        --all-databases:備份所有的數據庫

        --lock-all-tables:鎖定 所有數據庫的所有表,在MyISAM,InnoDB引擎的數據溫備時使用

        --lock-tables:鎖定指定數據庫的指定表,在MyISAM,InnoDB引擎的數據溫備時使用

        --single-transaction:鎖定數據庫 ,在InnoDB引擎的數據熱備時使用

        --flush-logs:滾動日誌

        --master-data=[0|1|2] : 是否記錄二進制日誌事件的位置 

            0:不記錄

             1 :記錄爲CHANGE MASTER TO 語句,此語句不被註釋

            2:記錄爲註釋的CHANGE MASTER TO 語句

其它選項:  

              -E, --events : 備份指定數據庫相關的所有事件調度器

              -R,--routines:備份指定數據庫相關的所有存儲過程和存儲函數

              --triggers : 備份表相關的觸發器 


<2> 備份策略; 完全備份+增量備份+定時計劃任務

    增量備份每週一~週六凌晨的2點執行 ;記錄備份日誌中

    完全備份每週日凌晨的2點執行,並刪除本週的增量備份(?);記錄備份日誌中

完全備份腳本

~~~~DBfullbak.sh
#!/bin/bash
# use mysqldump to full backup mysql data on sunday!
# 2015-11-6 

BakDir=/mariadb_bak
Logfile=$BakDir/DBbak.log
Date=`date +%F`
Begin_time=`date +"%F %T"`
#備份開始的時間
DumpFile=$Date.sql
mysqldump=`which mysqldump`
mkdir -pv $BakDir
cd $BakDir
$mysqldump -uroot --all-databases --single-transaction --master-data=2 > $DumpFile
#完全備份所有數據庫,innodb引擎數據熱備,註釋 CHANGE MASTER TO(二進制日誌的位置信息)
Last_time=`date +"%F %T"`
echo "Start_time:$Begin_time  End_time:$Last_time  | $DumpFile succ" >> $Logfile 
#記錄完全備份完成時間至備份日誌文件中
cd $BakDir/increment 
rm -rf *
#刪除一週內的增量備份的二進制日誌(這個需要考慮)

增量備份腳本

~~~~DBincrementbak.sh 

#!/bin/bash
# use copy binlog to increment backup mysql data on monday-Saturday!
# 2015-11-6 

BakDir=/mariadb_bak/increment
BinDir=/var/lib/mysql
LogFile=$BakDir/DBbak.log
BinFile=$BinDir/mysql-bin.index
mysqladmin=`which mysqladmin`
mkdir -pv $BakDir
$mysqladmin -uroot flush-logs
  #執行日誌滾動操作
Counter=`wc -l $BinFile |awk '{print $1}'`
NextNum=0
#這個for循環用於比對$Counter,$NextNum這兩個值來確定文件是不是存在或最新的。
for file in `cat $BinFile`; do
     base=`basename $file`
     #basename用於截取mysql-bin.00000*文件名,如去掉./mysql-bin.000004前面的./
     let NextNum++
     if [ $NextNum -eq $Counter ]; then
         echo $base skip!  >> $LogFile
        #新滾動的二進制日誌跳過不復制
     else
         dest=$BakDir/$base
         if (test -e $dest); then
            echo  $base exist! >> $LogFile
		#存在的二進制日誌不復制
         else
            cp $BinDir/$base $BakDir
            echo $base copying >> $LogFile
	          #複製不存在的二進制日誌,並記錄日誌
         fi
     fi
done
echo "`date +"%F %T"` Copy $(($NextNum-1))個mysql-bin  succ" >> $LogFile
#記錄日誌:從週一至週六一共複製了幾個二進制日誌

計劃任務

# crontab -l
0 2 * * 1-6 /root/DBincrementbak.sh &> /dev/null
0 2 * * 7 /root/DBfullbak.sh &> /dev/null


②lvm2-snapshot + 複製binlog

實現步驟:

    (1)請求鎖定所有表 

           mysql -e 'flush tables with read lock;'

     ( 2 ) 記錄二進制日誌及事件位置 

           mysql -e ‘flush logs;show master status; ' 

     ( 3 ) 創建快照卷

           lvcreate -L # -p r -s -n snapshot_name /dev/vg_name/lv_name

    (4)釋放鎖

           mysql -e 'unlock tables;'

    ( 5 ) 掛載快照卷,執行數據備份 ;

          mount -r /dev/vg_name/snapshot_name /mnt  

      cp -a  = 數據文件的屬主屬組都是mysql

   (6)備份完成後,刪除快照卷 

          umount /mnt && lvremove -f /dev/vg_name/snapshot_name 

   (7)制定好策略,通過原卷備份二進制日誌 

         複製二進制日誌的事件做增量備份

<1> lvm創建過程,並讓mysql數據庫的datadir使用邏輯分區!

[root@node1 ~]# pvcreate /dev/sda5 
[root@node1 ~]# vgcreate myvg /dev/sda5  
[root@node1 ~]# lvcreate -L +5G -n mydata myvg                                           [root@node1 ~]# lvs
  LV     VG     Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
 mydata myvg   -wi-a-----  5.00g                                                    
[root@node1 ~]# mke2fs -t ext4 /dev/myvg/mydata 
[root@node1 ~]# mount /dev/myvg/mydata /data/
[root@node1 ~]# mkdir /data/mysql
[root@node1 ~]# chown -R mysql.mysql /data/mysql/
[mysqld]
datadir=/data/mysql
log_bin=mysql-bin
innodb_file_per_table=1
skip_name_resolve=1
[root@node1 ~]# systemctl start mariadb
[root@node1 ~]# ss -tanl
State      Recv-Q Send-Q         Local Address:Port            Peer Address:Port 
LISTEN     0      50                  *:3306                           *:*

<2> 完全備份腳本;增量備份腳本使用上面的即可,同樣可以結合計劃任務來完成相關的備份策略;還原的時候要使用lvm2-snapshot中的完全備份及mysqlbinlog工具讀取二進制日誌相關位置的事件做時間點還原~

#!/bin/bash
# use lvm2-snapshot to full backup mysql data on sunday!
# 2015-11-7

BakDir=/mariadb_bak              //備份目錄
Full_BakDir=$BakDir/full         //完全備份目錄
Logfile=$BakDir/DBbak.log        //備份產生的日誌
Date=`date +"%F-%T"`              
mkdir -p $BakDir                  
mkdir -p $Full_BakDir 
Begin_time=`date +"%F %T"`     //備份開始的時間

  //使用lvm2-snapshot完全備份的過程 
mysql -e 'flush tables with read lock;'        //給所有表施加讀鎖
mysql -e 'flush logs;show master status;' > $BakDir/pos.$Date  //滾動二進制日誌並記錄位置
lvcreate -L 1G -p r -s -n mysql_sp /dev/myvg/mydata &> /dev/null//對mysql數據目錄創建快照
mysql -e 'unlock tables;'                  //釋放鎖
mount -r /dev/myvg/mysql_sp /mnt            //掛載快照
//複製數據到完全備份目錄
mkdir $Full_BakDir/$Date && cd $Full_BakDir/$Date && cp -a /mnt/* ./  
umount /mnt && lvremove -f /dev/myvg/mysql_sp &> /dev/null   //卸載快照並刪除即可 

Last_time=`date +"%F %T"`
echo "Start_time : $Begin_time  End_time : $Last_time  backup succ" >> $Logfile


xtrabackup

  <1>    Xtrabackup是由percona提供的mysql數據庫備份工具,支持在線熱備份;Xtrabackup有兩個主要的工具:xtrabackup、innobackupex 。
  註解:
  (1).xtrabackup只能備份InnoDB和XtraDB 兩種數據表
  (2).innobackupex則封裝了xtrabackup,同時可以備份MyISAM數據表
  Innobackupex完整備份後生成了幾個重要的文件:
    xtrabackup_binlog_info:記錄當前最新的二進制日誌Position
    xtrabackup_checkpoints: 備份的類型,LSN(日誌序列號)範圍信息


<2> xtrabackup特點
  (1)備份過程快速、可靠
  (2)備份過程不會打斷正在執行的事務
  (3)能夠基於壓縮等功能節約磁盤空間和流量
  (4)自動實現備份檢驗
  (5)還原速度快


<3> xtrabackup安裝  

[root@node1 ~]# yum install -y percona-xtrabackup-2.3.2-1.el7.x86_64.rpm 
=========================================================================================
 Package     Arch    Version        Repository             Size
=========================================================================================
Installing:
percona-xtrabackup x86_64  2.3.2-1.el7 /percona-xtrabackup-2.3.2-1.el7.x86_64 21 M
Installing for dependencies:
 libev        x86_64     4.15-3.el7      epel        43 k
 rsync       x86_64     3.0.9-15.el7      centos7      359 k

Transaction Summary      //依賴包 libev


<4>xtrabackup常用選項(參考)

 --apply-log:同xtrabackup的--prepare參數,一般情況下,在備份完成後,數據尚且不能用於恢復操作,因爲備份的數據中可能會包含尚未提交的事務或已經提交但尚未同步至數據文件中的事務。因此,此時數據 文件仍處理不一致狀態。--apply-log的作用是通過回滾未提交的事務及同步已經提交的事務至數據文件使數據文件處於一致性狀態。
 --copy-back:做數據恢復時將備份數據文件拷貝到MySQL服務器的datadir 

--stream=[tar]:備份文件輸出格式, 該文件可在XtarBackup binary文件中獲得. 在使用參數

stream=tar備份的時候,你的xtrabackup_logfile可能會臨時放在/tmp目錄下,如果你備份的時候併發寫入較大的話,xtrabackup_logfile可能會很大,很可能會撐滿你的/tmp目錄,可以通過參數--tmpdir指定目錄來解決這個問題.

--tmpdir=DIRECTORY:當有指定--remote-host or --stream時, 事務日誌臨時存儲的目錄, 默認採用MySQL配置文件中所指定的臨時目錄tmpdir 
--remote-host=HOSTNAME: 通過ssh將備份數據存儲到遠程服務器上
--redo-only --apply-log:強制備份日誌時只redo,跳過rollback,這在做增量備份時非常必要
--use-memory=#:該參數在prepare的時候使用,控制prepare時innodb實例使用的內存
 --databases=LIST:列出需要備份的databases,如果沒有指定該參數,所有包含MyISAM和InnoDB表的database都會被備份 
--socket=SOCKET:指定mysql.sock所在位置,以便備份進程登錄mysql.


<5> 使用innobackupex實現數據庫備份

1、完全備份及恢復

#備份某一指定數據庫

[root@node1 ~]# mysql -e 'show databases;'
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| test               |
+--------------------+
[root@node1 ~]# mkdir /backup   //創建備份目錄
[root@node1 ~]# innobackupex --databases=test /backup/ &> /backup/$(date +"%F-%T").log
[root@node1 ~]# ll /backup/
total 12
drwx------ 3 root root 4096 Nov  8 18:15 2015-11-08_18-15-54
-rw-r--r-- 1 root root 7824 Nov  8 18:15 2015-11-08-18:15:54.log  //備份過程日誌
[root@node1 ~]# ll /backup/2015-11-08_18-15-54/          //可以看到只有1個test數據庫
total 18456
-rw-r----- 1 root root      385 Nov  8 18:15 backup-my.cnf
-rw-r----- 1 root root 18874368 Nov  8 18:15 ibdata1
drwx------ 2 root root     4096 Nov  8 18:15 test
-rw-r----- 1 root root       21 Nov  8 18:15 xtrabackup_binlog_info
-rw-r----- 1 root root      113 Nov  8 18:15 xtrabackup_checkpoints
-rw-r----- 1 root root      462 Nov  8 18:15 xtrabackup_info
-rw-r----- 1 root root     2560 Nov  8 18:15 xtrabackup_logfile

#備份所有數據庫

[root@node1 ~]# innobackupex /backup/ &> /backup/$(date +"%F-%T").log
[root@node1 ~]# ll /backup/
total 32
drwx------ 3 root root  4096 Nov  8 18:15 2015-11-08_18-15-54
-rw-r--r-- 1 root root  7824 Nov  8 18:15 2015-11-08-18:15:54.log
drwx------ 5 root root  4096 Nov  8 18:17 2015-11-08_18-17-46
-rw-r--r-- 1 root root 16156 Nov  8 18:17 2015-11-08-18:17:46.log
[root@node1 ~]# ll /backup/2015-11-08_18-17-46/         //可以看到是所有的數據庫
total 18464
-rw-r----- 1 root root      385 Nov  8 18:17 backup-my.cnf
-rw-r----- 1 root root 18874368 Nov  8 18:17 ibdata1
drwx------ 2 root root     4096 Nov  8 18:17 mysql 
drwx------ 2 root root     4096 Nov  8 18:17 performance_schema
drwx------ 2 root root     4096 Nov  8 18:17 test
-rw-r----- 1 root root       21 Nov  8 18:17 xtrabackup_binlog_info
-rw-r----- 1 root root      113 Nov  8 18:17 xtrabackup_checkpoints
-rw-r----- 1 root root      445 Nov  8 18:17 xtrabackup_info
-rw-r----- 1 root root     2560 Nov  8 18:17 xtrabackup_logfile

# 注:還原時,需要清空數據目錄,所以建議備份的話,執行全庫備份 

# 備份完成後,應用日誌,是備份的數據保持一致[/backup/2015-11-08_18-17-46];注:確保沒有做任何的數據庫操作;否則還要讀取二進制日誌的相關事件來做時間點還原

# 直接在一臺MySQL服務器上操作了,實際環境不要這樣進行~~停止服務;刪除mysql的數據目錄

[root@node1 ~]# innobackupex --apply-log /backup/2015-11-08_18-17-46/
[root@node1 ~]# innobackupex --copy-back /backup/2015-11-08_18-17-46/
[root@node1 ~]# chown -R mysql.mysql /var/lib/mysql/*

//出現問題,mariadb服務啓動不了,查看mariadb日誌,顯示事務日誌的大小爲48M;
[root@node1 ~]# systemctl start mariadb
Job for mariadb.service failed. See 'systemctl status mariadb.service' and 'journalctl -xn' for details.
[root@node1 ~]# tail /var/log/mariadb/mariadb.log 
 In case (b) you need to set innodb_log_file_size = 48M
151108 18:31:25 [ERROR] Plugin 'InnoDB' init function returned error.
151108 18:31:25 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
151108 18:31:25 [Note] Plugin 'FEEDBACK' is disabled.
151108 18:31:25 [ERROR] Unknown/unsupported storage engine: InnoDB
151108 18:31:25 [ERROR] Aborting
151108 18:31:25 [Note] /usr/libexec/mysqld: Shutdown complete
151108 18:31:25 mysqld_safe mysqld from pid file /var/run/mariadb/mariadb.pid ended

[root@node1 ~]# ll /var/lib/mysql/
total 116772
-rw-rw---- 1 mysql mysql    16384 Nov  8 18:31 aria_log.00000001
-rw-rw---- 1 mysql mysql       52 Nov  8 18:31 aria_log_control
-rw-r----- 1 mysql mysql 18874368 Nov  8 18:28 ibdata1
-rw-r----- 1 mysql mysql 50331648 Nov  8 18:28 ib_logfile0      //這裏
-rw-r----- 1 mysql mysql 50331648 Nov  8 18:28 ib_logfile1      //這裏 
drwx------ 2 mysql mysql     4096 Nov  8 18:28 mysql
-rw-rw---- 1 mysql mysql        0 Nov  8 18:28 mysql-bin.index
drwx------ 2 mysql mysql     4096 Nov  8 18:28 performance_schema
drwx------ 2 mysql mysql     4096 Nov  8 18:28 test
-rw-r----- 1 mysql mysql      445 Nov  8 18:28 xtrabackup_info

# 臨時解決方法,刪除事務日誌ib_logfile0 和ib_logfile1
[root@node1 ~]# rm -rf /var/lib/mysql/ib_logfile*
[root@node1 ~]# systemctl start mariadb
[root@node1 ~]# ss -tanl
State      Recv-Q Send-Q           Local Address:Port                 Peer Address:Port 
LISTEN     0      50                 *:3306                                   *:*


2、示例 === 2次增量備份+二進制日誌事件複製(時間點)及恢復過程

#完全備份

[root@node1 ~]# mkdir /backup/full
[root@node1 ~]# innobackupex /backup/full/ 
[root@node1 ~]# ll /backup/full/2015-11-08_19-49-42/
total 18464
-rw-r----- 1 root root      385 Nov  8 19:49 backup-my.cnf
-rw-r----- 1 root root 18874368 Nov  8 19:49 ibdata1
drwx------ 2 root root     4096 Nov  8 19:49 mysql
drwx------ 2 root root     4096 Nov  8 19:49 performance_schema
drwx------ 2 root root     4096 Nov  8 19:49 test
-rw-r----- 1 root root       21 Nov  8 19:49 xtrabackup_binlog_info
-rw-r----- 1 root root      113 Nov  8 19:49 xtrabackup_checkpoints
-rw-r----- 1 root root      450 Nov  8 19:49 xtrabackup_info
-rw-r----- 1 root root     2560 Nov  8 19:49 xtrabackup_logfile
[root@node1 ~]# cat /backup/full/2015-11-08_18-52-33/xtrabackup_checkpoints 
backup_type = full-backuped
from_lsn = 0
to_lsn = 1598988
last_lsn = 1598988
compact = 0
recover_binlog_info = 0


#增量備份;要使用--incremental-basedir=完全備份目錄,即基於上一次完全備份的增量備份

MariaDB [(none)]> create database test1;
Query OK, 1 row affected (0.00 sec)

MariaDB [(none)]> show master status;
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000003 |      330 |              |                  |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)

[root@node1 ~]# innobackupex --incremental --incremental-basedir=/backup/full/2015-11-08_19-49-42/ /backup/incr/        //基於完全備份的增量備份

[root@node1 ~]# cat /backup/incr/2015-11-08_19-52-19/xtrabackup_checkpoints 
backup_type = incremental      //只新建了1個數據庫好像看不出效果?O(∩_∩)O
from_lsn = 1597945
to_lsn = 1597945
last_lsn = 1597945
compact = 0
recover_binlog_info = 0

[root@node1 2015-11-08_19-52-19]# cat xtrabackup_binlog_info  //可以看出二進制日誌的位置
mysql-bin.000003	330


#增量備份的增量備份

MariaDB [(none)]> create database test2;   //新建數據庫test2
Query OK, 1 row affected (0.01 sec)

MariaDB [(none)]> use test2;
Database changed

MariaDB [test2]> create table num(id int);   //新建表num
Query OK, 0 rows affected (0.38 sec)

MariaDB [test2]> insert into num value (1),(2),(3),(4),(5);  //出入5條信息
Query OK, 5 rows affected (0.02 sec)
Records: 5  Duplicates: 0  Warnings: 0


MariaDB [test2]> select * from num;
+------+
| id   |
+------+
|    1 |
|    2 |
|    3 |
|    4 |
|    5 |
+------+
5 rows in set (0.00 sec)


[root@node1 ~]# innobackupex --incremental --incremental-basedir=/backup/incr/2015-11-08_19-52-19/ /backup/incr/    //基於增量備份的增量備份

[root@node1 ~]# cat /backup/incr/2015-11-08_20-00-57/xtrabackup_checkpoints 
backup_type = incremental
from_lsn = 1597945            //這次可以看出來效果了 !!
to_lsn = 1602908
last_lsn = 1602908
compact = 0
recover_binlog_info = 0


#使用mysqlbinlog工具導出二進制日誌事件----數據庫新做的修改

MariaDB [(none)]> create database test3;    //新添加2個數據庫test3,test4
Query OK, 1 row affected (0.00 sec)

MariaDB [(none)]> create database test4;
Query OK, 1 row affected (0.00 sec)


//查看上一次增量備份二進制日誌事件位置
[root@node1 2015-11-08_20-00-57]# cat xtrabackup_binlog_info   
mysql-bin.000003	704

[root@node1 ~]# mysqlbinlog --start-position=704 /var/lib/mysql/mysql-bin.000003 > /backup/increment.sql


#應用日誌恢復;順序:①先恢復完全備份-->②第一次增量備份-->③第二次增量備份;

[root@node1 ~]# innobackupex --apply-log --redo-only /backup/full/2015-11-08_19-49-42/
[root@node1 ~]# innobackupex --apply-log --redo-only /backup/full/2015-11-08_19-49-42/ --incremental-dir=/backup/incr/2015-11-08_19-52-19/
[root@node1 ~]# innobackupex --apply-log --redo-only /backup/full/2015-11-08_19-49-42/ --incremental-dir=/backup/incr/2015-11-08_20-00-57/


#MySQL數據庫恢復過程;

①停止服務,刪除數據目錄---> ②先恢復準備好的完整備份 -->③恢復二進制日誌事件

[root@node1 ~]# systemctl stop mariadb
[root@node1 ~]# rm -rf /var/lib/mysql/*
[root@node1 ~]# innobackupex --copy-back /backup/full/2015-11-08_19-49-42/
[root@node1 ~]# rm -rf /var/lib/mysql/ib_logfile*
[root@node1 ~]# chown -R mysql.mysql /var/lib/mysql/*
[root@node1 ~]# systemctl start mariadb
[root@node1 ~]# ss -tanl
State       Recv-Q Send-Q           Local Address:Port                Peer Address:Port 
LISTEN      0      50                *:3306                                   *:*  

 //檢查是否還原;發現沒有test3和test4數據庫;需要利用二進制日誌做時間點還原纔可以
MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| test               |
| test1              |
| test2              |
+--------------------+
6 rows in set (0.07 sec)

MariaDB [(none)]> select * from test2.num;
+------+
| id   |
+------+
|    1 |
|    2 |
|    3 |
|    4 |
|    5 |
+------+
5 rows in set (0.00 sec)


[root@node1 ~]# mysql < /backup/increment.sql 
[root@node1 ~]# mysql
MariaDB [(none)]> show databases;    //可以看到已經出現test3和test4數據庫
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| test               |
| test1              |
| test2              |
| test3              |
| test4              |
+--------------------+
8 rows in set (0.01 sec)

至此~~MariaDB數據庫的備份介紹完畢!O(∩_∩)O謝謝~~~



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章