1. 备份命令
数据库数据备份
1
scp -r root@192.168.35.142:/usr/local/mysql/mysqldb/knowledge_ms [local_path]
web文件数据备份
1
scp -r root@192.168.35.127:/opt/store [local_path]
以上备份操作基于scp命令实现,可以直接在某人的电脑上手动实现一次备份;也可以直接在其他机器通过shell脚本定时备份。
mac与linux可以直接使用scp命令;
windows上可能无法使用scp命令(需要手动前往安装ssh工具https://sourceforge.net/projects/sshwindows/files/)
2. MySQL数据回滚
由于我们备份的是mysqldata对应表目录下的ibd文件,回滚操作可以参考以下博客:
- mysql版本在8以前:mysql使用.frm .ibd文件恢复数据 - 程序员大本营 (pianshen.com)
- mysql版本在8以后:【MySQL】MySQL8.0 根据ibd文件查看表结构 - 灰信网(软件开发博客聚合) (freesion.com)
(在8之前InnoDB存储表的结构和数据时,分别存储在frm文件和ibd文件,因此在不知道表结构的情况下还需要备份.frm文件。而在8的时候全都存到了ibd文件里。)
知了的mysql版本:
1 | [root@localhost mysqldb]# mysql -V |
原理:
- frm文件用于存储表结构,可以通过mysqlfrm工具从中提取出建表语句;mysql 8以后的版本通过ibd2sdi工具从ibd文件提取表结构;
- 使用建表语句重新建表;
- 建表后删除表空间;
- 将ibd文件替换到对应文件夹内;
- 修改ibd文件权限;
- 重新链接表空间。
备注:尝试了一下,使用idb获取表结构再建表过于繁琐,建议使用mysqldump配合-d选项,单独导出表结构的sql文件(导出带有数据的sql文件过大,不如使用ibd文件备份数据)。
3. 撰写定时备份脚本
知了的备份脚本已经加入附件可供参考!
可以撰写定时任务脚本实现定时备份,但scp命令需要输入密码,可以参照如下示例实现
示例:
1 | sudo apt-get update |
第一种方法(scp命令不可行):
1 | !/bin/bash |
使用管道(上一个命令的 stdout 接到下一个命令的 stdin)
第二种方法(scp命令不可行):
1 | \#!/bin/bash |
使用文本块输入重定向(说明:在shell脚本中,通常将EOF与 << 结合使用,表示后续的输入作为子命令或子Shell的输入,直到遇到EOF为止,再返回到主Shell,即将‘你的密码’当做命令的输入)
第三种方法:
expect(上面介绍的两种方法前提条件是指令有参数来设定密码输入方式,像ssh指令就没有这样的参数,第三种交互方式就派上用场了)
expect 需要额外安装
1 | yum install expect |
使用示例如下
1 | \#!/bin/expect |
expect “password:”这句意思是交互获取是否返回 password: 作为关键字,因为在执行ssh时会返回输入password的提示:
1 | xxxxxx@192.168.xx.xxx's password: |
send就是将密码zjk123发送过去