#创建一个名为backup的用户来备份数据 create user "backup"@"localhost" identified by "123.com"; #授权给backup用户管理要备份的数据库的权限 mysql> grant all on lz.* to "backup"@"localhost";
分库
bash
#!/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
分表:
bash
#!/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