summaryrefslogtreecommitdiff
path: root/mysql/dump-all-to-homes.sh
blob: 302129337746e63f8dbbc6afac89958158174435 (plain)
  1. #!/bin/sh
  2. #
  3. # /etc/postgresql/dump-all-to-homes.sh
  4. # Copyright 2003 Jonas Smedegaard <dr@jones.dk>
  5. #
  6. # $Id: dump-all-to-homes.sh,v 1.1 2003-03-05 05:57:01 jonas Exp $
  7. #
  8. # Dump contents of all local Postgres databases to the homes of those
  9. # with access to them.
  10. #
  11. # TODO: Rewrite to run as each normal user
  12. if [ -f /root/.my.cnf ]; then
  13. rootpass=$(grep password /root/.my.cnf | awk -F= '{print $2}' | head -1 | sed 's/^ //g')
  14. fi
  15. users=$(echo "select user from user where host = 'localhost';" | mysql --user=root -p$rootpass mysql | grep -vi '^user$' | sort -u)
  16. for user in $users; do
  17. getent passwd $user | awk -F: '{print $6}' | grep -q "^/home/$user$" || continue
  18. if [ -d /home/$user ]; then
  19. if [ -d "/home/$user/mysql_dump" ]; then
  20. if [ ! -O "/home/$user/mysql_dump" ]; then
  21. echo "ERROR: Wrong permissions for /home/$user/mysql_dump"
  22. exit 1
  23. fi
  24. chgrp "$user" "/home/$user/mysql_dump"
  25. else
  26. install -d -o root -g "$user" -m 0750 "/home/$user/mysql_dump"
  27. fi
  28. else
  29. echo "ERROR: Directory /home/$user doesn't exist"
  30. exit 1
  31. fi
  32. databases=$(echo "select db from db where host = 'localhost' and user = '$user' and select_priv = 'Y';" | mysql --user=root -p$rootpass mysql | grep -vi '^db$' | sed 's/%$//g' | sort -u)
  33. for database in $databases; do
  34. #TODO: Check againt `echo "show databases" | mysql -uroot -p$rootpass | grep -vi '^Database$';`
  35. if [ -f /home/$user/mysql_dump/$database ]; then
  36. mv /home/$user/mysql_dump/$database /home/$user/mysql_dump/$database.bak
  37. fi
  38. mysqldump -c --add-drop-table -uroot -p$rootpass "$database" > "/home/$user/mysql_dump/$database"
  39. chmod 0640 "/home/$user/mysql_dump/$database"
  40. chgrp $user "/home/$user/mysql_dump/$database"
  41. done
  42. done