Advertisement
alexs77

mysql-snapshot-lock.sh

Sep 25th, 2013
121
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 1.13 KB | None | 0 0
  1. #!/bin/bash -e
  2.  
  3. FIFO="/tmp/mysql-pipe.$$"
  4. OUT="/tmp/mysql-out.$$"
  5. mkfifo ${FIFO} || exit $?
  6.  
  7. echo "Connecting to mysql-server"
  8. (mysql <${FIFO} | echo -n) &> ${OUT} &
  9. MYSQL=$!
  10.  
  11. trap "(rm -f ${FIFO} ${OUT};kill ${MYSQL} 2>&-) 1>&2" 0
  12.  
  13. echo "Flushing and locking tables"
  14. echo "FLUSH TABLES WITH READ LOCK;" > ${FIFO}
  15.  
  16. echo "Checking Table-Lock"
  17. echo "CREATE TABLE IF NOT EXISTS mysql.readlocktest (a INT NOT NULL AUTO_INCREMENT, PRIMARY KEY (a));" > ${FIFO}
  18. echo "INSERT INTO mysql.readlocktest () VALUES ();" > ${FIFO}
  19. echo "SELECTA;" > ${FIFO}
  20. for i in {1..10}; do
  21.  if [ ! -s ${OUT} ]; then
  22.   echo " Output from mysql-server not yet available"
  23.   sleep 1
  24.   echo " slept 1 seconds"
  25.   if [ $i -gt 10 ]; then
  26.    break
  27.   fi
  28.  else
  29.   break
  30.  fi
  31. done
  32. if grep "ERROR 1223 (HY000) at line .*: Can't execute the query because you have a conflicting read lock" ${OUT} > /dev/null 2>&1; then
  33.  echo " Lock in place"
  34. else
  35.  echo " Locking failed"
  36.  exit 1
  37. fi
  38.  
  39. # Now the read lock is in place an we can do our snapshot / backup /
  40. whatever
  41.  
  42. echo "Unlocking Tables"
  43. rm -f ${FIFO} ${OUT};kill ${MYSQL} 2>&-
  44. trap "" 0
  45.  
  46. exit $?
  47. # EOF
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement