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>
setsql_
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