总是忘记备份数据库,所以写了一个脚本来备份。
按提示设置相应的数据库选项和备份文件存放地即可。
#!/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
参数某些导入会报权限错误,将该参数移除即可