Advertisement
Guest User

Untitled

a guest
Feb 21st, 2017
60
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.51 KB | None | 0 0
  1. #!/bin/sh
  2.  
  3. SCRIPT_NAME=`basename $0 | sed -e "s/\.sh$//"`
  4. [ -z "${TMP_DIR}" ] && TMP_DIR="/tmp"
  5. TMP_FILE="${TMP_DIR}/${SCRIPT_NAME}.tmp.$$"
  6.  
  7. [ -z "${LOG_DIR}" ] && LOG_DIR="/opt/pythian/log"
  8. [ ! -d "${LOG_DIR}" ] && echo "ERROR: Log directory '${LOG_DIR}' is not accessible." && exit 1
  9.  
  10. [ -z "${SCHEMA}" ] && SCHEMA="test"
  11. [ -z "${SOURCE_ENGINE}" ] && SOURCE_ENGINE="InnoDB"
  12.  
  13. generate_foreign_keys() {
  14. local FILE=$1
  15.  
  16. [ -z "${FILE}" ] && echo "INTERNAL ERROR: No file passed" && exit 1
  17.  
  18. echo "Generating foreign keys in '${SCHEMA}'"
  19. mysql -N -u${MYSQL_USER} -p${MYSQL_PWD} -e "SELECT CONCAT('ALTER TABLE ',table_schema,'.',table_name,' DROP FOREIGN KEY ',constraint_name,';') FROM information_schema.table_constraints WHERE CONSTRAINT_TYPE = 'FOREIGN KEY' AND CONSTRAINT_SCHEMA=DATABASE();" ${SCHEMA} > ${FILE}
  20. RC=$?
  21. [ ${RC} -ne 0 ] && echo "ERROR: select of foreign keys failed" && exit ${RC}
  22.  
  23. return 0
  24. }
  25.  
  26. drop_foreign_keys() {
  27. local FILE=$1
  28.  
  29. [ -z "${FILE}" ] && echo "INTERNAL ERROR: No file passed" && exit 1
  30.  
  31. echo "Dropping foreign keys in '${SCHEMA}' with '${FILE}'"
  32. mysql -vvv -u${MYSQL_USER} -p${MYSQL_PWD} ${SCHEMA} < ${FILE}
  33. RC=$?
  34. [ ${RC} -ne 0 ] && echo "ERROR: drop of foreign keys failed" && exit ${RC}
  35.  
  36. return 0
  37.  
  38. }
  39.  
  40. alter_tables() {
  41. local FILE=$1
  42.  
  43. [ -z "${FILE}" ] && echo "INTERNAL ERROR: No file passed" && exit 1
  44.  
  45. mysql -N -u${MYSQL_USER} -p${MYSQL_PWD} -e "SELECT CONCAT('SELECT NOW();ALTER TABLE ',TABLE_NAME,' ENGINE=TokuDB;') FROM information_schema.TABLES WHERE TABLE_SCHEMA = DATABASE() AND engine = '${SOURCE_ENGINE}'" ${SCHEMA} > ${FILE}
  46. RC=$?
  47. [ ${RC} -ne 0 ] && echo "ERROR: Unable to generate alter file for '${SOURCE_ENGINE}' tables" && exit ${RC}
  48.  
  49. time mysql -vvv -u$MYSQL_USER -p$MYSQL_PWD ${SCHEMA} < ${FILE}
  50. RC=$?
  51. [ ${RC} -ne 0 ] && echo "ERROR: Alter of tables failed" && exit ${RC}
  52.  
  53. return 0
  54. }
  55.  
  56. # Ensure environment variables to access MySQL environment via script are defined
  57. [ -z "${MYSQL_USER}" -o -z "${MYSQL_PWD}" ] && echo "ERROR: MySQL credentials are not defined" && exit 2
  58.  
  59. # Generate the foreign keys that are to be dropped
  60. FK_FILE="${LOG_DIR}/drop_foreign_keys.pre.sql"
  61. generate_foreign_keys ${FK_FILE}
  62. [ -s "${FK_FILE}" ] && drop_foreign_keys ${FK_FILE}
  63.  
  64. # Verify there are no foreign keys left
  65. FK_FILE="${LOG_DIR}/drop_foreign_keys.post.sql"
  66. generate_foreign_keys ${FK_FILE}
  67. [ -s "${FK_FILE}" ] && echo "ERROR: foreign keys remain in '${FK_FILE}'" && exit 1
  68. echo "All foreign keys for Schema ${SCHEMA} removed"
  69.  
  70. ALTER_FILE="${LOG_DIR}/alter.sql"
  71. alter_tables ${ALTER_FILE}
  72.  
  73. exit 0
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement