熬夜整理,我把 MySQL备份和还原的核心终于撸干净了

3 篇文章 0 订阅


前言:为什么要备份?

在这里插入图片描述

其实一谈到备份这个词,大家并不陌生,常常在使用手机时,会备份相册和通讯录等等。
很担心手机中的联系方式和照片会丢失,所以大家会采用备份的方式来让自己的资料💾
能够更加地完整地保存下来。

我想很多人会采用网盘的方式,因为存储空间大,上传方便,查看资料方便。
在这里一定有很多的百度网盘的老用户吧,如果猜中的话就点个赞吧。嘿嘿,其实我也是。
在这里插入图片描述

再告诉你们一个小秘密哈,阿里云盘不限速哈,而且空间也大。
我已经资料💾连夜转到阿里啦,哈哈哈
在这里插入图片描述

接下来我来举个例子吧,来讲一下

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这个库,恢复到删除库之前的数据
  
  使用全备+二进制日志基于时间的恢复方式
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

未末0902

你的鼓励与支持是我最大的动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值