Skript, mis teeb varukoopia WordPressi instantsist - BASH

From ICO wiki

Argumendid

WordPressi instantsi kodukataloogi asukoht.

Tulemus

Tehakse varukoopia MySQL baasi vastavatest tabelitest ja WP kataloogipuust. Tabeli nime prefiks võetakse WP konfiguratsioonifailist. Kogu asi pakitakse kokku kujul (prefiks)-yymmddhhss.tar.gz

Skript

wp-backup.sh

#!/bin/bash
#if [ $# -ne 1 ] || [ "$UID" -ne 0 ] || [ ! -r $1 ]
if [ $# -lt 1 ] || [ ! -r $1 ] || [ $# -gt 2 ]
then
	echo "Kasutamine: $(basename $0) <wp-dir> [-q]"
	echo "<wp-dir> peab viitama eksisteerivale WordPressi installatsiooniasukohale."
	exit 1
else
	export LC_ALL=C
	
	WP_PATH=${1%/} # eemaldame vajadusel liigse kaldkriipsu
	
	WPCONFIG="$WP_PATH/wp-config.php"
	#echo $WPCONFIG
	if [ ! -r $WPCONFIG ]
	then
		echo "wp-config.php faili ei leitud!"
		exit 1
	fi

	# loeme wp-config.php-st vajalikud parameetrid -- VAJAB HÄDASTI REGULAARAVALDISI (aga hetkel pole viitsimist)
	# mysql username
	MYSQL_USER=`grep -i DB_USER $WPCONFIG`
	MYSQL_USER=${MYSQL_USER%%\');} # eemaldame kõik alates viimasest ülakomast
	MYSQL_USER=${MYSQL_USER##*\'} # eemaldame kõik enne viimast ülakoma (k.a.)
		
	# mysql password
	MYSQL_PASSWORD=""
	MYSQL_PASSWORD=`grep -i DB_PASSWORD $WPCONFIG`
	MYSQL_PASSWORD=${MYSQL_PASSWORD%%\');} # eemaldame kõik alates viimasest ülakomast
	MYSQL_PASSWORD=${MYSQL_PASSWORD##*\'} # eemaldame kõik enne viimast ülakoma (k.a.)

	# mysql database
	MYSQL_DB=""
	MYSQL_DB=`grep -i DB_NAME $WPCONFIG`
	MYSQL_DB=${MYSQL_DB%%\');} # eemaldame kõik alates viimasest ülakomast
	MYSQL_DB=${MYSQL_DB##*\'} # eemaldame kõik enne viimast ülakoma (k.a.)
	
	# mysql host
	MYSQL_HOST=""
	MYSQL_HOST=`grep -i DB_HOST $WPCONFIG`
	MYSQL_HOST=${MYSQL_HOST%%\');} # eemaldame kõik alates viimasest ülakomast
	MYSQL_HOST=${MYSQL_HOST##*\'} # eemaldame kõik enne viimast ülakoma (k.a.)
	
	# table prefix
	TABLE_PREFIX=""
	TABLE_PREFIX=`grep -i table_prefix $WPCONFIG`
	TABLE_PREFIX=${TABLE_PREFIX%%\';}
	TABLE_PREFIX=${TABLE_PREFIX##*\'}

	if [ "$2" != "-q" ]
	then
		echo ""
		echo "Leidsin alltoodud parameetrid: "
		echo "MYSQL_USER: $MYSQL_USER"
		echo "MYSQL_PASSWORD: $MYSQL_PASSWORD"
		echo "MYSQL_DB: $MYSQL_DB"
		echo "MYSQL_HOST: $MYSQL_HOST"
		echo "TABLE_PREFIX: $TABLE_PREFIX"
		echo ""
		echo "Tundub usutav? [J/e]:"
		read CONFIRM
		if [ ! $CONFIRM ] || [ ${CONFIRM,,} = "j" ]
		then
			echo "Oota natuke..."
		else
			echo "Selge pilt, katkestame."
			exit 1
		fi
	fi

	MYSQL_PARAMS=""
	
	if [ "$MYSQL_USER" != "" ]
	then
		MYSQL_PARAMS=$MYSQL_PARAMS" --user=$MYSQL_USER"
	fi

	if [ "$MYSQL_PASSWORD" != "" ]
	then
		MYSQL_PARAMS=$MYSQL_PARAMS" --password=$MYSQL_PASSWORD"
	fi

	if [ "$MYSQL_HOST" != "" ]
	then
		MYSQL_PARAMS=$MYSQL_PARAMS" --host=$MYSQL_HOST"
	fi
	
	if [ "$MYSQL_DB" != "" ]
	then
		MYSQL_PARAMS=$MYSQL_PARAMS" $MYSQL_DB"
	fi
	
	FILENAME=wp-backup_$(date +%Y%m%d-%H%M%S.%N)
	
	if [ "$TABLE_PREFIX" != "" ]
	then
		mysqldump $MYSQL_PARAMS --tables $(mysql $MYSQL_PARAMS -e \"show tables\" --batch | grep $TABLE_PREFIX) > $FILENAME.sql
	else
		mysqldump $MYSQL_PARAMS > $FILENAME.sql
	fi

	#tar
	mv ./$FILENAME.sql $WP_PATH/$FILENAME.sql
	pushd $WP_PATH > /dev/null
	tar cfz $FILENAME.tar.gz * && rm $FILENAME.sql
	popd > /dev/null
	mv $WP_PATH/$FILENAME.tar.gz .
	
	echo "Tehtud! Sinu varukoopia asub failis $FILENAME.tar.gz"

	exit 0
fi

Parameetrid

  • wp-config.php asukoht (kohustuslik)
  • -q -- vaikne režiim, teeb töö ära ilma ekraanile teateid kuvamata.

Teadaolevad kitsaskohad

  • Testitud ainult ühe WP konfiguratsioonifailiga.
  • Vajaks hädasti universaalsemaid regulaaravaldisi wp-config.php lugemisel.
  • Praegune versioon eeldab, et mysql on juba süsteemis olemas. Selle puudumist ei ole testitud.