最近客户有个需求,小弟对于运维的东西也是半瓶醋,所以就果断的摸索了下。折磨了一个晚上终于算是搞定了。因为是两个不同的服务器,本来想用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数据表的更多相关文章

  1. [转]PLSQL Developer备份恢复oracle数据

    本文转自:http://www.cnblogs.com/iampkm/archive/2013/06/09/3128273.html 使用PL sql提供的功能可以快速的备份恢复oracle数据. 1 ...

  2. PLSQL Developer备份恢复oracle数据

    使用PL sql提供的功能可以快速的备份恢复oracle数据. 1  导出存储过程,触发器,序列等所有用户对象.(备份) 在PL/SQL Developer的菜单Tools(工具) => Exp ...

  3. 用Myisamchk让MySQL数据表更健康

    用Myisamchk让MySQL数据表更健康 2011-03-15 09:15 水太深 ITPUB 字号:T | T 为了让MySQL数据库中的数据表“更健康”,就需要对其进行定期体检.在这里笔者推荐 ...

  4. MYSQL数据表损坏的原因分析和修复方法小结

    MYSQL数据表损坏的原因分析和修复方法小结 1.表损坏的原因分析 以下原因是导致mysql 表毁坏的常见原因: 1. 服务器突然断电导致数据文件损坏. 2. 强制关机,没有先关闭mysql 服务. ...

  5. 谈谈MySQL数据表的类型(转)

    谈谈MySQL数据表的类型 通常意义上,数据库也就是数据的集合,具体到计算机上数据库可以是存储器上一些文件的集合或者一些内存数据的集合. 我们通常说的MySql数据库,sql server数据库等等其 ...

  6. 阿里云ECS(linux)磁盘满触发的mysql的表异常修复案例

    阿里云ECS(linux)磁盘满触发的mysql的表异常修复案例 阿里云技术支持:完颜镇江 问题现象: 磁盘空间满了,第一想到的就是删除无用的服务日志或者升级数据盘. 通常是使用du –sh去分析目录 ...

  7. Mysql数据表的增删改查

    ---恢复内容开始--- Mysql数据表的增删改查 1.创建表   语法:CREATE TABLE 表名(字段1,字段2,字段3.......) CREATE TABLE `users` ( `us ...

  8. 随机获取Mysql数据表的一条或多条记录

    随机获得Mysql数据表的一条或多条记录有很多方法,下面我就以users(userId,userName,password......)表(有一百多万条记录)为例,对比讲解下几个方法效率问题: sel ...

  9. (转)MySQL数据表中带LIKE的字符匹配查询

    MySQL数据表中带LIKE的字符匹配查询 2014年07月15日09:56    百科369 MySQL数据表中带LIKE的字符匹配查询 LIKE关键字可以匹配字符串是否相等. 如果字段的值与指定的 ...

随机推荐

  1. (3)JSTL的fn方法库

    fn:functions,fn之所以称之为方法库,是因为fn使用不像core,fmt标签那样遵循<prefix:tagName>的格式,而是遵循fn:methodName()的格式 < ...

  2. Nodejs与ES6系列2:Promise对象

    2.promise对象 js单线程异步执行的特性,因此在代码中充斥着回调函数.随着回调函数的增加,代码的可读性会愈来愈差,因此引入promise对象是不错的一种选择,可以避免层层回调函数.在ECMA6 ...

  3. HTML5 Maker – 在线轻松制作 HTML5 动画效果

    HTML5 Maker 是一个在线动画制作工具,帮助你使用 HTML,CSS 和 JavaScript 创建动态,互动的内容.它非常容易使用,同时可以帮你实现非常好的效果.它可以制作跨浏览器的动画内容 ...

  4. HTML滚动字幕代码参数详解及Js间隔滚动代码

    html文字滚动代码 <marquee style="WIDTH: 388px; HEIGHT: 200px" scrollamount="2" dire ...

  5. 每次点击按钮后,判断页面是否已经有该行,没有弹出repeater的一行,并给他赋一个这行附值,没有则跳出

    protected void btnAdd_click(object sender, EventArgs e) { try { //记录第几次追加 pressCount++; typeString.A ...

  6. Linux机器24项安全合规设置

    工作的一些内容,这是中国移动集团当前linux机器安全合规标准,找了点时间将其归类,并查了一些资料,每项配置是什么意思,不仅要知其然,还要知其所以然.好记性不如烂笔头. 1.  检查FTP配置-限制用 ...

  7. Python学习02 列表 List

    Python学习02 列表 List Python列表 List Python中的列表(List)用逗号分隔,方括号包围(comma-separated values (items) between ...

  8. Android开发学习——搭建开发环境

    在学校开课学习了android的一些简单的UI组件,布局,四大组件学习了2个,数据存储及网络通信,都是一些简单的概念,入门而已.许多东西需要自己去学习. 学习一下 Android开发环境的搭建,两种方 ...

  9. Double 数据保留两位小数一:五舍六入

    package com; public class T2 { public static void main(String[] args) { System.out.println(calculate ...

  10. 你真的了解UIScrollView吗?

    一:首先查看一下关于UIScrollView的定义 NS_CLASS_AVAILABLE_IOS(2_0) @interface UIScrollView : UIView <NSCoding& ...