@@ -31,6 +31,7 @@ let "filename_flag_gz=0x02"
31
31
let " filename_flag_bz2=0x04"
32
32
let " filename_flag_diff=0x08"
33
33
let " filename_flag_xz=0x10"
34
+ let " filename_flag_zst=0x20"
34
35
# END _flags
35
36
36
37
# BEGIN _errors_notifications
@@ -274,6 +275,22 @@ gzip_compression() {
274
275
fi
275
276
}
276
277
278
+ # @info: zstd compression
279
+ zstd_compression () {
280
+ var=(" $@ " )
281
+ re=' ^[0-9]*$'
282
+ if [[ " x$CONFIG_multicore " = ' xyes' ]]; then
283
+ if [[ " x$CONFIG_multicore_threads " != ' xauto' ]] && [[ " x$CONFIG_multicore_threads " =~ $re ]]; then
284
+ var=( " -T${CONFIG_multicore_threads} " " ${var[@]} " )
285
+ else
286
+ var=( " -T0" " ${var[@]} " )
287
+ fi
288
+ zstd " ${var[@]} "
289
+ else
290
+ zstd " ${var[@]} "
291
+ fi
292
+ }
293
+
277
294
# @info: xz compression
278
295
xz_compression () {
279
296
var=(" $@ " )
@@ -455,6 +472,9 @@ backup_local_files () {
455
472
' xz' )
456
473
echo " tar -cJvf ${1}${suffix} ${CONFIG_backup_local_files[@]} " ;
457
474
;;
475
+ ' zstd' )
476
+ echo " tar -I zstd -cvf ${1}${suffix} ${CONFIG_backup_local_files[@]} " ;
477
+ ;;
458
478
* )
459
479
echo " tar -cvf ${1}${suffix} ${CONFIG_backup_local_files[@]} " ;
460
480
;;
@@ -475,6 +495,10 @@ backup_local_files () {
475
495
tar -cJvf " ${1}${suffix} " " ${CONFIG_backup_local_files[@]} " ;
476
496
return $?
477
497
;;
498
+ ' zstd' )
499
+ tar -I zstd -cvf " ${1}${suffix} " " ${CONFIG_backup_local_files[@]} " ;
500
+ return $?
501
+ ;;
478
502
* )
479
503
tar -cvf " ${1}${suffix} " " ${CONFIG_backup_local_files[@]} " ;
480
504
return $?
@@ -571,6 +595,7 @@ parse_configuration () {
571
595
' gzip' ) suffix=' .gz' ;;
572
596
' bzip2' ) suffix=' .bz2' ;;
573
597
' xz' ) suffix=' .xz' ;;
598
+ ' zstd' ) suffix=' .zst' ;;
574
599
* ) suffix=' ' ;;
575
600
esac
576
601
# <- determine suffix
@@ -612,6 +637,9 @@ dbstatus() {
612
637
' xz' )
613
638
echo " dry-running: $MYSQLSHOW ${opt_dbstatus[@]} | xz_compression > ${1}${suffix} " ;
614
639
;;
640
+ ' zstd' )
641
+ echo " dry-running: $MYSQLSHOW ${opt_dbstatus[@]} | zstd_compression > ${1}${suffix} " ;
642
+ ;;
615
643
* )
616
644
echo " dry-running: $MYSQLSHOW ${opt_dbstatus[@]} > ${1}${suffix} " ;
617
645
;;
@@ -631,6 +659,10 @@ dbstatus() {
631
659
$MYSQLSHOW " ${opt_dbstatus[@]} " | xz_compression > " ${1}${suffix} " ;
632
660
return $?
633
661
;;
662
+ ' zstd' )
663
+ $MYSQLSHOW " ${opt_dbstatus[@]} " | zstd_compression > " ${1}${suffix} " ;
664
+ return $?
665
+ ;;
634
666
* )
635
667
$MYSQLSHOW " ${opt_dbstatus[@]} " > " ${1}${suffix} " ;
636
668
return $?
@@ -655,6 +687,9 @@ fullschema () {
655
687
' xz' )
656
688
echo " dry-running: $MYSQLDUMP ${opt_fullschema[@]} | xz_compression > ${1}${suffix} " ;
657
689
;;
690
+ ' zstd' )
691
+ echo " dry-running: $MYSQLDUMP ${opt_fullschema[@]} | zstd_compression > ${1}${suffix} " ;
692
+ ;;
658
693
* )
659
694
echo " dry-running: $MYSQLDUMP ${opt_fullschema[@]} > ${1}${suffix} " ;
660
695
;;
@@ -674,6 +709,10 @@ fullschema () {
674
709
$MYSQLDUMP " ${opt_fullschema[@]} " | xz_compression > " ${1}${suffix} " ;
675
710
return $?
676
711
;;
712
+ ' zstd' )
713
+ $MYSQLDUMP " ${opt_fullschema[@]} " | zstd_compression > " ${1}${suffix} " ;
714
+ return $?
715
+ ;;
677
716
* )
678
717
$MYSQLDUMP " ${opt_fullschema[@]} " > " ${1}${suffix} " ;
679
718
return $?
@@ -750,13 +789,14 @@ process_dbs() {
750
789
# ## -> get latest differential manifest entry for specified db
751
790
# if get_latest_manifest_entry_for_db "$db" 1; then
752
791
# pid="${manifest_entry[2]}"
753
- # # filename format: prefix_db_YYYY-MM-DD_HHhMMm_[A-Za-z0-9]{8}(.sql|.diff)(.gz|.bz2|.xz)(.enc)
792
+ # # filename format: prefix_db_YYYY-MM-DD_HHhMMm_[A-Za-z0-9]{8}(.sql|.diff)(.gz|.bz2|.xz|.zst )(.enc)
754
793
# FileStub=${manifest_entry[0]%.@(sql|diff)*}
755
794
# FileExt=${manifest_entry[0]#"$FileStub"}
756
795
# re=".*\.enc.*"; [[ "$FileExt" =~ $re ]] && let "filename_flags|=$filename_flag_encrypted"
757
796
# re=".*\.gz.*"; [[ "$FileExt" =~ $re ]] && let "filename_flags|=$filename_flag_gz"
758
797
# re=".*\.bz2.*"; [[ "$FileExt" =~ $re ]] && let "filename_flags|=$filename_flag_bz2"
759
798
# re=".*\.xz.*"; [[ "$FileExt" =~ $re ]] && let "filename_flags|=$filename_flag_xz"
799
+ # re=".*\.zst.*"; [[ "$FileExt" =~ $re ]] && let "filename_flags|=$filename_flag_zst"
760
800
# re=".*\.diff.*"; [[ "$FileExt" =~ $re ]] && let "filename_flags|=$filename_flag_diff"
761
801
# manifest_latest_diff_entry=("${manifest_entry[@]}")
762
802
# else # no entries in manifest
@@ -768,13 +808,14 @@ process_dbs() {
768
808
# Create a differential backup if a master entry in the manifest exists, it isn't the day we do weekly master backups or the master file we fetched is already from today.
769
809
if get_latest_manifest_entry_for_db " $db " 0 && ( (( ${date_dayno_of_week} != ${CONFIG_do_weekly} )) || [[ " ${manifest_entry[0]} " = * _$( date +%Y-%m-%d) _* ]] ); then
770
810
pid=" ${manifest_entry[2]} "
771
- # filename format: prefix_db_YYYY-MM-DD_HHhMMm_[A-Za-z0-9]{8}(.sql|.diff)(.gz|.bz2|xz )(.enc)
811
+ # filename format: prefix_db_YYYY-MM-DD_HHhMMm_[A-Za-z0-9]{8}(.sql|.diff)(.gz|.bz2|,xz|.zst )(.enc)
772
812
FileStub=" ${manifest_entry[0]% .@ (sql|diff)* } "
773
813
FileExt=" ${manifest_entry[0]# " $FileStub " } "
774
814
re=" .*\.enc.*" ; [[ " $FileExt " =~ $re ]] && let " filename_flags|=$filename_flag_encrypted "
775
815
re=" .*\.gz.*" ; [[ " $FileExt " =~ $re ]] && let " filename_flags|=$filename_flag_gz "
776
816
re=" .*\.bz2.*" ; [[ " $FileExt " =~ $re ]] && let " filename_flags|=$filename_flag_bz2 "
777
817
re=" .*\.xz.*" ; [[ " $FileExt " =~ $re ]] && let " filename_flags|=$filename_flag_xz "
818
+ re=" .*\.zst.*" ; [[ " $FileExt " =~ $re ]] && let " filename_flags|=$filename_flag_zst "
778
819
re=" .*\.diff.*" ; [[ " $FileExt " =~ $re ]] && let " filename_flags|=$filename_flag_diff "
779
820
manifest_latest_master_entry=(" ${manifest_entry[@]} " )
780
821
else # no entries in manifest
@@ -803,6 +844,9 @@ process_dbs() {
803
844
' xz' )
804
845
$MYSQLDUMP " ${opt[@]} " " $@ " | xz_compression > " $cfname " ;
805
846
;;
847
+ ' zstd' )
848
+ $MYSQLDUMP " ${opt[@]} " " $@ " | zstd_compression > " $cfname " ;
849
+ ;;
806
850
* )
807
851
$MYSQLDUMP " ${opt[@]} " " $@ " > " $cfname " ;
808
852
;;
@@ -848,13 +892,26 @@ process_dbs() {
848
892
diff " ${manifest_latest_master_entry[0]} " <( $MYSQLDUMP " ${opt[@]} " " $@ " ) | xz_compression > " $cfname " ;
849
893
fi
850
894
;;
895
+ ' zstd' )
896
+ if (( $filename_flags & $filename_flag_zst )) ; then
897
+ diff <( zstd_compression -dc " ${manifest_latest_master_entry[0]} " ) <( $MYSQLDUMP " ${opt[@]} " " $@ " ) | xz_compression > " $cfname " ;
898
+ elif (( $filename_flags & $filename_flag_bz2 )) ; then
899
+ diff <( bzip2_compression -dc " ${manifest_latest_master_entry[0]} " ) <( $MYSQLDUMP " ${opt[@]} " " $@ " ) | xz_compression > " $cfname " ;
900
+ elif (( $filename_flags & $filename_flag_xz )) ; then
901
+ diff <( xz_compression -dc " ${manifest_latest_master_entry[0]} " ) <( $MYSQLDUMP " ${opt[@]} " " $@ " ) | xz_compression > " $cfname " ;
902
+ else
903
+ diff " ${manifest_latest_master_entry[0]} " <( $MYSQLDUMP " ${opt[@]} " " $@ " ) | xz_compression > " $cfname " ;
904
+ fi
905
+ ;;
851
906
* )
852
907
if (( $filename_flags & $filename_flag_gz )) ; then
853
908
diff <( gzip_compression -dc " ${manifest_latest_master_entry[0]} " ) <( $MYSQLDUMP " ${opt[@]} " " $@ " ) > " $cfname " ;
854
909
elif (( $filename_flags & $filename_flag_bz2 )) ; then
855
910
diff <( bzip2_compression -dc " ${manifest_latest_master_entry[0]} " ) <( $MYSQLDUMP " ${opt[@]} " " $@ " ) > " $cfname " ;
856
911
elif (( $filename_flags & $filename_flag_xz )) ; then
857
912
diff <( xz_compression -dc " ${manifest_latest_master_entry[0]} " ) <( $MYSQLDUMP " ${opt[@]} " " $@ " ) > " $cfname " ;
913
+ elif (( $filename_flags & $filename_flag_zst )) ; then
914
+ diff <( zstd_compression -dc " ${manifest_latest_master_entry[0]} " ) <( $MYSQLDUMP " ${opt[@]} " " $@ " ) > " $cfname " ;
858
915
else
859
916
diff " ${manifest_latest_master_entry[0]} " <( $MYSQLDUMP " ${opt[@]} " " $@ " ) > " $cfname " ;
860
917
fi
@@ -878,6 +935,9 @@ process_dbs() {
878
935
' xz' )
879
936
echo " dry-running: $MYSQLDUMP ${opt[@]} $@ | xz_compression > ${cfname} "
880
937
;;
938
+ ' zstd' )
939
+ echo " dry-running: $MYSQLDUMP ${opt[@]} $@ | zstd_compression > ${cfname} "
940
+ ;;
881
941
* )
882
942
echo " dry-running: $MYSQLDUMP ${opt[@]} $@ > ${cfname} "
883
943
;;
@@ -903,6 +963,10 @@ process_dbs() {
903
963
$MYSQLDUMP " ${opt[@]} " " $@ " | xz_compression > " ${cfname} "
904
964
ret=$?
905
965
;;
966
+ ' zstd' )
967
+ $MYSQLDUMP " ${opt[@]} " " $@ " | zstd_compression > " ${cfname} "
968
+ ret=$?
969
+ ;;
906
970
* )
907
971
$MYSQLDUMP " ${opt[@]} " " $@ " > " ${cfname} "
908
972
ret=$?
@@ -1138,12 +1202,20 @@ check_dependencies () {
1138
1202
CONFIG_multicore=' no' # turn off multicore support, since the program isn't there
1139
1203
echo " WARNING: Turning off multicore support, since xz isn't there."
1140
1204
fi
1205
+ elif [[ " x$CONFIG_mysql_dump_compression " = ' xzstd' ]]; then
1206
+ if type zstd & > /dev/null; then
1207
+ echo " zstd ... found."
1208
+ else
1209
+ CONFIG_multicore=' no' # turn off multicore support, since the program isn't there
1210
+ echo " WARNING: Turning off multicore support, since zstd isn't there."
1211
+ fi
1141
1212
fi
1142
1213
1143
1214
else
1144
1215
[[ " x$CONFIG_mysql_dump_compression " = ' xbzip2' ]] && dependencies=(" ${dependencies[@]} " ' bzip2' )
1145
1216
[[ " x$CONFIG_mysql_dump_compression " = ' xgzip' ]] && dependencies=(" ${dependencies[@]} " ' gzip' )
1146
1217
[[ " x$CONFIG_mysql_dump_compression " = ' xxz' ]] && dependencies=(" ${dependencies[@]} " ' xz' )
1218
+ [[ " x$CONFIG_mysql_dump_compression " = ' xzstd' ]] && dependencies=(" ${dependencies[@]} " ' zstd' )
1147
1219
fi
1148
1220
1149
1221
if [[ " x$CONFIG_mailcontent " = ' xlog' || " x$CONFIG_mailcontent " = ' xquiet' ]]; then
@@ -2137,6 +2209,8 @@ method_list_manifest_entries () {
2137
2209
let " filename_flag_gz=0x02"
2138
2210
let " filename_flag_bz2=0x04"
2139
2211
let " filename_flag_diff=0x08"
2212
+ let " filename_flag_xz=0x10"
2213
+ let " filename_flag_zst=0x20"
2140
2214
2141
2215
# #############################################################################################################
2142
2216
# BEGIN __STARTUP
@@ -2235,6 +2309,7 @@ method_list_manifest_entries () {
2235
2309
re=" .*\.gz.*" ; [[ " $FileExt " =~ $re ]] && let " master_flags|=$filename_flag_gz "
2236
2310
re=" .*\.bz2.*" ; [[ " $FileExt " =~ $re ]] && let " master_flags|=$filename_flag_bz2 "
2237
2311
re=" .*\.xz.*" ; [[ " $FileExt " =~ $re ]] && let " master_flags|=$filename_flag_xz "
2312
+ re=" .*\.zst.*" ; [[ " $FileExt " =~ $re ]] && let " master_flags|=$filename_flag_zst "
2238
2313
re=" .*\.diff.*" ; [[ " $FileExt " =~ $re ]] && let " master_flags|=$filename_flag_diff "
2239
2314
if (( $master_flags & $filename_flag_gz )) ; then
2240
2315
declare -a testarray=(" ${to_rm[@]} " )
@@ -2257,6 +2332,13 @@ method_list_manifest_entries () {
2257
2332
to_rm=(" ${to_rm[@]} " " ${master% .xz} " )
2258
2333
fi
2259
2334
master=" ${master% .xz} "
2335
+ elif (( $master_flags & $filename_flag_zst )) ; then
2336
+ declare -a testarray=(" ${to_rm[@]} " )
2337
+ if ! in_array " ${master% .zst} " ; then
2338
+ zstd_compression -dc " $master " > " ${master% .zst} "
2339
+ to_rm=(" ${to_rm[@]} " " ${master% .zst} " )
2340
+ fi
2341
+ master=" ${master% .zst} "
2260
2342
else
2261
2343
:
2262
2344
fi
@@ -2298,13 +2380,15 @@ method_diff_to_full() {
2298
2380
re=" .*\.gz.*" ; [[ " $FileExt " =~ $re ]] && let " diff_flags|=$filename_flag_gz "
2299
2381
re=" .*\.bz2.*" ; [[ " $FileExt " =~ $re ]] && let " diff_flags|=$filename_flag_bz2 "
2300
2382
re=" .*\.xz.*" ; [[ " $FileExt " =~ $re ]] && let " diff_flags|=$filename_flag_xz "
2383
+ re=" .*\.zst.*" ; [[ " $FileExt " =~ $re ]] && let " diff_flags|=$filename_flag_zst "
2301
2384
re=" .*\.diff.*" ; [[ " $FileExt " =~ $re ]] && let " diff_flags|=$filename_flag_diff "
2302
2385
FileStub=" ${master% .@ (sql|master)* } "
2303
2386
FileExt=" ${master# " $FileStub " } "
2304
2387
re=" .*\.enc.*" ; [[ " $FileExt " =~ $re ]] && let " master_flags|=$filename_flag_encrypted "
2305
2388
re=" .*\.gz.*" ; [[ " $FileExt " =~ $re ]] && let " master_flags|=$filename_flag_gz "
2306
2389
re=" .*\.bz2.*" ; [[ " $FileExt " =~ $re ]] && let " master_flags|=$filename_flag_bz2 "
2307
2390
re=" .*\.xz.*" ; [[ " $FileExt " =~ $re ]] && let " master_flags|=$filename_flag_xz "
2391
+ re=" .*\.zst.*" ; [[ " $FileExt " =~ $re ]] && let " master_flags|=$filename_flag_zst "
2308
2392
re=" .*\.diff.*" ; [[ " $FileExt " =~ $re ]] && let " master_flags|=$filename_flag_diff "
2309
2393
2310
2394
# TODO: Differential backup with encryption is not yet implemented!
@@ -2328,6 +2412,10 @@ method_diff_to_full() {
2328
2412
xz_compression -dc " $diff " > " ${diff% .xz} "
2329
2413
to_rm=(" ${to_rm[@]} " " ${diff% .xz} " )
2330
2414
diff=" ${diff% .xz} "
2415
+ elif (( $diff_flags & $filename_flag_zst )) ; then
2416
+ zstd_compression -dc " $diff " > " ${diff% .zst} "
2417
+ to_rm=(" ${to_rm[@]} " " ${diff% .zst} " )
2418
+ diff=" ${diff% .zst} "
2331
2419
else
2332
2420
:
2333
2421
fi
@@ -2340,10 +2428,14 @@ method_diff_to_full() {
2340
2428
bzip2_compression -dc " $master " > " ${master% .bz2} "
2341
2429
to_rm=(" ${to_rm[@]} " " ${master% .bz2} " )
2342
2430
master=" ${master% .bz2} "
2343
- elif (( $master_flags & $filename_flag_bz2 )) ; then
2431
+ elif (( $master_flags & $filename_flag_xz )) ; then
2344
2432
xz_compression -dc " $master " > " ${master% .xz} "
2345
2433
to_rm=(" ${to_rm[@]} " " ${master% .xz} " )
2346
2434
master=" ${master% .xz} "
2435
+ elif (( $master_flags & $filename_flag_zst )) ; then
2436
+ zstd_compression -dc " $master " > " ${master% .zst} "
2437
+ to_rm=(" ${to_rm[@]} " " ${master% .zst} " )
2438
+ master=" ${master% .zst} "
2347
2439
else
2348
2440
:
2349
2441
fi
0 commit comments