mysql数据库备份及导入脚本

总是忘记备份数据库,所以写了一个脚本来备份。

按提示设置相应的数据库选项和备份文件存放地即可。

#!/bin/bash
#获取当前时间
TODAY=$(date "+%Y%m%d_%H%M")
#定义备份文件目录
BACK_FOLDER="/mnt/db_back"
#数据库信息设置
HOST="localhost"
USRENAME="root"
PASSWORD="root"
DATABASE="test"

#定义备份文件名
FILE_NAME="${DATABASE}_${TODAY}.sql"
BACK_FILENAME="${BACK_FOLDER}/${FILE_NAME}"

#排除的数据表
EXCLUDED_TABLES=(
db_log
)
IGNORED_TABLES_STRING=''
for TABLE in "${EXCLUDED_TABLES[@]}"
do :
   IGNORED_TABLES_STRING+=" --ignore-table=${DATABASE}.${TABLE}"
done

#执行备份
/usr/bin/mysqldump -h${HOST} -u${USRENAME} -p${PASSWORD} --default-character-set=utf8 --set-gtid-purged=off ${IGNORED_TABLES_STRING} ${DATABASE} > ${BACK_FILENAME}

#压缩备份文件并删除源文件
cd ${BACK_FOLDER}
tar -zcf ${FILE_NAME}.tar.gz ${FILE_NAME} --remove-files

# 删除超时的跟压缩的文件
BEFORE=$(date -d"15 day ago" +%Y%m%d_%H%M)
rm -f "${DATABASE}_${BEFORE}.sql.tar.gz";

echo "finish BACK mysql database ${DATABASE}."

你也可以选择合适的备份方式,来随意修改。

使用客户端导入

/usr/bin/mysql -h${TARGET_HOST} -u${TARGET_USERNAME} -p${TARGET_PASSWORD} --default-character-set=utf8 --init-command="SET SESSION autocommit=0; SET SESSION sql_log_bin=0;"  ${TARGET_DATABASE} < ${TMP_BACK_FILENAME}

注:使用 --init-command 参数某些导入会报权限错误,将该参数移除即可

Author: thinkwei

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注