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

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

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

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

为了避免链接不能用了,我就斗胆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,如图所示:

cfe91c6f2751ad3467f84d9f93104637.png

c6546a801adaf765c36fc613c9a51b50.png

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 [email protected]远程服务器ip:/root/backup/mysql/question /root/backup/mysql/scp

#执行恢复命令

/usr/bin/mysql -uroot [email protected] rcbc <

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;

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

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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值