1. 程式人生 > 其它 >mysql備份工具Xtrabackup(五)

mysql備份工具Xtrabackup(五)

mysql和mariadb 關係 自行百度吧 

mysql和mariadb 關係 自行百度吧 

mysql和mariadb 關係 自行百度吧 

Xtrabackup介紹

Xtrabackup是由percona開源的免費資料庫熱備份軟體,它能對InnoDB資料庫和XtraDB儲存引擎的資料庫非阻塞地備份(對於MyISAM的備份同樣需要加表鎖);mysqldump備份方式是採用的邏輯備份,其最大的缺陷是備份和恢復速度較慢,如果資料庫大於50G,mysqldump備份就不太適合。

Xtrabackup優點  

       1)備份速度快,物理備份可靠

  2)備份過程不會打斷正在執行的事務(無需鎖表)

  3)能夠基於壓縮等功能節約磁碟空間和流量

  4)自動備份校驗

  5)還原速度快

  6)可以流傳將備份傳輸到另外一臺機器上

  7)在不增加伺服器負載的情況備份資料

  8)物理備份工具,在同級資料量基礎上,都要比邏輯備份效能要好的多。幾十G到不超過TB級別的條件下。但在同資料量級別,物理備份恢復資料上有一定優勢。

安裝

下載
wget https://www.percona.com/downloads/XtraBackup/Percona-XtraBackup-2.4.9/binary/redhat/7/x86_64/percona-xtrabackup-24-2.4.9-1.el7.x86_64.rpm

安裝
rpm -ivh percona-xtrabackup-24-2.4.9-1.el7.x86_64.rpm

下載安裝的依賴
wget http://mirror.centos.org/centos/7/extras/x86_64/Packages/libev-4.15-7.el7.x86_64.rpm

rpm -ivh libev-4.15-7.el7.x86_64.rpm

yum install perl-DBI yum -y install perl perl-devel libaio libaio-devel perl-Time-HiRes perl-DBD-MySQL

yum -y install perl-Digest-MD5

rpm -ivh percona-xtrabackup-24-2.4.9-1.el7.x86_64.rpm

rpm -ql percona-xtrabackup-24

發現 /usr/bin/innobackupex  #xtrabackup 的軟連線

常用引數

1.命令格式  innobackupex <選項>


2.innobackupex命令
常用選項                     含義
--host                        主機名
--user                        使用者名稱
--port                        埠號
--password               密碼
--databases              資料庫名
--no-timestamp       不用日期命名備份檔案儲存的子目錄名

--databases=”庫名”           //1個庫


--databases=”庫1  庫2”  //多個庫
--databases=”庫1.表”     //1張表

常用選項                          含義
--redo-only                     日誌合併
--apply-log                     準備恢復資料
--copy-back                    拷貝資料
--incremental  目錄名      增量備份
--incremental-basedir=目錄名    增量備份時,指定上一次備份資料儲存的目錄名
--incremental-dir=目錄名            準備恢復資料時,指定增量備份資料儲存的目錄名

這裡別搞混淆了 要懂 不然後面就迷糊了
--export                          匯出表資訊
import                            匯入表空間

配置檔案

不一定適合你的mysql 畢竟我yum安裝的mariadb服務

不一定適合你的mysql 畢竟我yum安裝的mariadb服務

不一定適合你的mysql 畢竟我yum安裝的mariadb服務

相比二進位制日誌備份 這裡做了修改 不把二進位制放進data目錄 直接放在mysql安裝目錄得了

[mysqld]
basedir=/var/lib/mysql
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
symbolic-links=0
log_bin=/var/lib/mysql/mysql-bin
[mysqld_safe]
log-error=/var/log/mariadb/mariadb.log
pid-file=/var/run/mariadb/mariadb.pid

!includedir /etc/my.cnf.d

xtrabackup實踐操作

全量備份

