mysql备份恢复

时间:2021-11-10 04:31:55

mysql的备份和恢复

为什么要备份

1、     是要保护公司线上的数据

2、     第二是为了网站能7*24小时提供服务

 

备份的类型有哪些

冷备份:

用户不能访问数据,即不对外提供服务如12306网站晚上就不能购买车票了。

温备份:

用户能对数据进行读取但是不能对数据进行操作,优点:这种模式不需要完全锁定用户

热备分:

这些动态备份在读取修改数据中进行,很少中断或者不终端传输数据功能,使用热备是,系统可以对数据进行操作。

 

备份的方式有哪些

1、     逻辑备份

基于sql语句的备份

binlog  

into  outfile 

mysqldump

replication

2、     物理备份

基于数据文件备份

   xtrabackup(XBK)

备份的策略有哪些?

1、     全库备份

2、     增量备份

 

备份工具有哪些

mysqldump(逻辑备份)

mysql自带的备份工具

xtrabackup(物理备份)

 

mysqldump备份数据库

普通参数

-A       备份全部数据库

-B       备份单个库或者多个库或者库中的一个表

-u       指定用户

-S       指定socket文件

-p       输入密码

-P       指定端口

-h       指定IP地址

特殊参数

--single-transaction      对innodb可以不锁表热备,对非innodb表可以实现自定锁表,不加的情况启动所有表温备,所有表都锁定

-R          在备份的过程中把备份过程和函数一起备份

--triggers  备份触发器

-F          在备份的时候刷新一个binlog日志

--master-data  把数据库中position点信息和binlog日志信息

0     默认值表示不记录

1          以命令的方式记录

2          以注释的方式进行记录

 

#备份全部库

案例模拟

有一家公司上午10点勿操作删除了表中的一般的数据,然后下午2点这个数据库才被数据库管理人员发现问题,从而进行数据恢复

 

1、     操作流程(全程需要在测试库中进行恢复然后成功了之后进行备份然后恢复到线上数据库)

1、     先进行恢复全库备份

2、     然后截取二进制日志文件

3、     拼接从10点到2点写入的数据

4、     然后导入到线上的数据库中

环境准备:

MariaDB [(none)]> create  database  stu;

#创建数据库

MariaDB [stu]> create  table  t1(id int  not  null primary key,name char(20) not  null ,phone char(11),ages int not  null);

#创建数据表

MariaDB [stu]> insert  into t1 values(1,wang,110,20),(2,li,120,18),(3,zhang,119,16),(4,xin,109,16),(5,ke,129,15),(6,ang,150,28),(7,hang,199,30),(8,zhao,159,10), (10,qian,180,16);

ERROR 1054 (42S22): Unknown column ‘wang‘ in ‘field list‘

MariaDB [stu]> insert  into t1 values(1,‘wang‘,‘110‘,20),(2,‘li‘,‘120‘,18),(3,‘zhang‘,‘119‘,16),(4,‘xin‘,‘109‘,16),(5,‘ke‘,‘129‘,15),(6,‘ang‘,‘150‘,28),(7,‘hang‘,‘199‘,30),(8,‘zhao‘,‘159‘,10), (10,‘qian‘,‘180‘,16);

#插入数据

mysqldump  -uroot  -p123  -A -R    --single-transaction   --master-data=2  --triggers  > /root/backup.sql 

#备份数据库

MariaDB [stu]> truncate  t1;

#删除数据

MariaDB [stu]> select *  from t1;

#查看有无数据

MariaDB [stu]> insert  into  t1  values(11,‘jiang‘,‘520‘,60);

#插入一条数据

 

数据进行恢复

#先不记录二进制日志
mysql> set sql_log_bin=0;
#库内恢复操作
mysql> source /backup/full.sql
#库外恢复操作
[[email protected] ~]# mysql -uroot -p123 < /backup/full.sql

 

然后截取二进制文件

查看数据所做的操作可以使用命令

show     binlog   events   in    “mysql-bin.000001”;

#通过这个命令可以看到数据库提交的操作

mysqlbinlog   --start-position=10388014(这个pos节点信息可以在全备中看到) --stop-position=(如果想截取到当前位置可以不用写)  mysql-bin.000002>>/root/full.sql

 

恢复数据

mysql    -uroot  -p    

surce    /root/full.sql