Приведу пример скрипта для создания полной и дополнительных копий про помощи программы mariadb-backup.
Документация:
https://mariadb.com/docs/server/server-usage/backup-and-restore/mariadb-backup/incremental-backup-and-restore-with-mariadb-backup
В РЕД OC 8 программа присутствует в штатном репозитории, как и MariaDB Server, находится в пакете, например, mariadb-backup-10.11.11-1.red80.x86_64.
В отличии от сриптового набора SQL запросов, которые создаются при дампе, представляет собой бинарный набор данных. Полезно при более-менее крупном наборе данных, когда ежедневное создание обычного SQL дампа может занимать продолжительное время. Плюс гибкость в оперировании.
Алгоритм
Воскресенье - полный бэкап
Понедельник - изменения от восресенья
Вторник - изменения от понедельника
и т.д. до следующего воскресенья, когда опять полный бэкап.
#####
Расписание1.
2.
3.
4.
5.
6.
7.
8.
#
0 7 * * sun /srv/scripts/backup/backup_mariabackup.sh --backup-full > /dev/null 2>&1
0 7 * * mon /srv/scripts/backup/backup_mariabackup.sh --backup-inc1 > /dev/null 2>&1
0 7 * * tue /srv/scripts/backup/backup_mariabackup.sh --backup-inc2 > /dev/null 2>&1
0 7 * * wed /srv/scripts/backup/backup_mariabackup.sh --backup-inc3 > /dev/null 2>&1
0 7 * * thu /srv/scripts/backup/backup_mariabackup.sh --backup-inc4 > /dev/null 2>&1
0 7 * * fri /srv/scripts/backup/backup_mariabackup.sh --backup-inc5 > /dev/null 2>&1
0 7 * * sat /srv/scripts/backup/backup_mariabackup.sh --backup-inc6 > /dev/null 2>&1
Пример скрипта1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
#!/bin/bash
#
BACKUPDIR="/var/lib/mysql/_backup/mariabackup"
#
FULL="${BACKUPDIR}/full"
INC1="${BACKUPDIR}/inc1"
INC2="${BACKUPDIR}/inc2"
INC3="${BACKUPDIR}/inc3"
INC4="${BACKUPDIR}/inc4"
INC5="${BACKUPDIR}/inc5"
INC6="${BACKUPDIR}/inc6"
#
#####
do_backup_full() {
DST="${FULL}/data"
find ${FULL} -maxdepth 1 -mindepth 1 -type d -name "data" -exec rm -rf {} \;
mariadb-backup --backup \
--target-dir=${DST} \
--user=root
}
do_backup_inc1() {
SRC="${FULL}/data"
DST="${INC1}/data"
find ${INC1} -maxdepth 1 -mindepth 1 -type d -name "data" -exec rm -rf {} \;
mariadb-backup --backup \
--target-dir=${DST} \
--incremental-basedir=${SRC} \
--user=root
}
do_backup_inc2() {
SRC="${INC1}/data"
DST="${INC2}/data"
find ${INC2} -maxdepth 1 -mindepth 1 -type d -name "data" -exec rm -rf {} \;
mariadb-backup --backup \
--target-dir=${DST} \
--incremental-basedir=${SRC} \
--user=root
}
do_backup_inc3() {
SRC="${INC2}/data"
DST="${INC3}/data"
find ${INC3} -maxdepth 1 -mindepth 1 -type d -name "data" -exec rm -rf {} \;
mariadb-backup --backup \
--target-dir=${DST} \
--incremental-basedir=${SRC} \
--user=root
}
do_backup_inc4() {
SRC="${INC3}/data"
DST="${INC4}/data"
find ${INC4} -maxdepth 1 -mindepth 1 -type d -name "data" -exec rm -rf {} \;
mariadb-backup --backup \
--target-dir=${DST} \
--incremental-basedir=${SRC} \
--user=root
}
do_backup_inc5() {
SRC="${INC4}/data"
DST="${INC5}/data"
find ${INC5} -maxdepth 1 -mindepth 1 -type d -name "data" -exec rm -rf {} \;
mariadb-backup --backup \
--target-dir=${DST} \
--incremental-basedir=${SRC} \
--user=root
}
do_backup_inc6() {
SRC="${INC5}/data"
DST="${INC6}/data"
find ${INC6} -maxdepth 1 -mindepth 1 -type d -name "data" -exec rm -rf {} \;
mariadb-backup --backup \
--target-dir=${DST} \
--incremental-basedir=${SRC} \
--user=root
}
#####
case "$1" in
--backup-full)
do_backup_full
;;
--backup-inc1)
do_backup_inc1
;;
--backup-inc2)
do_backup_inc2
;;
--backup-inc3)
do_backup_inc3
;;
--backup-inc4)
do_backup_inc4
;;
--backup-inc5)
do_backup_inc5
;;
--backup-inc6)
do_backup_inc6
;;
*)
echo "Usage: $0 --backup-full | --backup-inc1 | --backup-inc2 | --backup-inc3 | --backup-inc4 |--backup-inc5 | --backup-inc6"
esac
Обратите внимание на
1.
find ${FULL} -maxdepth 1 -mindepth 1 -type d -name "data" -exec rm -rf {} \;
Перед созданием копии удаляется предыдущий набор. -maxdepth 1 -mindepth 1 - важно, иначе подаляет лишнее, ограничиваемся только рабочей директорией создаваемого набора.