linux自动备份mysql数据库

备份脚本记录一下--(单个数据库)

2021-11-15

1.新建shell脚本:vim **.sh

#!/bin/bashCKUP=/data/backup/db

#获取当前时间
DATETIME=$(date +%Y_%m_%d_%H%M%S)
#可以输出变量调试
echo $DATETIME

echo "========开始备份========="
echo "========备份路径 $BACKUP/$DATETIME.tar.gz========="

#主机
HOST=localhost

#用户名
DB_USER=root

#密码
DB_PASSWOLD=123456

#备份数据库名
DATABASE=aeaicrm

#创建备份路径,如果存在就使用,否则就创建
[ ! -d "$BACKUP/$DATETIME" ] && mkdir -p "$BACKUP/$DATETIME"

#执行MySQL的备份数据库指令
mysqldump $DATABASE | gzip > $BACKUP/$DATETIME/$DATETIME.sql.gz

#打包备份文件
cd $BACKUP
tar -zcvf $DATETIME.tar.gz $DATETIME

#删除临时文件
rm -rf $BACKUP/$DATETIME

#删除十天前的备份文件/【-exec rm -rf {} \;】--删除找到的文件
find $BACKUP -mtime +7 -name "*.tar.gz" -exec rm -rf {} \;

echo "=========备份文件成功========="

2. 创建任务计划:

crontab -e 

 

 3.问题记录

我的报错信息:

 

 解决:

修改配置文件my.cnf

添加:

[mysqldump]

User=root

Password=mypassword

保存退出.

Shell脚本不指定用户名跟密码:

 

 

 

可能有更好的解决办法....

 

更新shell脚本---------------(多个数据库)

2022-03-16

#!/bin/bash
#MySQL用户
user=test
#MySQL密码
userPWD=youpassword
# 需要定时备份的数据表列表
dbNames=(aeaicrm activiti chronicdisease lis oa)
# 每次的备份数据以日期创建文件夹存放,同时删除过期备份
# 此处以保留1个月的备份数据为例
DATE=`date -d "now" +%Y%m%d%H`
ODATE=`date -d "-1 month" +%Y%m%d%H`
newdir=/home/backup_mysql/$DATE
olddir=/home/backup_mysql/$ODATE
# 删除过期备份数据
if [ -d $olddir ];
  then
    rm -rf $olddir
fi
# 创建新备份文件夹
mkdir $newdir
# 对备份数据库列表的所有数据库备份
for dbName in ${dbNames[*]}
do
  dumpFile=$dbName-$DATE.sql.gz
  mysqldump -u$user -p$userPWD $dbName | gzip > $newdir/$dumpFile
done

 

 

==============================分割线==========================================

mysqldump相关:

1.备份数据库

#mysqldump --opt -d 数据库名 -u root -p > xxx.sql

#mysqldump DB_NAME >数据库备份名

#mysqldump -A -uUSER_NAME -pPASSWORD DB_NAME>数据库备份名

#mysqldump -d -A --add-drop-table -uroot -p >xxx.sql

2.导出结构不导出数据

mysqldump --opt -d 数据库名 -u root -p > xxx.sql

3.导出数据不导出结构

mysqldump -t 数据库名 -uroot -p > xxx.sql

4.导出数据和表结构

mysqldump  -uroot -p 数据库名 > xxx.sql

5.导出特定表的结构

mysqldump -uroot -p -B 数据库名 --table 表名 > xxx.sql

6.导入数据

mysqldump导出的是完整的SQL语句,所以用mysql客户程序就能把数据导入.

#mysql 数据库名 < 文件名

或者

#source /tmp/xxx.sql

 

posted @ 2021-11-15 11:32  少年Dev  阅读(380)  评论(0编辑  收藏  举报