shell脚本备份与还原mysql

用到的命令

  1. 定时任务: 设置:crontab -e 查看 crontab -l 删除全部:crontab -r(警惕)
    在这里插入图片描述

  2. 脚本检测 bash -n xxx.sh || sh -n xxx.sh

  3. 脚本跟踪调试 bash -vx xxx.sh || sh -vx xxx.sh

  4. 脚本执行 bash xxx.sh || sh xxx.sh

  5. 执行sql脚本
    1、 进入命令行
    mysql –u用户名 –p密码 –D数据库< sql脚本路径
    示例:mysql –uroot –p123456 -Ddbname < /home/data/mysqldump.sql
    注意:
    如果在sql脚本文件中使用了use 数据库,则-D数据库选项可以忽略

    2、进入mysql的控制台后,使用source命令执行
    mysql>source sql脚本路径 或 mysql>. sql脚本路径
    示例:source /home/data/mysqldump.sql

配置scp无密码
1、A: ssh-keygen -t rsa 生成id_rsa 和 id_rsa.pub
2、cp复制:id_rsa.pub ==》id_rsa.pub.A
3、 B: ssh-keygen -t rsa 生成id_rsa 和 id_rsa.pub,再看是否有authorized_keys文件,若没有则新增
4、A: scp ./id_rsa.pub.A 用户名@B.ip:/root/.ssh(步骤3生成的地方 目录)
5、 追加id_rsa.pub.A至 authorized_keys 文件中:cat id_rsa.pub.A >> authorized_keys

–ignore-table=dbname.tablename : 备份时忽略某张表
-
例如:mysqldump --skip-opt -q -uroot -P3306 -p123456 --default-character-set=utf8mb4 库名 --ignore-table=库名.表名1 --ignore-table=库名.表名2 > /opt/community-platformdate -d now +%Y%m%d.sql

正式环境脚本

#备份数据

#!/bin/bash

#mysql容器名称
MYSQL_CONTAINER="" #docker容器名称

backUpDir='/opt/' #保存路径

logpath='/home/date/log/' #日志备份路径 
backtime=`date +%Y%m%d%H%M%S` #备份时间
#查看日志目录
if [ ! -d  "$logpath" ]; then
mkdir -p "$logpath"
fi
#查看备份目录
if [ ! -d  "$backUpDir" ]; then
mkdir -p "$backUpDir"
fi

#日志记录头部
echo ‘”备份时间为${backtime},备份数据库${dbname} 开始” >> ${logpath}/dump.log
#正式备份数据库
docker exec -i ${MYSQL_CONTAINER} bash<<'EOF'
PORT="3306" #端口
USERNAME="" #用户名
PASSWORD="" #密码
dbname="" #数据库名称

#备份数据库
mysqldump --skip-opt -q -u${USERNAME} -p${PASSWORD} --default-character-set=utf8mb4 community-platform > /opt/community-platform`date -d now +%Y%m%d`.sql

#docker删除备份文件
rm -rf /opt/community-platform`date -d -1day +%Y%m%d`.sql
exit
EOF
echo “数据库 ${dbname} 备份成功!!>> ${logpath}/dump.log
docker cp ${MYSQL_CONTAINER}:/opt/community-platform`date -d now +%Y%m%d`.sql /home/data/
#复制数据(7天前)
scp -r /home/data/community-platform`date -d -7day +%Y%m%d`.sql root@接收服务器ip:/home/data
#当天的
#scp -r /home/data/community-platform`date -d now +%Y%m%d`.sql root@ip:/home/data

#删除7天前的数据  备份的sql
rm -f /home/data/community-platform`date -d -7day +%Y%m%d`.sql

预发布服务器脚本


#恢复数据

#!/bin/bash

MYSQL_CONTAINER="" #mysql容器

#DATE=`date -d -7day +%Y%m%d`
DATE=`date -d now +%Y%m%d`

#复制文件至docker容器里
docker cp /home/data/community-platform${DATE}.sql ${MYSQL_CONTAINER}:/opt/community-platform${DATE}.sql
#执行恢复命令
docker exec -i ${MYSQL_CONTAINER} bash<<'EOF'

PORT="3306" #端口
USERNAME="" #用户名
PASSWORD="" #密码
DBNAME="" #数据库名称
DATE2=`date -d -7day +%Y%m%d`
#DATE2=`date -d now +%Y%m%d`

#先删除前一天的数据库
#mysql -u${USERNAME} -p${PASSWORD} -e "drop database `community-platform-uat`;"(反引号引起的执行失败问题 暂未解决)
#在docker里面写sql,docker cp 复制到docker 直接调用  drop database ``;
mysql -u${USERNAME} -p${PASSWORD} < /opt/dropdatabase.sql

#创建新的数据库
#mysql -u${USERNAME} -p${PASSWORD} -e "create database `community-platform-uat` character set utf8mb4;"
#create database `` character set utf8mb4;   注意字符集 (中文乱码)
mysql -u${USERNAME} -p${PASSWORD} < /opt/createdatabase.sql

#mysql -u${USERNAME} -p${PASSWORD}
#drop database `community-platform-uat`;
#create database `community-platform-uat` character set utf8mb4;
#use community-platform-uat
#source /opt/community-platform${DATE2}.sql
#exit
(直接exit退出了。。。)

mysql -u${USERNAME} -p${PASSWORD} --default-character-set=utf8mb4 community-platform-uat < /opt/community-platform${DATE2}.sql

#docker删除备份文件
rm -rf /opt/community-platform`date -d -7day +%Y%m%d`.sql
exit
EOF
#删除sql脚本
rm -f /home/data/community-platform`date -d -8day +%Y%m%d`.sql

exit

在这里插入图片描述
在这里插入图片描述

mysql没在docker中版本

#恢复数据
  
#!/bin/bash

HOSTNAME="" #数据库信息

PORT=""

USERNAME=""

PASSWORD=""

DBNAME="" #数据库名称

#先删除前一天的数据库  ( 存在数据库名反引号问题)

mysql -h${HOSTNAME} -P${PORT} -u${USERNAME} -p${PASSWORD} -e "drop database $DBNAME;"

#创建新的数据库   (存在数据库名反引号问题)

mysql -h${HOSTNAME} -P${PORT} -u${USERNAME} -p${PASSWORD} -e "create database $DBNAME character set utf8mb4;"

#DATE=`date -d -6day +%Y%m%d`
DATE=`date -d now +%Y%m%d`

#执行恢复命令

mysql -u${USERNAME} -p${PASSWORD} community-platform <<EOF

source /home/backup/mysql/scp/community-platform${DATE}.sql;

EOF

#删除sql脚本
#rm -f /home/backup/mysql/scp/community${DATE}.sql

exit;
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值