码迷,mamicode.com
首页 > 数据库 > 详细

linux 通过scp 复制备份恢复mysql数据表

时间:2015-10-12 22:45:58      阅读:352      评论:0      收藏:0      [点我收藏+]

标签:

最近客户有个需求,小弟对于运维的东西也是半瓶醋,所以就果断的摸索了下。折磨了一个晚上终于算是搞定了。因为是两个不同的服务器,本来想用ftp,无奈小弟不是很熟悉,所以就用了scp,但是scp有个问题就是要输入密码才能复制,这下把小弟急坏了,那我这shell脚本咋办,

我的需求是我要每天定时导出三个表,然后通过scp复制到另外一台服务器上,再恢复这三个表的数据。

俗话说,家事找度娘,小弟就翻阅了度娘的衣柜,终于算是找到了件合身的衣服。

该文章链接是这个http://blog.csdn.net/xifeijian/article/details/19998129

为了避免链接不能用了,我就斗胆copy了,

在远程拷贝的时候,需要配置scp的 无密码 复制文件和目录。在编写Shell脚本的时候非常有用,你不希望shell脚本在执行过程中因为要检验密码被打断而报权限错误吧。

整个过程如下:

 

本地服务器:A
远程服务器:B

     

1.在 A 上运行 ssh-keygen -t rsa 在/home/openpf/.ssh下生成id_rsa 和 id_rsa.pub 两个文件,然后在/home/openpf/.ssh下复制备份一份id_rsa.pub 命名为 id_rsa.pub.A,以便拷贝到服务器B,如图所示:
技术分享

 

技术分享

2. 在 B 上也同样运行 ssh-keygen -t rsa


 3. 在 B 的/home/openpf/.ssh下创建authorized_keys文件,把A 中 id_rsa.pub.A 文件传到 B服务器/home/openpf/.ssh 下,
    通过 cat 命令 把id_rsa.pub.A 追写到 authorized_keys 文件中,命令如下:

   scp ./id_rsa.pub.A  B的IP:/home/openpf/.ssh
   cat id_rsa.pub.A  >>  authorized_keys

4.配置完毕

 测试:

    scp ./id_rsa.pub.A  10.16.133.200:/home/openpf/.ssh   无需输入密码执行成功

 

命令:

  复制文件:
 1.将本地文件拷贝到远程
       scp 文件名 用户名@计算机IP:远程路径
 2.从远程将文件拷回本地
       scp 用户名@计算机IP:文件名 本地路径


  复制目录:
  1.将本地目录拷贝到远程
        scp -r 目录名 用户名@计算机IP:远程路径
  2.从远程将目录拷回本地
        scp -r 用户名@计算机IP:目录名本地路径

以上的目录可以自己建

我的是在/root/.ssh

这样第一步scp就完成了。贴下我的shell脚本代码,小弟献丑了

#!/bin/bash
HOSTNAME="xxxx" #数据库ip
PORT="3306" #端口
USERNAME="root" #用户名
PASSWORD="xxxxx" #密码
DBNAME="rcbc" #数据库名称
TABLECUSUSER="cus_user" #数据库中表的名称
TABLECUSRANK="cus_rank" #数据库中表的名称
TABLECUSUSERBODY="cus_user_body"
backUpDir=/root/backup/mysql/question/ #保存路径
#3.设置文件备份文件名
filecususer=cus_user
filecususerbody=cus_user_body
filecusrank=cus_rank
dumpfilecususer=$backUpDir$filecususer`date -d now +%Y%m%d`.sql
dumpfilecususerbody=$backUpDir$filecususerbody`date -d now +%Y%m%d`.sql
dumpfilecusrank=$backUpDir$filecusrank`date -d now +%Y%m%d`.sql
#备份数据表
/usr/bin/mysqldump -u$USERNAME -P$PORT -p$PASSWORD -h$HOSTNAME $DBNAME $TABLECUSUSER > $dumpfilecususer
/usr/bin/mysqldump -u$USERNAME -P$PORT -p$PASSWORD -h$HOSTNAME $DBNAME $TABLECUSUSERBODY > $dumpfilecususerbody
/usr/bin/mysqldump -u$USERNAME -P$PORT -p$PASSWORD -h$HOSTNAME $DBNAME $TABLECUSRANK > $dumpfilecusrank

#删除昨天的数据
rm -f $backUpDir$filecususer`date -d -1day +%Y%m%d`.sql
rm -f $backUpDir$filecususerbody`date -d -1day +%Y%m%d`.sql
rm -f $backUpDir$filecusrank`date -d -1day +%Y%m%d`.sql

我是先备份然后再删除昨天备份的sql脚本

然后就是恢复数据了

脚本如下

#!/bin/bash
HOSTNAME=xxxx" #数据库信息
PORT="3306"
USERNAME="root"
PASSWORD="xxxx"
DBNAME="rcbc" #数据库名称
TABLECUSUSER="cus_user" #cus_user表
TABLECUSRANK=‘cus_rank‘ #cus_rank表
TABLECUSBODY=‘cus_user_body‘ #cus_user_body

#删除数据
delete_user_sql="delete from ${TABLECUSUSER}"
delete_rank_sql="delete from ${TABLECUSRANK}"
delete_body_sql="delete from ${TABLECUSBODY}"
mysql -h${HOSTNAME} -P${PORT} -u${USERNAME} -p${PASSWORD} ${DBNAME} -e "${delete_user_sql}"
mysql -h${HOSTNAME} -P${PORT} -u${USERNAME} -p${PASSWORD} ${DBNAME} -e "${delete_rank_sql}"
mysql -h${HOSTNAME} -P${PORT} -u${USERNAME} -p${PASSWORD} ${DBNAME} -e "${delete_body_sql}"
DATE=`date +%Y%m%d`

#复制数据
scp -r root@远程服务器ip:/root/backup/mysql/question /root/backup/mysql/scp

#执行恢复命令
/usr/bin/mysql -uroot -predcollar@2015 rcbc <<EOF
source /root/backup/mysql/scp/question/cus_user${DATE}.sql;
source /root/backup/mysql/scp/question/cus_rank${DATE}.sql;
source /root/backup/mysql/scp/question/cus_user_body${DATE}.sql;
EOF
exit;

以上就是小弟的全部内容了,献丑了。望指正

linux 通过scp 复制备份恢复mysql数据表

标签:

原文地址:http://www.cnblogs.com/gzyy1987/p/4872973.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!