1  全量備份(所有資料庫

innobackupex  --defauults-file=/etc/my.cnf --user=root --password=123456 --backup /backup/

[root@tff_128 backup]# 
[root@tff_128 backup]# 
[root@tff_128 backup]# 
[root@tff_128 backup]# pwd
/backup
[root@tff_128 backup]# ll
總用量 0
drwxr-x---. 6 root root 215 5月   9 20:28 2022-05-09_20-28-26
[root@tff_128 backup]#

2  刪除某個資料庫的表個別資料 

MariaDB [tff]> select * from bptest;            
+------+------+
| id   | name |
+------+------+
|    1 | d    |
|    2 | d    |
+------+------+
2 rows in set (0.00 sec)

MariaDB [tff]> delete from bptest where id =1;     
Query OK, 1 row affected (0.00 sec)

MariaDB [tff]> select * from bptest;          
+------+------+
| id   | name |
+------+------+
|    2 | d    |
+------+------+
1 row in set (0.00 sec)

MariaDB [tff]> 

3  執行回滾操作

innobackupex --apply-log /backup/2022-05-09_20-28-26/

4  停止服務

systemctl stop mariadb.service

5  移動資料

(保持資料庫目錄為空就行) 

個人建議資料先別刪除 萬一報錯 還可以解決的

[root@tff_128 mysql]# 
[root@tff_128 mysql]# pwd
/var/lib/mysql
[root@tff_128 mysql]# ll
總用量 98364
-rw-rw----. 1 mysql mysql    16384 5月   9 18:38 aria_log.00000001
-rw-rw----. 1 mysql mysql       52 5月   9 18:38 aria_log_control
-rw-r-----. 1 mysql mysql 77594624 5月   9 18:44 ibdata1
-rw-r-----. 1 mysql mysql  5242880 5月   9 18:44 ib_logfile0
-rw-r-----. 1 mysql mysql  5242880 5月   9 07:37 ib_logfile1
-rw-r-----. 1 mysql mysql 12582912 5月   9 07:37 ibtmp1
drwxr-x---. 2 mysql mysql     4096 5月   9 07:35 mysql
-rw-rw----. 1 mysql mysql      636 5月   9 18:38 mysql-bin.000001
-rw-rw----. 1 mysql mysql      993 5月   9 18:44 mysql-bin.000002
-rw-rw----. 1 mysql mysql       64 5月   9 18:38 mysql-bin.index
srwxrwxrwx. 1 mysql mysql        0 5月   9 18:38 mysql.sock
drwxr-x---. 2 mysql mysql     4096 5月   9 07:35 performance_schema
drwxr-x---. 2 mysql mysql       38 5月   9 07:37 tff
-rw-r-----. 1 mysql mysql       37 5月   9 07:37 xtrabackup_binlog_pos_innodb
-rw-r-----. 1 mysql mysql      524 5月   9 07:37 xtrabackup_info
drwxr-x---. 2 mysql mysql     8192 5月   9 07:35 zabbix
[root@tff_128 mysql]# mkdir /tmp/mmmysql/
[root@tff_128 mysql]# mv * /tmp/mmmysql/
[root@tff_128 mysql]# ll
總用量 0
[root@tff_128 mysql]#

6  執行全量備份恢復

[root@tff_128 backup]# ll
總用量 4
drwxr-x---. 6 root root 4096 5月   9 20:29 2022-05-09_20-28-26
[root@tff_128 backup]# 
innobackupex --defauults-file=/etc/my.cnf --copy-back /backup/2022-05-09_20-28-26/

7  防止服務啟動失敗

[root@tff_128 mysql]# ll
總用量 98332
-rw-r-----. 1 root root 77594624 5月   9 18:54 ibdata1
-rw-r-----. 1 root root  5242880 5月   9 18:54 ib_logfile0
-rw-r-----. 1 root root  5242880 5月   9 18:54 ib_logfile1
-rw-r-----. 1 root root 12582912 5月   9 18:54 ibtmp1
drwxr-x---. 2 root root     4096 5月   9 18:54 mysql
drwxr-x---. 2 root root     4096 5月   9 18:54 performance_schema
drwxr-x---. 2 root root       38 5月   9 18:54 tff
-rw-r-----. 1 root root       36 5月   9 18:54 xtrabackup_binlog_pos_innodb
-rw-r-----. 1 root root      507 5月   9 18:54 xtrabackup_info
drwxr-x---. 2 root root     8192 5月   9 18:54 zabbix
[root@tff_128 mysql]# pwd
/var/lib/mysql
[root@tff_128 mysql]# chown mysql:mysql -R /var/lib/mysql
[root@tff_128 mysql]# ll
總用量 98332
-rw-r-----. 1 mysql mysql 77594624 5月   9 18:54 ibdata1
-rw-r-----. 1 mysql mysql  5242880 5月   9 18:54 ib_logfile0
-rw-r-----. 1 mysql mysql  5242880 5月   9 18:54 ib_logfile1
-rw-r-----. 1 mysql mysql 12582912 5月   9 18:54 ibtmp1
drwxr-x---. 2 mysql mysql     4096 5月   9 18:54 mysql
drwxr-x---. 2 mysql mysql     4096 5月   9 18:54 performance_schema
drwxr-x---. 2 mysql mysql       38 5月   9 18:54 tff
-rw-r-----. 1 mysql mysql       36 5月   9 18:54 xtrabackup_binlog_pos_innodb
-rw-r-----. 1 mysql mysql      507 5月   9 18:54 xtrabackup_info
drwxr-x---. 2 mysql mysql     8192 5月   9 18:54 zabbix
[root@tff_128 mysql]#

8  重新登入資料庫 

檢視資料 發現刪除的資料回來了

[root@tff_128 mmmysql]# systemctl start mariadb.service 
[root@tff_128 backup]# mysql -uroot -p123456 -e "use tff;select * from bptest;"
+------+------+
| id   | name |
+------+------+
|    1 | d    |
|    2 | d    |
+------+------+
[root@tff_128 backup]# 

增量備份

全量備份上面有了

全量備份上面有了

[root@tff_128 backup]# ll
總用量 4
drwxr-x---. 6 root root 4096 5月   9 20:29 2022-05-09_20-28-26

1  先往表裡增加資料

MariaDB [tff]> insert into bptest values(3,'d');
ERROR 2006 (HY000): MySQL server has gone away
No connection. Trying to reconnect...
Connection id:    3
Current database: tff

Query OK, 1 row affected (0.01 sec)

MariaDB [tff]> insert into bptest values(4,'d');
Query OK, 1 row affected (0.01 sec)

MariaDB [tff]> select * from bptest;            
+------+------+
| id   | name |
+------+------+
|    1 | d    |
|    2 | d    |
|    3 | d    |
|    4 | d    |
+------+------+
4 rows in set (0.00 sec)

2  第一次增量備份

--incremental-basedir=/backup/2022-05-09_20-28-26

innobackupex --defaults-file=/etc/my.cnf --user=root --password=123456 --incremental-basedir=/backup/2022-05-09_20-28-26 --incremental /backup/

第一次增量備份產生了

第一次增量備份產生了

[root@tff_128 backup]# ll
總用量 4
drwxr-x---. 6 root root 4096 5月   9 20:39 2022-05-09_20-28-26 全量備份
drwxr-x---. 6 root root  241 5月   9 20:50 2022-05-09_20-50-26 增量備份1
[root@tff_128 backup]#

3  先往表裡再增加一些資料

MariaDB [tff]> insert into bptest values(5,'d');
Query OK, 1 row affected (0.00 sec)

MariaDB [tff]> insert into bptest values(6,'d');
Query OK, 1 row affected (0.00 sec)

MariaDB [tff]> select * from bptest;            
+------+------+
| id   | name |
+------+------+
|    1 | d    |
|    2 | d    |
|    3 | d    |
|    4 | d    |
|    5 | d    |
|    6 | d    |
+------+------+
6 rows in set (0.00 sec)

MariaDB [tff]> 

4  第二次增量備份

--incremental-basedir=/backup/2022-05-09_20-50-26

innobackupex --defaults-file=/etc/my.cnf --user=root --password=123456 --incremental-basedir=/backup/2022-05-09_20-50-26 --incremental /backup/

第二次增量備份產生了

第二次增量備份產生了

[root@tff_128 backup]# ll
總用量 4
drwxr-x---. 6 root root 4096 5月   9 20:39 2022-05-09_20-28-26 全量備份
drwxr-x---. 6 root root  241 5月   9 20:50 2022-05-09_20-50-26 增量備份1
drwxr-x---. 6 root root  241 5月   9 20:51 2022-05-09_20-51-57 增量備份2
[root@tff_128 backup]#

5  執行回滾操作 

(最後一次不用加--redo-only)

innobackupex --apply-log --redo-only /backup/2022-05-09_20-28-26 

innobackupex --apply-log --redo-only /backup/2022-05-09_20-28-26  --incremental-dir=/backup/2022-05-09_20-50-26

innobackupex --apply-log  /backup/2022-05-09_20-28-26 --incremental-dir=/backup/2022-05-09_20-51-57

6  往表裡刪除一些資料

MariaDB [tff]> select * from bptest;
+------+------+
| id   | name |
+------+------+
|    1 | d    |
|    2 | d    |
|    3 | d    |
|    4 | d    |
|    5 | d    |
|    6 | d    |
+------+------+
6 rows in set (0.00 sec)

MariaDB [tff]> delete from bptest where id =6;  
Query OK, 1 row affected (0.00 sec)

MariaDB [tff]> delete from bptest where id =4;
Query OK, 1 row affected (0.01 sec)

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

7  停止服務 移動資料

(保持data目錄為空就行)

 個人建議資料先別刪除 萬一報錯 還可以解決的

systemctl stop mariadb.service 
rm -rf /tmp/mmmysql/*
mv /var/lib/mysql/* /tmp/mmmysql/

執行增量恢復

innobackupex --copy-back /backup/2022-05-09_20-28-26/

9   防止服務啟動失敗

chown -R mysql:mysql /var/lib/mysql/

10  重新登入資料庫

檢視資料 發現數據回來了

[root@tff_128 mysql]# systemctl start mariadb.service
[root@tff_128 mysql]# mysql -uroot -p123456 -e "use tff;select * from bptest;"
+------+------+
| id   | name |
+------+------+
|    1 | d    |
|    2 | d    |
|    3 | d    |
|    4 | d    |
|    5 | d    |
|    6 | d    |
+------+------+
[root@tff_128 mysql]# 

注意點:

1 第n次增量備份  

--incremental-basedir=/backup/時間(這裡時間都在變化 都是相對的上一次備份的時間)

2 執行回滾操作 

innobackupex --apply-log --redo-only /backup/2022-05-09_20-28-26 (--redo-only /backup/時間 (時間都是全量備份的時間)