1、mysql备份指定的数据库脚本:
cat fileBackupsScript.sh
#!/bin/sh
#db_backups_conf.txt文件路径
db_backups_conf="/usr/mysqldump/db_backups_conf.txt"
#判断文件是否存在
if [ -f "${db_backups_conf}" ];then
echo $(date +'%Y-%m-%d %H:%M:%S')" 数据库配置信息文件存在,开始进行数据备份"
#获取等号前内容,作为map中的Key值
dbArrOne=($(awk -F'[=]' '{print $1}' ${db_backups_conf} ))
#获取等号后内容,作为map中的value值
dbArrTwo=($(awk -F'[=]' '{print $2}' ${db_backups_conf}))
#创建一个空map
declare -A map=()
#通过循环,将db_backups_conf配置文件中的信息存储在map中
for((i=0;i<${#dbArrOne[@]};i++))
do
map[${dbArrOne[i]}]=${dbArrTwo[i]}
done
#获取备份数据库的字符串
copyDb=${map["copydb"]}
#获取默认的字符串分隔符
old_ifs="$IFS"
#设置字符串分隔符为逗号
IFS=","
#将备份数据库value值的字符串进行分隔,获取一个数组
dbArr=($copyDb)
#将字符串的分隔符重新设置为默认的分隔符
IFS="$old_ifs"
#获取当前年月日
saveday=$(date +%Y%m%d)
#获取超出备份天数的年月日
delday=$(date -d ${map["backupsFileDay"]}' days ago' +%Y%m%d)
#遍历要备份的数据库,删除两天前备份的数据文件
for delDb in ${dbArr[@]};
do
echo $(date +'%Y-%m-%d %H:%M:%S')" 删除文件:"${map["backupsFileStr"]}/${delDb}_database_${delday}.sql
rm -f ${map["backupsFileStr"]}/${delDb}_database_${delday}.sql
done
#遍历要备份的数据库,备份数据文件
for saveDb in ${dbArr[@]};
do
echo $(date +'%Y-%m-%d %H:%M:%S')" 备份数据库:"${saveDb}
${map["mysqldumpStr"]} -u${map["username"]} -p${map["password"]} --set-gtid-purged=off --default-parallelism=${map["threadCounts"]} -B ${saveDb} > ${map["backupsFileStr"]}/${saveDb}_database_${saveday}.sql
done
echo $(date +'%Y-%m-%d %H:%M:%S')" 数据备份完毕,脚本执行完毕"
else
echo "文件不存在"
fi
cat db_backups_conf.txt
username=root
password=xxxxx
backupsFileStr=/data/mysqldump/mysql
backupsFileDay=7
threadCounts=6
mysqldumpStr=/usr/mysqldata/bin/mysqlpump
copydb=db1,db2,db3
定时任务crontab每天凌晨1点执行即可:
0 1 * * * sh /usr/mysqldata/fileBackupsScript.sh
2、从记录执行sql语句日志中过滤出执行过的所有sql语句:注:此日志需要开启general才有记录,一般不建议开启
cat getallexecsql.sh
#/bin/bash
cat /usr/mysql/mysqldata/log/general.log | grep "08:00" |awk '{print substr($0, 46)}' | grep -v "^t" | grep -v "^/" > /usr/mysql/mysqldata/log/execute-sql.log
定时任务crontab每天凌晨1点执行即可:
0 1 * * * sh /usr/local/getallexecsql.sh
3、打开慢查询日志可能会对系统性能有一点点影响,如果你的MySQL是主从结构,可以考虑打开其中一台从服务器的慢查询日志,这样既可以监控慢查询,对系统性能影响也会很小。另外,可以用MySQL自带的命令mysqldumpslow进行查询。比如:下面的命令可以查出访问次数最多的20个SQL语句:
mysqldumpslow -s c -t 20 host-slow.log
4、备份参数注意:
使用--default-parallelism参数时,并行备份和--single-transaction冲突,不能同时使用,使用时,需要通过设置--default-parallelism=0来关闭并行备份。
持续更新。。。。。。