#创建一个名为backup的用户来备份数据
create user "backup"@"localhost" identified by "123.com";
#授权给backup用户管理要备份的数据库的权限
mysql> grant all on lz.* to "backup"@"localhost";

分库

#!/bin/bash
#记录当时备份的时间
DATE=$(date +%F_%H-%M-%S)
#备份的主机,用户,密码以及备份到哪个目录下
HOST=localhost
USER=backup
PASS=123.com
#创建要备份数据库所存放的目录
BACKUP_DIR=/data/db_backup
#egrep表示过滤掉不备份的库
#遍历要备份的数据库
DB_LIST=$(mysql -h$HOST -u$USER -p$PASS -s -e "show databases;" 2>/dev/null |egrep -v "Database|information_schema|mysql|performance_schema|sys")
#循环遍历的数据库
for DB in $DB_LIST; do
#备份到/data/db_backup这个目录下,起名格式为(备份的数据库的名字加上备份的时间.sql)
BACKUP_NAME=$BACKUP_DIR/${DB}_${DATE}.sql
#判断导出的数据库是否正常,如果不正常(也就是非0),那么发送告警邮件
if ! mysqldump -h$HOST -u$USER -p$PASS -B $DB > $BACKUP_NAME 2>/dev/null; then
echo "$BACKUP_NAME 备份失败!"
fi
done

分表:

#!/bin/bash
#记录当时备份的时间
DATE=$(date +%F_%H-%M-%S)
#备份的主机,用户,密码以及备份到哪个目录下
HOST=localhost
USER=backup
PASS=123.com
#创建要备份数据库所存放的目录
BACKUP_DIR=/data/db_backup
#egrep表示过滤掉不备份的库
#遍历要备份的数据库
DB_LIST=$(mysql -h$HOST -u$USER -p$PASS -s -e "show databases;" 2>/dev/null |egrep -v "Database|information_schema|mysql|performance_schema|sys")
#循环遍历的数据库
for DB in $DB_LIST; do
#在/data/db_backup这个目录下为要备份的数据库创建一个目录,名字格式为(备份的数据库名字加上备份的日期)
BACKUP_DB_DIR=$BACKUP_DIR/${DB}_${DATE}
#判断/data/db_backup这个目录下有没有要备份的数据库的目录,如果没有那就创建要备份的数据库目录
[ ! -d $BACKUP_DB_DIR ] && mkdir -p $BACKUP_DB_DIR &>/dev/null
#查看要备份的数据库下的所有表
TABLE_LIST=$(mysql -h$HOST -u$USER -p$PASS -s -e "use $DB;show tables;" 2>/dev/null)
#循环遍历要备份的数据库下的所有表
for TABLE in $TABLE_LIST; do
#备份到/data/db_backup这个目录下的数据库的目录下,起名格式为( 备份表的名字.sql)
BACKUP_NAME=$BACKUP_DB_DIR/${TABLE}.sql
#判断导出的数据表是否正常,如果不正常(也就是非0),那么发送告警邮件
if ! mysqldump -h$HOST -u$USER -p$PASS $DB $TABLE > $BACKUP_NAME 2>/dev/null; then
echo "$BACKUP_NAME 备份失败!"
fi
done
done

crontab -e
#每三天的第一个小时第一分钟执行一次分库的备份
1 1 */3 * * /bin/bash /root/12.sh >/dev/null 2>&1 &
#每12个小时的第五分钟执行一次分表的备份
5 */12 * * * /bin/bash /root/12-1.sh >/dev/null 2>&1 &
分  时  日  月  周  命令
第1列表示分钟1~59 每分钟用*或者 */1表示
第2列表示小时1~23(0表示0点)
第3列表示日期1~31
第4列表示月份1~12
第5列标识号星期0~6(0表示星期天)
第6列要运行的命令