MySQL备份和还原
前言:为什么要备份?
其实一谈到备份这个词,大家并不陌生,常常在使用手机时,会备份相册和通讯录等等。
很担心手机中的联系方式和照片会丢失,所以大家会采用备份的方式来让自己的资料💾
能够更加地完整地保存下来。
我想很多人会采用网盘的方式,因为存储空间大,上传方便,查看资料方便。
在这里一定有很多的百度网盘的老用户吧,如果猜中的话就点个赞吧。嘿嘿,其实我也是。
再告诉你们一个小秘密哈,阿里云盘不限速哈,而且空间也大。
我已经资料💾连夜转到阿里啦,哈哈哈
接下来我来举个例子吧,来讲一下
1 .Phone手机的备份教程
第一种 iCloud 备份
1.将您的设备连接到 Wi-Fi 网络。
2.前往“设置”>“[您的姓名]”,然后轻点“iCloud”。
3.轻点“iCloud 云备份”。
4.轻点“立即备份”。在这个过程结束之前,请保持设备与无线局域网的连接。在“立即备份”下方,您会看到上次备份的日期和时间。如果您收到提醒信息,提示您没有足够的 iCloud 储存空间来完成备份,请按照屏幕上的步骤购买更多储存空间。
通过 iCloud 云备份进行自动备份
1.请按照以下步骤设置 iCloud 云备份,以便每天自动备份您的设备:
2.确保在“设置”>“[您的姓名]”>“iCloud”>“iCloud 云备份”中开启了“iCloud 云备份”。
3.将设备连接到电源。
4.将设备连接到无线局域网。
5.确保设备的屏幕已锁定。
第二种 Mac 备份
通过“访达”进行备份
1.在装有 macOS Catalina 或更高版本的 Mac 上,打开“访达”窗口。
2.使用 USB 连接线将您的设备连接到电脑。
3.如果系统提示您输入设备密码或“信任此电脑”,请按屏幕上显示的步骤操作。如果您忘记了密码,请获取协助。
4.在电脑上选择您的设备。如果您的设备没有出现在电脑上,了解该怎么做。
5.如果要存储您的设备或 Apple Watch 上的“健康”和“健身记录”数据,您需要对备份进行加密。选中“加密本地备份”复选框,然后创建一个容易记住的密码。
6.点按“立即备份”。
⚠️注意备份过程结束后,您可以查看备份是不是已成功完成。您将看到上次备份的日期和时间。
通过 iTunes 进行备份
1.在装有 macOS Mojave 或更低版本的 Mac 上,打开 iTunes。
2.使用 USB 连接线将您的设备连接到电脑。
3.如果系统提示您输入设备密码或“信任此电脑”,请按屏幕上显示的步骤操作。如果您忘记了密码,请获取协助。
4.在电脑上选择您的设备。如果您的设备没有出现在电脑上,了解该怎么做。
5.如果要存储您的设备或 Apple Watch 上的“健康”和“健身记录”数据,您需要对备份进行加密。选中“加密 [设备] 备份”复选框,然后创建一个容易记住的密码。
6.将密码妥善保管,因为如果没有这个密码将无法恢复备份。
7.点按“立即备份”。
8.备份过程结束后,您可以查看备份是不是已成功完成。您将看到上次备份的日期和时间。
2 .MySQL的备份和还原
Backup备份 recovery恢复(还原) restore
(1) 天灾人祸、误操作、安全机制等
(2) 付出代价(费用、人力)
灾备:
热备(online):mysqld服务是运行的情况下去备份。mysqldump、SQLyog、mysql workbench等工具来备份、xtrabackup
冷备(offline):mysql服务需要停止,然后去拷贝数据
停止业务–》会损失收入
备份的时间需要注意:一般选择在服务器不忙的时候
一、备份和迁移
1.物理和逻辑的备份
物理:备份数据库的文件或者磁盘–》在linux系统里的文件系统上
(例如cp, scp,tar, rsync)
逻辑:备份数据库里的表的结构和执行的语句(insert、create)–>进入到MySQL的内部
Mysqldump
恢复:mysql、SQLyog等工具来备份
2.数据库的迁移:
同类数据库:mysql
不同类的数据库:mysql、oracle 专门的工具,例如:navicat、mysqlutility工具集等
3.Mysql的数据目录在哪里?
/var/lib/mysql
/data/mysql
每个数据库对应一个目录,里面存放表的数据
[root@WANGJING-MYSQL aliresearch_db]# ls
article.frm article.ibd catagory.frm catagory.ibd db.opt user.frm user.ibd
[root@WANGJING-MYSQL aliresearch_db]#
.frm 是存放表结构的文件,表里的字段和字段的类型等信息
.ibd 是存放数据和索引的文件
二、备份方法:
1.完全备份(全备 full backup):
所有的内容全部备份
优点:恢复的时候方便快
缺点:消耗空间大,时间长
2.增量备份 Incremental:
上一次备份后新产生的数据,增加的数据
3.差异备份
每次备份都和完全备份进行差异比较
4.备份方案的选择:
1.每天全备 --》最省事的
2.全备+增量 --》最节约存储空间的
3.全备+差异
考虑:数据量不大,建议每天全备
考虑还原的便利性:
使用第3方工具备份和恢复
1.SQLyog ---》.sql的文本文件
2.Csv文件:就是以逗号作为分割的文件
逗号分隔值(Comma-Separated Values,CSV,有时也称为字符分隔值,因为分隔字符也可以不是逗号),其文件以纯文本形式存储表格数据(数字和文本)。
5.备份前准备
[root@wudang-mysql-2 ~]# cat student.csv
id,name,sex,phoneNO
1,cali,male,18908495097
2,rose,female,18908495097
3,penglong,male,18908495098
4,jack,male,189084950890
建议使用mysql的workbench导入csv文件,效果比较好
[root@wudang-mysql-2 ~]#
3.Excel xml
4.Xml
5.Html
[root@wudang-mysql-2 bin]# pwd 编译安装的目录下有mysqldump命令
/usr/local/mysql/bin
[root@wudang-mysql-2 bin]#
今后打开终端就可以使用命令
[root@wudang-mysql-2 ~]# echo 'PATH=$PATH:/usr/local/mysql/bin' >>/root/.bashrc
新建备份目录
[root@wudang-mysql-2 ~]# mkdir /backup
[root@wudang-mysql-2 ~]# cd /backup/
[root@wudang-mysql-2 backup]# ls
[root@wudang-mysql-2 backup]#
[root@wudang-mysql-2 backup]# ps aux|grep mysql
root 16021 0.0 0.1 134120 2892 pts/0 S+ 6月12 0:00 mysql -uroot -px xxxxxxxxxxxx
root 17533 0.0 0.0 11812 1620 pts/3 S 10:40 0:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --datadir=/data/mysql --pid-file=/data/mysql/wudang-mysql-2.pid
mysql 17688 0.2 12.5 1736476 233168 pts/3 Sl 10:40 0:08 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/data/mysql --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=/var/log/mysql/mysql.log --open-files-limit=8192 --pid-file=/data/mysql/wudang-mysql-2.pid --socket=/data/mysql/mysql.sock --port=3309
root 17826 0.0 0.0 112724 988 pts/4 S+ 11:32 0:00 grep --color=auto mysql
[root@wudang-mysql-2 backup]# bash
[root@wudang-mysql-2 backup]# mysqld
mysqld mysqld_multi mysqld_safe mysqldump mysqldumpslow
[root@wudang backup]#mysqldump -uroot -pSanchuang1234# sanchuang >sanchuang.sql
mysqldump: [Warning] Using a password on the command line interface can be insecure.
[root@wudang-mysql-2 backup]# ls
sanchuang.sql
[root@wudang-mysql-2 backup]#
Mysqldump备份出来的sql文件里没有帮助建库的SQL语句,有建表和插入数据的SQL
6.备份数据库里的表
mysqldump --all-databases > dump.sql 备份所有的库
mysqldump --databases db1 db2 db3 > dump.sql 备份多个指定的库
[root@wudang-mysql-2 backup]# mysqldump -uroot -pSanchuang1234# --databases sanchuang TENNIS >sanchuang_tennis.sql
[root@wudang backup]# mysqldump -uroot -pSanchuang1234# sanchuang emp >sanchuang_emp.sql
[root@WANGJING-MYSQL backup]# mysqldump -uroot -p123456 TENNIS PLAYERS >PLAYERS.SQL
mysqldump -uyangst -p'yang123#' zabbix users >/backup/zabbix_users.sql
Mysqldump备份出来的sql文件里没有帮助建库的SQL语句
还原(recovery)
[root@wudang-mysql-2 backup]# ls
sanchuang_emp.sql sanchuang.sql
[root@wudang-mysql-2 backup]# mysql -uroot -pSanchuang1234# sanchuang < sanchuang_emp.sql
mysql: [Warning] Using a password on the command line interface can be insecure.
[root@wudang-mysql-2 backup]#
[root@WANGJING-MYSQL backup]# mysql -uroot -p123456 TENNIS <PLAYERS.SQL
可以在sanchuang.sql里添加新建库的SQL
[root@wudang-mysql-2 backup]# mysql -uroot -pSanchuang1234# < sanchuang.sql
mysql: [Warning] Using a password on the command line interface can be insecure.
[root@wudang-mysql-2 backup]#
7.编写备份脚本
[root@wudang-mysql-2 backup]# vim backup_mysql.sh
#!/bin/bash
#新建备份目录,不存在就新建
[ -d /backup ] || mkdir /backup
#mkdir -p /backup
mysqldump -uroot -pSanchuang1234# --databases sanchuang TENNIS >/backup/sanchuang_tennis.sql 2>/dev/null
if (( $? == 0 ))
then
echo "mysql里的sanchuang和TENNIS库备份成功"
else
echo "备份失败"
fi
因为mysqldump做的全备》保留最近15天
8.升级脚本:
文件名里包含时间,时间精确到天,备份文件保留最近15天,15天前的文件给予删除。
%F full date; same as %Y-%m-%d
%H hour (00..23)
%m month (01..12)
%M minute (00..59)
%S second (00..60)
[root@wudang-mysql-2 test]# date -s '2019-6-13 15:12:00' 设置时间
2019年 06月 13日 星期四 15:12:00 CST
[root@wudang-mysql-2 test]#
[root@wudang-mysql-2 ~]# ctime=$(date +%F_%H_%M_%S) #优先执行$()里的命令,然后赋值给变量ctime
[root@wudang-mysql-2 ~]# echo $ctime
2019-06-13_14_56_11
[root@wudang-mysql-2 ~]#
[root@wudang-mysql-2 backup]# cat backup_mysql.sh
#!/bin/bash
#新建备份目录,不存在就新建
[ -d /backup ] || mkdir /backup
#mkdir -p /backup
#得到当前的时间,在文件名里插入日期
ctime=$(date +%F_%H_%M_%S)
mysqldump -uroot -pSanchuang1234# --databases sanchuang TENNIS >/backup/sanchuang_tennis_${ctime}.sql 2>/dev/null
if (( $? == 0 ))
then
echo "mysql里的sanchuang和TENNIS库备份成功"
else
echo "备份失败"
fi
#删除15天之前的以.sql结尾的备份文件
find /backup -mtime +15 -type f -name "*.sql" -exec rm -rf {} \;
[root@wudang-mysql-2 backup]#
三、计划任务
到时自动去执行某个程序或者脚本–》闹钟
任务计划程序使您能够在所选计算机上自动执行例行任务。
Task Scheduler通过监视您选择的任何条件(称为触发器)来执行此操作,然后在满足这些条件时执行任务。
windows 计划任务
Linux 定时任务
调脚本完成
crond 这个程序是计划任务的服务端程序,是linux里自带的服务,不需要安装
而且自动启动。
crond进程会每分钟去检查需要完成的任务。最短时间间隔是1分钟
crontab 是新建一个计划任务的
[root@wudang-mysql-2 backup]# crontab -e
每天晚上的3点30分钟执行备份脚本
30 3 * * * bash /backup/backup_mysql.sh
[root@wudang-mysql-2 backup]# crontab -l 查看计划任务
30 3 * * * bash /backup/backup_mysql.sh
[root@wudang-mysql-2 backup]#
[root@wudang-mysql-2 backup]# vim /etc/crontab
1. Example of job definition:
.---------------- minute (0 - 59)
| .------------- hour (0 - 23)
| | .---------- day of month (1 - 31)
| | | .------- month (1 - 12) OR jan,feb,mar,apr ...
| | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
| | | | |
* * * * * user-name command to be executed
* 是统配符号,表示所有的
2019年9月10日的15点30分钟 执行
30 15 10 9 * bash backup_mysql.sh
星期1和星期3,星期5 的12点30分钟 执行脚本
30 12 * * 1,3,5 bash backup_mysql.sh
星期1到星期5的13点00分钟执行脚本
0 13 * * 1-5 bash backup_mysql.sh
每个月的1号和15号的14点20分钟执行
20 14 1,15 * * bash backup_mysql.sh
每隔2小时或者每隔5分钟执行脚本
0 */2 * * *
*/5 * * * *
[root@wudang-mysql-2 backup]# crontab -l
30 3 * * * bash /backup/backup_mysql.sh
0 */2 * * * bash /backup/backup_mysql.sh
*/5 * * * * bash /backup/backup_mysql.sh
连续的时间使用-
不连续的使用,
每隔固定时间使用/
2.如何知道计划任务是否执行?
答案:查看日志
[root@wudang-mysql-2 backup]# cd /var/log
cron 开头的文件都是计划任务的日志文件
Jun 13 16:10:01 wudang-mysql-2 CROND[18258]: (root) CMD (bash /backup/backup_mysql.sh)
日志文件会记录新建计划任务,修改、删除、执行计划的信息
删除其实就直接删除这行或者注释就ok
#*/5 * * * * bash /backup/backup_mysql.sh
计划任务+脚本=自动化执行
3.使用脚本去操作数据库
[root@wudang-mysql-2 ~]# mysql -uroot -pSanchuang1234# -e "create database tangchenzhi";
mysql: [Warning] Using a password on the command line interface can be insecure.
[root@wudang-mysql-2 ~]# mysql -uroot -pSanchuang1234# -e "show databases";
mysql: [Warning] Using a password on the command line interface can be insecure.
+--------------------+
| Database |
+--------------------+
| information_schema |
| TENNIS |
| chenjiezhu |
| hushitian |
| mysql |
| performance_schema |
| sanchuang |
| sys |
| tangchenzhi |
| xiaoben |
| xiongyuehui |
+--------------------+
[root@wudang-mysql-2 ~]#
重定向查询出来的内容到文件里
[root@wudang-mysql-2 ~]# mysql -uroot -pSanchuang1234# -e "select host,user from mysql.user" &>1.txt
4.方法二:here document 命令
非交换式操作里批量执行,提前设置好需要使用的命令
EOF是命令的结束标志 end of file--》EOF
[root@wudang-mysql-2 ~]# mysql -uroot -pSanchuang1234# <<EOF
show databases;
select host,user from mysql.user;
use sanchuang;
create table tt9(id int);
insert into tt9 values(1),(2),(3);
select * from tt9;
EOF
[root@wudang-mysql-2 mysql]# vim use_mysql.sh
mysql -uroot -pSanchuang1234# <<EOF
create database jianggq;
use jianggq;
create table t1(id int primary key,name varchar(20));
insert into t1 values(1,"cali"),(2,"jiang");
EOF
if (( $? == 0 ))
then
echo "库和表已经创建完毕,sir"
else
echo "表和库新建失败"
fi
[root@wudang-mysql-2 mysql]# bash use_mysql.sh 执行脚本
mysql: [Warning] Using a password on the command line interface can be insecure.
库和表已经创建完毕,sir
[root@wudang-mysql-2 mysql]#
四、备份的位置和方案
1.备份的数据存放位置:
1.本地存放:本地服务器里
2.异地存放:别的服务器、云盘等
3.异地备份也可以使用mysqldump、scp、rsync等方法
4. shell> mysqldump [options] db_name [tbl_name ...]
5. shell> mysqldump [options] --databases db_name ...
6. shell> mysqldump [options] --all-databases
[root@Mariadb ~]# mysqldump -utangge -p123456 -h 192.168.0.51 -P 3309 TENNIS >TENNIS.SQL
[root@Mariadb ~]# mysqldump -utangge -p123456 -h 192.168.0.51 -P 3309 --all-databases >all.sql
[root@Mariadb ~]# mysqldump -utangge -p123456 -h 192.168.0.51 -P 3309 --databases TENNIS tangge >tennis_tangge.sql
[root@Mariadb ~]# mysqldump -utangge -p123456 -h 192.168.0.51 -P 3309 TENNIS PLAYERS >tennis_players.sql
[root@Mariadb ~]#
远程备份的时候,使用的用户名和密码需要grant授权
[root@localhost ~]# mysqldump -usuwei -pSanchuang1234# -h 192.168.0.163 -P3309 sanchuang >sanchuang.sql
DBA 数据库管理员 database administrator
2.制定一个备份方案
SQLYOG备份 手工点 全备 每天凌晨3点 计划任务 mysqldump
问:删除一个库以后如何恢复?
Mysql
[root@Mariadb shell]# cat backup_mysql.sh
#!/bin/bash
/usr/bin/mysqldump -utangge -p123456 -h 192.168.0.51 -P 3309 --all-databases >all.sql
[root@Mariadb shell]# crontab -l
0 3 * * * bash /shell/backup_mysql.sh
[root@Mariadb shell]#
3.练习:
1.编写一个计划任务执行脚本backup_mysql.sh,每天的4点30分钟备份TENNIS库
2.备份mysql库里的user表
3.最好在另外一台机器上备份存放数据
4.本地也需要备份一份
5.存放路径/backup_db,备份文件的名字自己定义,需要包含时间精确到秒
五.需要分析一:
1.需要2台linux服务器,一台是mysql服务器,一台是备份服务器
2.Mysql服务器和备份服务器之间需要建立免密码登录(密钥认证)
1.第一版本
[root@wudang-mysql-2 backup]# vim backup_mysql.sh
#!/bin/bash
#新建备份目录,不存在就新建
[ -d /backup ] || mkdir /backup
#mkdir -p /backup
#得到当前的时间,在文件名里插入日期
ctime=$(date +%F_%H_%M_%S)
mysqldump -uroot -pSanchuang1234# --databases sanchuang TENNIS >/backup/sanchuang_tennis_${ctime}.sql 2>/dev/null
if (( $? == 0 ))
then
echo "mysql里的sanchuang和TENNIS库备份成功"
else
echo "备份失败"
fi
#删除15天之前的以.sql结尾的备份文件
find /backup -mtime +15 -type f -name "*.sql" -exec rm -rf {} \;
2.第二版本
[root@localhost feng]# cat backup_mysql.sh
#!/bin/bash
#新建备份目录,不存在就新建
[ -d /backup_lcoal ] || mkdir /backup_local
#mkdir -p /backup
#得到当前的时间,在文件名里插入日期
ctime=$(date +%F_%H_%M_%S)
mysqldump -uroot -pSanchuang1234# --databases sanchuang TENNIS >/backup_local/sanchuang_tennis_${ctime}.sql 2>/dev/null
if (( $? == 0 ))
then
echo "mysql里的sanchuang和TENNIS库备份成功"
else
echo "备份失败"
fi
#删除15天之前的以.sql结尾的备份文件
find /backup_local -mtime +15 -type f -name "*.sql" -exec rm -rf {} \;
[root@localhost feng]#
指定计划任务
[root@localhost feng]# crontab -l
30 4 * * * bash /feng/bachup_mysql.sh
3.第三版本
1.编写脚本
[root@wudang-mysql-2 backup]# mkdir /huruihao
[root@wudang-mysql-2 backup]# cd /huruihao/
[root@wudang-mysql-2 huruihao]# vim backup_hu_mysql.sh
[root@wudang-mysql-2 huruihao]# cat backup_hu_mysql.sh
#!/bin/bash
#新建备份目录,不存在就新建
[ -d /huruihao ] || mkdir /huruihao
#mkdir -p /huruihao
#得到当前的时间,在文件名里插入日期
ctime=$(date +%F_%H_%M_%S)
mysqldump -uroot -pSanchuang1234# -h 192.168.0.111 -P3309 --databases sanchuang TENNIS >/huruihao/sanchuang_tennis_${ctime}.sql 2>/dev/null
if (( $? == 0 ))
then
echo "mysql里的sanchuang和TENNIS库备份成功"
else
echo "备份失败"
fi
#删除15天之前的以.sql结尾的备份文件
find /huruihao -mtime +15 -type f -name "*.sql" -exec rm -rf {} \;
[root@wudang-mysql-2 huruihao]#
2.计划任务,最好时间和本地备份的时间错开1小时
[root@wudang-mysql-2 huruihao]# crontab -l
#30 3 * * * bash /backup/backup_mysql.sh
30 5 * * * bash /huruihao/backup_hu_mysql.sh
总结
如果在脚本实现远程拷贝,建议先2台服务器之间免密码认证 ssh密钥认证
[root@Mariadb shell]# scp backup_mysql.sh 192.168.0.51:/root 远程复制
密钥认证的配置过程:
1.创建密钥对,会存放到/root/.ssh目录下
使用的是root用户
[root@wudang-mysql-2 ssh]# ssh-keygen -t ecdsa
Generating public/private ecdsa key pair.
Enter file in which to save the key (/root/.ssh/id_ecdsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_ecdsa.
Your public key has been saved in /root/.ssh/id_ecdsa.pub.
The key fingerprint is:
SHA256:fZhxz9byL9KcpsqX220dmugKMpWqESeGfYShtGh+6+k root@wudang-mysql-2
The key's randomart image is:
+---[ECDSA 256]---+
| . . |
|o o o |
|.+ . . . . |
|o o . .. = o . |
| o * o oS + . = .|
| o * o . . + |
| o + . .+o.+|
| . + o .. .++*.+|
| .E .=+o=.oo|
+----[SHA256]-----+
[root@wudang-mysql-2 ssh]#
[root@wudang-mysql-2 ssh]# cd /root/.ssh/ 存放密钥对的目录
[root@wudang-mysql-2 .ssh]# ls
id_ecdsa id_ecdsa.pub known_hosts
[root@wudang-mysql-2 .ssh]#
2.上传公钥到另外一台备份服务器
[root@wudang-mysql-2 ssh]# cd /root/.ssh/
[root@wudang-mysql-2 .ssh]# ls
id_ecdsa id_ecdsa.pub known_hosts
[root@wudang-mysql-2 .ssh]#
使用ssh-copy-id 上传id_ecdsa.pub 公钥到192.168.0.136上的root用户下
[root@wudang-mysql-2 .ssh]# ssh-copy-id -i id_ecdsa.pub root@192.168.0.136
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "id_ecdsa.pub"
The authenticity of host '192.168.0.136 (192.168.0.136)' can't be established.
ECDSA key fingerprint is SHA256:A7IYdMHVxeq1HCtfVPF3e7AU9qsfXWJ/HWH1xIRHL7w.
ECDSA key fingerprint is MD5:1f:99:05:99:e5:41:9f:34:9d:42:0c:8c:60:18:28:45.
Are you sure you want to continue connecting (yes/no)? yes
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
root@192.168.0.136's password:
Number of key(s) added: 1
Now try logging into the machine, with: "ssh 'root@192.168.0.136'"
and check to make sure that only the key(s) you wanted were added.
[root@wudang-mysql-2 .ssh]#
3.验证免密码登录是否成功
[root@wudang-mysql-2 .ssh]# ssh root@192.168.0.136 使用root用户登录192.168.0.136服务器
Last login: Fri Jun 14 10:27:23 2019 from 192.168.0.187
[root@localhost ~]#
说明配置成功
六.需要分析二:
1.需要2台linux服务器,一台是mysql服务器,一台是备份服务器
2.Mysql服务器和备份服务器之间需要建立免密码登录(密钥认证)
3.编写脚本实现
[root@wudang-mysql-2 mysql]# vim backup_db.sh
远程连接到192.168.0.136服务器上执行 mkdir -p /backup_db
scp远程复制文件
[root@wudang-mysql-2 backup_db]# scp tennis.sql root@192.168.0.136:/backup_db
[root@wudang-mysql-2 backup_db]# ssh root@192.168.0.136 mkdir -p /backup_db
scp远程复制文件夹
[root@wudang-mysql-2 backup_db]# scp -r /backup_db/feng/ root@192.168.0.136:/backup_db
passwd 100% 989 263.3KB/s 00:00
[root@wudang-mysql-2 backup_db]#
脚本内容:
[root@wudang-mysql-2 mysql]# cat backup_db.sh
#!/bin/bash
#得到时间
ctime=$(date +%F_%H%M%S)
#在本地新建存放目录/backup_db
mkdir -p /backup_db
#备份TENNIS库到/backup_db叫tennis.sql
mysqldump -uroot -pSanchuang1234# TENNIS >/backup_db/${ctime}_tennis.sql
#备份mysql库里user表
mysqldump -uroot -pSanchuang1234# mysql user >/backup_db/${ctime}_mysql_user.sql
#备份服务器上新建文件夹/backup_db
ssh root@192.168.0.136 mkdir -p /backup_db
#上传当天备份的文件到备份服务器里192.168.0.136
scp /backup_db/${ctime}*.sql root@192.168.0.136:/backup_db
#本地保留最近30天的备份文件
find /backup_db -mtime +30 -type f -name "*.sql" -exec rm -rf {} \;
#备份服务器上也保留最近30天的文件
#生成一个脚本文件
cat >del_30days_file.sh <<EOF
find /backup_db -mtime +30 -type f -name "*.sql" -exec rm -rf {} \;
EOF
#上传脚本文件到备份服务器
scp del_30days_file.sh root@192.168.0.136:/root
#远程执行脚本
ssh root@192.168.0.136 bash /root/del_30days_file.sh
创建计划任务
[root@wudang-mysql-2 mysql]# crontab -e
30 4 * * * bash /root/mysql/backup_db.sh
七.练习:
0.刷新下二进制日志,flush logs 产生一个新的二进制日志文件
1.自己创建一个库sc,然后去里面新建一个表student(id int primary key ,name varchar(10),sex char(1))
2.往表里插入数据2~3条数据
3.对sc这个库做全备
4.再次往student表里插入一些数据
5.执行删除操作 ,删除整个库
6.去恢复sc这个库,恢复到删除库之前的数据
使用全备+二进制日志基于时间的恢复方式