Advertisement
Guest User

Untitled

a guest
Feb 12th, 2017
179
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.90 KB | None | 0 0
  1. #!/bin/bash
  2. # Database backup script
  3. #
  4.  
  5. #Large tables - we only keep one copy of these
  6. export mysql_large_tables="track_page track_visit emails_message_body emails_message_body_new"
  7. export dumpopts=" --single-transaction --max_allowed_packet=32M --compact "
  8. export mysqldump="mysqldump -Q $dumpopts"
  9. export backup_root='/srv/backup/temp-databases'
  10. export ldap_dumpall="/usr/sbin/slapcat"
  11. export email=#Your email
  12.  
  13. export POSTGRES_USER=#Your user
  14. export MYSQL_USER=#Your user
  15. export MYSQL_PASS=#Your pass
  16.  
  17. export ftp_user=#Your FTP Username
  18. export ftp_password=#Your FTP Password
  19. export ftp_host=#YOUR HOST
  20. export ftp_url="ftp://$ftp_host/"
  21. export curlftp="curl --ftp-create-dirs -v -u $ftp_user:$ftp_password"
  22.  
  23. export PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
  24.  
  25. umask 022
  26.  
  27. export DEBIAN_FRONTEND=noninteractive
  28. if [ ! -e /usr/bin/lzop ]; then
  29. apt-get --force-yes -y install lzop
  30. fi
  31.  
  32. if [ ! -e /usr/bin/parallel ]; then
  33. apt-get --force-yes -y install parallel
  34. fi
  35.  
  36. if [ ! -e /usr/bin/ncftpput ]; then
  37. apt-get --force-yes -y install ncftp
  38. fi
  39.  
  40.  
  41. function check_port() {
  42. host=$1;
  43. port=$2
  44. timeout 1 bash -c "cat < /dev/null > /dev/tcp/$host/$port"
  45. if [[ $? -ne 0 ]]; then
  46. echo "Cant connect to port $host:$port"
  47. return 1
  48. fi
  49. echo "Successfully connected to $port on $host"
  50. return 0
  51. }
  52. export -f check_port
  53.  
  54. function backup_mysql() {
  55. host="$1"
  56. user="$2"
  57. password="$3"
  58. connect_opts=" -u $user --password=$password -h $host"
  59. # set -o xtrace
  60. # mysql_running tells us the number of mysql processes running
  61. # mysql_status tells us the exit number of the mysql_running command
  62. if [ ! -e /usr/bin/mysqldump ] ; then
  63. return
  64. fi
  65. echo "is mysql running?"
  66. check_port $host 3306 || return
  67.  
  68. # Host must be up - back it up
  69. echo `date`
  70. echo "Backup mysql on $host.zeald.com"
  71. #make sure directory exists
  72. ncftp -u $ftp_user -p $ftp_password $ftp_host<<EOF
  73. mkdir $host
  74. EOF
  75.  
  76. for db in `mysql $connect_opts -e "SHOW DATABASES" --skip-column-names`;
  77. do
  78. if [[ "$db" == "mysql" ]]; then
  79. continue
  80. fi
  81. if [[ "$db" == "information_schema" ]]; then
  82. continue
  83. fi
  84. if [[ "$db" == "performance_schema" ]]; then
  85. continue
  86. fi
  87. echo "Backing up $db";
  88.  
  89. db_replaced="${db/shop_/}"
  90. firstletter=${db_replaced:0:1}
  91. #make sure directory exists
  92. ncftp -u $ftp_user -p $ftp_password $ftp_host<<EOF
  93. mkdir $host/$firstletter
  94. EOF
  95.  
  96. ignore=""
  97. for i in $mysql_large_tables; do
  98. ignore="$ignore --ignore-table=$db.$i"
  99. done
  100.  
  101. date
  102. echo "$mysqldump $db $ignore | lzop | ncftpput -c $ftp_host $host/$firstletter/db-$host-$db-mysql-$(date +%d).sql.lzo"
  103. $mysqldump $connect_opts $db $ignore | lzop | ncftpput -c -u $ftp_user -p $ftp_password $ftp_host $host/$firstletter/db-$host-$db-mysql-$(date +%d).sql.lzo
  104.  
  105. # Check what happened - did the backup successfully run? If not, email $email
  106. if [ $? != 0 ]; then
  107. # Mail the administrator
  108. echo "Sending email to $email"
  109. mail_text="While backing up MySQL $db on $host.zeald.com, something went wrong with backup (1)"
  110. echo "$mail_text" | mail $email -s "Backup failure!"
  111. echo "Failed backing up mysql db's on $host!"
  112. #continue
  113. fi
  114.  
  115. #backup the large tables
  116. for table in $mysql_large_tables; do
  117. echo "$mysqldump $db $table | lzop | ncftpput -c $ftp_host $host/$firstletter/db-$host-$db-mysql-largetable-$table.sql.lzo"
  118. $mysqldump $connect_opts $db $table | lzop | ncftpput -c -u $ftp_user -p $ftp_password $ftp_host $host/$firstletter/db-$host-$db-mysql-largetable-$table.sql.lzo
  119. done
  120.  
  121. done
  122. }
  123. export -f backup_mysql
  124.  
  125. function backup_ldap() {
  126. host="$1"
  127. echo "Check if ldap is running on $host";
  128. check_port $host 636 || return
  129. echo "Backup ldap on $host"
  130. #make sure directory exists
  131. ncftp -u $ftp_user -p $ftp_password $ftp_host<<EOF
  132. mkdir $host
  133. EOF
  134.  
  135.  
  136. $ldap_dumpall | lzop | ncftpput -c -u $ftp_user -p $ftp_password $ftp_host $host/db-$host-ldap-$(date +%d).ldif.lzo
  137. if [ $? != 0 ]; then
  138. echo "Failed backing up ldap dbs on $host"
  139. return
  140. fi
  141. }
  142. export -f backup_ldap
  143.  
  144. function backup_postgres() {
  145. host="$1"
  146. echo "Check if postgresql is running on $host";
  147. check_port $host 5432 || return
  148. echo "Backup postgres on $host"
  149. #make sure directory exists
  150. ncftp -u $ftp_user -p $ftp_password $ftp_host<<EOF
  151. mkdir $host
  152. EOF
  153.  
  154.  
  155. #String to append to the name of the backup files
  156. #Numbers of days you want to keep copie of your databases
  157. number_of_days=30
  158. databases=` su postgres -c "psql -l -t | cut -d'|' -f1 | sed -e 's/ //g' -e '/^$/d'"`
  159. for i in $databases; do
  160. if [ "$i" != "template0" ] && [ "$i" != "template1" ]; then
  161. echo Dumping $i to $backup_dir$i\_$backup_date
  162. echo " pg_dump -Fc $i | lzop | ncftpput -c -u $ftp_user -p $ftp_password $ftp_host $host/db-$host-postgres-$(date +%d).sql.lzo"
  163. su postgres -c "pg_dump -Fc $i" | lzop | ncftpput -c -u $ftp_user -p $ftp_password $ftp_host $host/db-$host-postgres-$(date +%d).sql.lzo
  164. fi
  165. done
  166. }
  167. export -f backup_postgres
  168.  
  169. function backup_server {
  170. server=$1
  171. echo "Backup process for $server beginning : Check what databases are running and back them up"
  172. backup_ldap $server
  173. backup_postgres $server zeald
  174. backup_mysql $server zeald pq27_zTl
  175. echo "Backed up $server";
  176. }
  177. export -f backup_server
  178.  
  179.  
  180. date
  181. #Delete any old backups
  182. servers=`hostname`
  183.  
  184. if [ -e /usr/local/bin/zeald_cluster_manager ]; then
  185. echo 'Found zeald_cluster_manager'
  186. DO_BACKUP_POD=`/usr/local/bin/zeald_cluster_manager is-resource-minder mysql`;
  187. if [[ $DO_BACKUP_POD -eq 1 ]]; then
  188. echo "Is Master : check dbs for this pod"
  189. zest_db_servers=`perl <<'EOF'
  190. use lib '/opt/platform/interchange_hosting';
  191. use lib '../interchange_hosting';
  192. use Data::Dumper;
  193. require ZealdCluster;
  194. require ZealdUtil;
  195. use List::MoreUtils qw(uniq);
  196. use List::Util qw/shuffle/;
  197. my @servers;
  198. #Backup the cluster nfs resources
  199. my $api = ZealdCluster->new();
  200. my $resources = $api->get_cluster_resources($api->{cluster_id}, 'mysql');
  201.  
  202. foreach my $resource (@$resources) {
  203. push @servers, $resource->{details};
  204. }
  205. print join " ", shuffle uniq @servers;
  206. EOF`
  207. servers="$servers $zest_db_servers"
  208. fi
  209.  
  210. fi
  211. echo "Servers:"
  212. echo $servers
  213.  
  214. #Get a lock on this backup
  215. lockfile="/var/run/zeald-remote-backup-$server"
  216.  
  217. if ( set -o noclobber; echo "$$" > "$lockfile") 2> /dev/null;
  218. then
  219. trap 'rm -f "$lockfile"; exit $?' INT TERM EXIT
  220. for server in $servers; do
  221. echo "Starting backup for $server"
  222. sem -u -j4 "backup_server $server"
  223. # backup_server $server
  224. done
  225. sem --wait; echo sem --wait done
  226. rm -f "$lockfile"
  227. trap - INT TERM EXIT
  228. else
  229. echo "Failed to acquire lockfile: $lockfile."
  230. echo "Held by $(cat $lockfile)"
  231. fi
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement