運維實戰 Xtrabackup備份指令碼

2021-09-29 15:20:25 字數 4152 閱讀 7791

如果是星期天進行完全備份;

如果是周一執行第一次增量,參考 完全;

如果是周二到週六執行第1+n次增量,參考上一次增量;

備份檔案理應不能與資料檔案放在同一塊磁碟,備份之後可通過rsync至遠端備份伺服器;

什麼時候是業務低谷期;

保留多長時間;

備份失敗記錄日誌;

需要實現自動備份;

需要有日誌功能;

需要能實現主動備份;

作用路徑

全量備份資料

/home/backups/xtra-full

增量備份資料

/home/backups/xtra-increment

錯誤日誌

/home/backups/mysql-bak.log

輸出日誌

/home/backups/xtra.tmp

圖1. 備份路徑規劃表

#!/bin/bash

i_home="/home/backups"

i_full="$/xtra-full"

i_incre="$/xtra-increment"

err_log="$/mysql-bak.log"

tmpfile="$/xtra.tmp"

i_week=`date +%u`

log_time=`date +%f`

bkp_user="root"

myfile="/etc/my.cnf"

bkp_stm="innobackupex --user=$bkp_user"

bkp_pwd=''

[[ ! -d "$i_full" ]]&&mkdir -p "$i_full"

[[ ! -d "$i_incre" ]]&&mkdir -p "$i_incre"

usage()

use_info()

result()

all_backup() $i_full 2> $tmpfile

result

cp $myfile "$"/my-"$".cnf

}add_backup()'`

echo "[增量備份開始] `date` ***************====" >> $err_log

$ --incremental $i_incre --incremental-basedir=$i_full/$basebak 2> $tmpfile

result

}main()

main $1

該指令碼並不是特別完美,是之前寫的,有幾個地方還可以在專業一些。譬如,將所有的變數放置再乙個config檔案中,通過 source 或 . 進行讀取;寫入show log功能,當等於1的時候,會將結果輸出至螢幕;還有乙個就是log功能,可以將執行的命令追加至日誌中;這幾點都是方便排查的,想要更詳細的輸出可以自行加。

mariadb [(none)]> create database db1 default character set utf8 collate utf8_general_ci;

query ok, 1 row affected (0.00 sec)

mariadb [(none)]> use db1;

database changed

mariadb [db1]> create table tb1(id int(10))engine=innodb;

query ok, 0 rows affected (0.01 sec)

mariadb [db1]> show tables;

+---------------+

| tables_in_db1 |

+---------------+

| tb1 |

+---------------+

1 row in set (0.00 sec)

mariadb [db1]> insert into tb1 values(1),(2),(3);

query ok, 3 rows affected (0.00 sec)

records: 3 duplicates: 0 warnings: 0

mariadb [db1]> select * from tb1;

+------+

| id |

+------+

| 1 |

| 2 |

| 3 |

+------+

3 rows in set (0.00 sec)

# 執行全備

[root@www ~]# /server/scripts/xtrabkp.sh --all

# 檢視備份狀態

[root@www backups]# cat /home/backups/xtra-full/2019-11-14_16-42-45/xtrabackup_checkpoints

backup_type = full-backuped

from_lsn = 0

to_lsn = 1601525

last_lsn = 1601525

compact = 0

recover_binlog_info = 0

flushed_lsn = 1601525

# 有意增加幾條資料

mariadb [db1]> insert into tb1 values(8),(9),(10);

query ok, 3 rows affected (0.01 sec)

records: 3 duplicates: 0 warnings: 0

mariadb [db1]> select id from tb1;

+------+

| id |

+------+

| 1 |

| 2 |

| 3 |

| 8 |

| 9 |

| 10 |

+------+

6 rows in set (0.00 sec)

# 執行增量操作

[root@www backups]# /server/scripts/xtrabkp.sh --add

# 檢查增量備份狀態

[root@www backups]# cat /home/backups/xtra-increment/2019-11-14_16-47-36/xtrabackup_checkpoints

backup_type = incremental

from_lsn = 1601525

to_lsn = 1602669

last_lsn = 1602669

compact = 0

recover_binlog_info = 0

flushed_lsn = 1602669

mysql會在啟動的時候會將未提交的事務自動做回滾。再者如果增量後還有資料寫入可通過binlog進行恢復;

systemctl stop mariadb

rm -fr /var/lib/mysql/*

# 整理全備

# 將增量還原至主幹

# 還原資料

innobackupex --user=root --copy-back /home/backups/xtra-full/2019-11-14_16-42-45/

chown -r mysql. /var/lib/mysql/

systemctl start mariadb

# 檢測資料

mariadb [(none)]> use db1;

database changed

mariadb [db1]> select id from tb1;

+------+

| id |

+------+

| 1 |

| 2 |

| 3 |

| 8 |

| 9 |

| 10 |

+------+

6 rows in set (0.00 sec)

xtrabackup全備 增備 恢復

全備 innobackupex no timestamp defaults file path my.cnf data backup 20141106 增量1 innobackupex no timestamp defaults file path my.cnf incremental increm...

xtrabackup備份(全備,增備)

xtrabackup的介紹 mysql冷備 mysqldump mysql熱拷貝都無法實現對資料庫進行增量備份。在實際生產環境中增量備份是非常實用的,如果資料大於50g或100g,儲存空間足夠的情況下,可以每天進行完整備份,如果每天產生的資料量較大,需要定製資料備份策略。例如每週實用完整備份,周一到...

XtraBackup實現MySQL資料備份

xtrabackup是由percona提供的mysql資料庫備份工具,據官方介紹,是一款開源能夠對innodb和xtradb資料庫進行熱備的工具,支援完全備份和增量備份。特點 1 備份過程快速 可靠 2 備份過程不會打斷正在執行的事務 3 能夠基於壓縮等功能節約磁碟空間和流量 4 自動實現備份檢驗 ...