作为一个DBA,日常备份数据库,是必不可少的,不会不要紧,以下脚本让你高枕无忧,轻松入门!
自动备份的脚本
###变量相关
data="zabbix"
user="root"
pwd="Zabbix@123"
backuppath="/winshare/backup"
###变量相关
sql="
SELECT
table_schema AS '数据库',
sum( table_rows ) AS '记录数',
sum( TRUNCATE ( data_length / 1024 / 1024, 2 ) ) AS '数据容量(MB)',
sum( TRUNCATE ( index_length / 1024 / 1024, 2 ) ) AS '索引容量(MB)'
FROM
information_schema.TABLES WHERE table_schema='${data}'
GROUP BY
table_schema
ORDER BY
sum( data_length ) DESC,
sum( index_length ) DESC;
"
datasize=`mysql -u"${user}" -p"${pwd}" -e "${sql}" -N|awk '{print $3"+"$4}'|bc`
#mysqladmin -uroot -pZabbix@123 processlist 显示当前进程
#mysqlshow -uroot -pZabbix@123 ${data} --count 统计数据
if [[ -z $datasize ]]; then
echo "找不到数据库"
exit
fi
echo "数据库${data}共${datasize}M"
#开启mysql 日志
#mysql -uroot -pZabbix@123 -e "set global general_log=on;show global variables like '%general%';"
mysql -u"${user}" -p"${pwd}" -e "${sql}"
des="${backuppath}/$(date +%F)"
if [[ ! -d $des ]];then
mkdir -p $des
fi
if [[ $? -ne 0 ]]; then
echo "${backuppath}该备份路径无法访问"
fi
mysqldump -u"${user}" -p"${pwd}" "${data}" -B > "$des/$data.sql"
脚本里的设置
data="zabbix" ###这里设置你要备份的数据库
user="root" ###这里设置你的mysql用户名
pwd="Zabbix@123" ###这里设置你的用户密码
backuppath="/winshare/backup" ###这里设置你要备份的路径!
以上是备份的自动脚本,接下来我们设置按计划明天自动备份,先上配置文件schtasks.ini
[Interval time]
minute=
hour=13,23
day=1-30
month=
week=
[task]
command= sh /root/下载/mysql/mysqldatabackup.sh
以上的内容是每个月的1到30号在13:00,23:00自动备份
执行的备份命令路径是 sh /root/下载/mysql/mysqldatabackup.sh
建立计划的shell代码如下
#读取配置文件
array=("minute" "hour" "day" "month" "week")
plan=""
for (( i = 0; i < ${#array[@]}; i++ )); do
times[$i]=$(cat ./schtasks.ini|grep -Po "(?<=${array[$i]}\=).*")
if [[ ! -z ${times[$i]} ]]; then
plan+=" "${times[$i]}
else
plan+=' n'
fi
done
cmd=`cat ./schtasks.ini|grep -Po "(?<=command\=).*"`
# 先备份以前的计划
crontab -l|grep -v "${cmd}" >plan$
echo ${plan}|tr -t [n] [\*]|xargs -i echo {} $cmd >>plan$
crontab plan$
crontab -l
恢复数据库的脚本如下
###变量相关
data="zabbix"
user="root"
pwd="Zabbix@123"
backupfile="/winshare/backup/2024-08-11/zabbix.sql"
###变量相关
if [[ ! -e ${backupfile} ]]; then
echo "不存在该恢复文件$backupfile"
exit
fi
chmod 777 $backupfile
mysqldump -u"${user}" -p"${pwd}" "${data}" < "${backupfile}"
#mysql -uroot -p'Zabbix@123' < ./mytest.sql
其中代码
data="zabbix" ###这里设置你要恢复的数据库
user="root" ###这里设置你的mysql用户名
pwd="Zabbix@123" ###这里设置你的用户密码
backupfile="/winshare/backup/2024-08-11/zabbix.sql" ###这里设置你的备份文件路径!