Portál AbcLinuxu, 19. července 2025 09:43


Dotaz: Bash script pro zálohování

15.8.2012 09:00 Tomáš O.
Bash script pro zálohování
Přečteno: 952×
Odpovědět | Admin
Ahoj.

Napsal jsem si několik funkcní, které poučtim v cron a vytváří zálohu. Jenže jsem narazil na problém se zálohou Databáze.
# BackUp databases
backup_database()
{
	# Check if exist temp dir
	temp="/tmp/__temp__backup__database__";
	check_dir $temp;

	# Change work directory to root
	cd /;

	# All database list
	DbList="$(mysql -u $MyUSER -h $MyHOST -p$MyPASS -Bse 'show databases')";

	for db in $DbList
	do

		# If is not in black list create dump
		if ! in_array "$db" "${DatabaseBlackList[@]}";
		then
			# MySql dump
			mysqldump -u $MyUSER -p$MyPASS $db > $temp/$db.dump.sql;
		fi

	done

	# Check if exist backup dir
	dir=$DIR_BACKUP_DATABASE/$DATE;
	check_dir $dir;

	# Change work directory to temp
	cd $temp;

	# Create pack
	tar cfz $dir/$TIME.tar.gz *;

	# Delete temp dir
	rm -rf $temp;

	echo "Database backup done!";
}
Zatim jsem provedl cca 20 záloh (každá jednou za h), ale 2x někde nastala chyba. Jednou v nově vytvořeném tar.gz nebyly zálohy všech databází a podruhé to dokonce udělal tar.gz, který měl skoro GB (zabalilo to skoro celý disk).

Kde mám chybu? Jak předejít těmto problémům? Děkuji.
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

15.8.2012 11:15 Dudo
Rozbalit Rozbalit vše Re: Bash script pro zálohování
Odpovědět | | Sbalit | Link | Blokovat | Admin
Pravdepodobne sa tvoj skript spustil skôr, ako sa prvý dokončil. To sa stáva väčšinou vtedy, keď je hodne vyťažený server a skript sa nestihne spracovať do ďalšieho volania v crone. Vďaka tomu sa tvoj adresar temp stale nabaloval novými zálohami. Keď vytváraš skript ktorý môže trvať dlhšie ako predpokladáš, tak by si mal tvoj skript zistiť či už nebeží. Tzn. že hneď po spustení si pozrie či existuje subor /var/run/tvoj_skript.pid. Ak existuje, tak zistí ako dlho beží a puď počká na ďalšie vyvolanie cronom, alebo ho killne a spustí sa znova. A ešte jedna poznámka: nevytváraj názvy tempových adresárov explicitne, ale použi príkaz mktemp - tak máš vytvorený zaručene unikátny názov temp adresára.
15.8.2012 11:53 Tomáš O.
Rozbalit Rozbalit vše Re: Bash script pro zálohování
Díky za info ohledně 'mktemp'. Jde o to, že v db nemám skoro nic, takže to je otázka 2-3s.
15.8.2012 13:44 Tomáš O.
Rozbalit Rozbalit vše Re: Bash script pro zálohování
Tak jsem zkusil pár věcí a je to přesně tak, jak řikáš.

Občas se stane, že víc cronů se spustí ve stejný čas a to tomu nejspíš dělá problém.
15.8.2012 14:04 volvox | skóre: 16
Rozbalit Rozbalit vše Re: Bash script pro zálohování
Odpovědět | | Sbalit | Link | Blokovat | Admin
Sice trochu off-topic, ale zkuste se podívat na automysqlbackup. Buď to můžete ihned použít, nebo to vzít jako inspiraci - je to jeden bash skript.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.