/etc -> SVN
#!/bin/bash
export LC_ALL=C
export EDITOR=/usr/bin/vim
tmpconf=/var/tmp/conf2svn
root=/etc
for srv in serverA serverB serverC
do
for dir in network postfix
do
rm -rf ${tmpconf}/${srv} > /dev/null 2>&1
mkdir -p ${tmpconf}/${srv} > /dev/null 2>&1
cd ${tmpconf}/${srv}
svn checkout --quiet svn://svn.mydomain.com/repos/conf/${srv}/${dir} ./${dir}
scp -q -r ${srv}:${root}/${dir} .
cd ${tmpconf}/${srv}/${dir}
svn diff | grep "" > /dev/null
if [[ $? -eq 0 ]]
then
svn commit -m "Commiting last changes in live servers' configuration (/etc)."
fi
done
done
rm -rf $tmpconf > /dev/null 2>&1
If you import
/etc/something
into SVN, delete /etc/something
(be careful) and check something
out back into /etc you won't need to make temporary working copy (SVN workspace) into /var/tmp/conf2svn
Script can't add new files. It only commits changes in existing ones.
MySQL schemas -> SVN
#!/bin/bash
export LC_ALL=C
export EDITOR=/usr/bin/vim
tmpconf=/var/tmp/schema2svn
rm -rf $tmpconf > /dev/null 2>&1
mkdir $tmpconf > /dev/null 2>&1
cd $tmpconf
svn checkout --quiet svn://svn.mydomain.com/repos/schemas .
for srv in dbA dbB
do
mysqldump --host=$srv --password=nkjn39c134 --no-data --all-databases > ${tmpconf}/${srv}_schema_dump.txt
done
for file in *txt
do
grep -v -E -- '(^--|ENGINE=MyISAM AUTO_INCREMENT)' $file > ${file}.new
mv ${file}.new $file
done
svn diff | grep "" > /dev/null
if [[ $? -eq 0 ]]
then
svn commit --quiet -m "Committing schema changes on live servers."
fi
rm -rf $tmpconf > /dev/null 2>&1
___
If you implemented your own schemas of backup/archiving, please let me know - send me an e-mail, drop a comment or meet me on IRC.
No comments:
Post a Comment