1
0

mysqld_backup2 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. #!/bin/bash
  2. [ $# -ne 5 ] && exit 6
  3. DBHOST=${1}
  4. DBUSER=${2}
  5. DBPASS=${3}
  6. DATABASE=${4}
  7. BACKUP_DIR=${5}
  8. BUG=`echo "${DATABASE}" | sed 's/ //g' | grep -i "^information_schema$"`
  9. [ -n "${BUG}" ] && exit 0
  10. MDUMP=`which mysqldump`
  11. MSQL=`which mysql`
  12. [ -z "${MDUMP}" ] && exit 200
  13. [ -z "${BACKUP_DIR}" -o "${BACKUP_DIR}" == "/" ] && exit 200
  14. [ -e "${BACKUP_DIR}/${DATABASE}" ] && rm -rf "${BACKUP_DIR}/${DATABASE}"
  15. [ ! -e "${BACKUP_DIR}/${DATABASE}" ] && mkdir -p "${BACKUP_DIR}/${DATABASE}" >/dev/null
  16. BUG_26121=`${MDUMP} --help | grep skip-lock-tables`
  17. if [ -z "${BUG_26121}" ]; then
  18. FIX_26121="--lock-tables=0"
  19. else
  20. FIX_26121="--skip-lock-tables"
  21. fi
  22. use_ip=$(echo "${DBHOST}" | egrep "^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$")
  23. if [ -z "${use_ip}" ]; then
  24. OPTS="-S ${DBHOST}"
  25. else
  26. OPTS="--host=${DBHOST}"
  27. fi
  28. ${MDUMP} --user="${DBUSER}" --password="${DBPASS}" ${OPTS} "${FIX_26121}" --quick --single-transaction --routines --skip-triggers --hex-blob --no-data ${DATABASE} | sed -e 's/\/\*\![0-9][0-9]* *DEFINER[^\*]*\*\///g' > ${BACKUP_DIR}/${DATABASE}/__structure.sql
  29. [ $? -ne 0 ] && exit 101
  30. ${MDUMP} --user="${DBUSER}" --password="${DBPASS}" ${OPTS} "${FIX_26121}" --quick --single-transaction --triggers --hex-blob --no-data --skip-add-drop-table --no-create-info ${DATABASE} | sed -e 's/\/\*\![0-9][0-9]* *DEFINER[^\*]*\*\///g' > ${BACKUP_DIR}/${DATABASE}/__triggers.sql
  31. TABLE_LIST=`${MSQL} --user="${DBUSER}" --password="${DBPASS}" ${OPTS} --disable-pager -B -e "show tables;" --skip-column-names -q --silent ${DATABASE}`
  32. echo "${TABLE_LIST}" | while read TB; do
  33. [ -n "${TB}" ] && ${MDUMP} --user="${DBUSER}" --password="${DBPASS}" ${OPTS} "${FIX_26121}" --quick --skip-add-drop-table --no-create-info ${DATABASE} ${TB} >${BACKUP_DIR}/${DATABASE}/${TB}.sql
  34. done
  35. tar -czf "${BACKUP_DIR}-${DATABASE}.tgz" "${BACKUP_DIR}/${DATABASE}" >/dev/null 2>&1
  36. ret=$?
  37. rm -rf "${BACKUP_DIR}" >/dev/null
  38. exit ${ret}