使用xtrabackup備份數據庫

使用xtrabackup備份數據庫mysql

提供一個參考文檔:http://xtra.aminglinux.comlinux

mysqldump對於導出幾個G的數據庫或幾個表,仍是不錯的,速度並不慢。一旦數據量達到幾十上百G,
不管是對原庫的壓力仍是導出的性能,mysqldump就力不從心了。Percona-Xtrabackup備份工具,
是實現MySQL在線熱備工做的不二選擇,可進行全量、增量、單表備份和還原。

xtrabackup命令只支持InnoDB和XtraDB存儲引擎的數據庫非阻塞地備份,
而innobackupex經過perl封裝了一層xtrabackup,對MyISAM的備份經過加表讀鎖的方式實現。

在CentOS7上這樣安裝percona-xtrabackupsql

安裝yum源
rpm -ivh http://www.percona.com/downloads/percona-release/redhat/0.1-3/percona-release-0.1-3.noarch.rpm  
yum install -y percona-xtrabackup-24 //yum安裝2.4版本

用xtrabackup作全量備份的命令是:數據庫

innobackupex --defaults-file=/etc/my.cnf  --host=10.100.100.100  --port=3333 \
--user=bakuser --password=your_pass  /data/backup/mysql
--socket=/var/lib/mysql/mysql.sock

說明:bash

在執行該備份操做以前,須要先建立一個用戶bakuser(用戶名自定義),
並授予reload, lock tables, replication client, process, super等權限。
備份數據將會放到/data/backup/mysql目錄裏面,自動生成一個以當前日期、時間爲名字的目錄,例如2018-10-15_03_00_01。

增量備份:app

innobackupex --host=10.100.100.100  --port=3333 --user=bakuser --password=your_pass \
 --incremental /data/backup/mysql --incremental-basedir=/data/backup/mysql/last-backup-file

說明:socket

--incremental :表示本次備份是一個增量備份(若針對的上次備份爲一個全量備份,這裏也能夠認爲是個差量備份)
--incremental-basedir:指定本次增量備份針對的哪個備份(能夠是上個增量,也能夠是上個全量)
增量備份能夠一環扣一環,好比能夠週一作一個全量備份,而後週二作週一的增量,週三作週二的增量。。。

恢復:工具

1)全量備份的恢復性能

預備恢復:innobackupex --apply-log /PATH/TO/BACKUP/dir-quan --user-memroy=2G
中止MySQL/MariaDB,將datadir目錄裏面的數據清空(或者挪走)
恢復:innobackupex --defaults-file=/etc/my.cnf  --copy-back  /PATH/TO/BACKUP/dir-quan
改權限:chown -R mysql:mysql /PATH/TO/datadir
啓動MySQL/MariaDB

說明:測試

--apply-log:指定全備文件路徑
--use-memory=N:指定恢復數據時,使用內存大小,默認爲100M,若備份數據量大且有足夠的空閒內存時,
    能夠用來指定大小的內存來工做,單位可使用G,M....。
--defaults-file: 指定配置文件路徑,經過配置文件它會找到datadir在哪裏

2)增量備份的恢復

中止服務
刪除dataidir裏面的數據
準備全量:
innobackupex --apply-log --redo-only  /PATH/TO/全量備份目錄
準備增量1:
innobackupex --apply-log --redo-only  /PATH/TO/全量備份目錄 --incremental-dir=/PATH/TO/第一次增量備份目錄
準備增量2:
innobackupex --apply-log --redo-only /PATH/TO/全量備份目錄  --incremental-dir=/PATH/TO/第二次增量備份目錄
......
準備最後一個增量:
innobackupex --apply-log /PATH/TO/全量備份目錄  --incremental-dir=/PATH/TO/最後一次增量備份目錄
再次準備全量:
innobackupex --apply-log   /PATH/TO/全量備份目錄   #(此次不用加--redo-only了)

恢復:

innobackupex --copy-back /PATH/TO/全量備份目錄
改權限:chown -R mysql:mysql /PATH/TO/datadir
啓動MySQL/MariaDB

說明:

--redo-only:表示進行準備(應用日誌)工做時,只進行redo操做,只會重作已提交但未應用的事務,
不會回滾未提交的事務。緣由是後面還有個增量備份,未提交的可能在後面增量備份時進行提交。
須要注意的是,最後一個增量備份不須要加這個選型。

MariaDB新版本(10.3.x+)的備份和恢復

MariaDB10.3.x及以上的版本用Percona XtraBackup工具會有問題。
緣由多是MariaDB10.3以上版本的redo日誌格式和以前不一樣了。
解決方案是,使用mariabackup,它是MariaDB提供的一個開源工具,用於對InnoDB,Aria和MyISAM表進行物理在線備份。
這個工具是基於Percona的XtraBackup(版本2.3.8)的解決方案:

全量備份:

mariabackup --defaults-file=/etc/my.cnf --backup --user=xxx --password=xxx --target-dir /data/backup/2019-02-21

測試:

[root@wangzb01 ~]# mkdir /data/backup
[root@wangzb01 ~]# mariabackup --backup --user=root --password=mysql --target-dir /data/backup/2019-03-19
[root@wangzb01 ~]# cd /data/backup/
[root@wangzb01 backup]# ls 2019-03-19/
aria_log.00000001  bbs             ibdata1      performance_schema      xtrabackup_info
aria_log_control   blog            ib_logfile0  test                    zabbix
backup-my.cnf      ib_buffer_pool  mysql        xtrabackup_checkpoints  zrlog

全量恢復:

中止數據庫
清空datadir
mariabackup --prepare --target-dir /data/backup/2019-02-21/ 
mariabackup --copy-back --target-dir /data/backup/2019-02-21/
改屬主、屬組
啓動

測試:

[root@wangzb01 ~]# /etc/init.d/mysqld stop    //恢復以前先中止服務
[root@wangzb01 ~]# mv /data/mysql /data/mysql_bak   //更名
[root@wangzb01 ~]# du -sh /data/mysql/
255M	/data/mysql/
[root@wangzb01 ~]# mariabackup --prepare --target-dir /data/backup/2019-03-19/
[root@wangzb01 ~]# echo $?   //查看命令是否執行成功
[root@wangzb01 ~]# mariabackup --copy-back --target-dir /data/backup/2019-03-19/        //會在/data/下自動建立mysql目錄
[root@wangzb01 ~]# echo $?
[root@wangzb01 ~]# du -sh /data/mysql
147M	/data/mysql
[root@wangzb01 mysql]# chown -R mysql:mysql /data/mysql
[root@wangzb01 mysql]# /etc/init.d/mysqld start
[root@wangzb01 ~]# du -sh /data/mysql/
255M	/data/mysql/

增量備份:

mariabackup --defaults-file=/etc/my.cnf --backup --user=xxx --password=xxx --target-dir /data/backup/2019-02-21
第一個增量:mariabackup --backup --user=xxx --password=xxx  --target-dir /data/backup/2019-02-21_inc1 --incremental-basedir /data/backup/2019-02-21
第二個增量:mariabackup --backup --user=xxx --password=xxx  --target-dir /data/backup/2019-02-21_inc2 --incremental-basedir /data/backup/2019-02-21_inc1

增量恢復:

先準備全備
mariabackup --prepare --target-dir /data/backup/2019-02-21 --apply-log-only
準備第一個增量:
cd /data/backup
mariabackup --prepare --target-dir ./2019-02-21 --incremental-dir ./2019-02-21_inc1 --apply-log-only
準備第二個增量:
mariabackup --prepare --target-dir ./2019-02-21 --incremental-dir ./2019-02-21_inc2 --apply-log-only
恢復:
mariabackup --copy-back  --target-dir ./2019-02-21

備份腳本

#!/bin/bash 
bakdir=/data/backup
d=`date +%F`

for db in bbs blog db2
do
    mysqldump -uroot -paminglinux $db > $bakdir/$db\_$d.sql
done

cd $bakdir
gzip *_$d.sql
find ./ -name "*.gz" -mtime +30 |xargs rm
相關文章
相關標籤/搜索