数据备份恢复
一.概述
MySQL数据备份即databases Binlog my.cnf
所有备份数据都应放在非数据库本地,而且建议有多份副本。测试环境中做日常恢复演练,恢复较备份更为重要。
备份: 能够防止由于机械故障以及人为误操作带来的数据丢失,例如将数据库文件保存在了其它地方。冗余: 数据有多份冗余,但不等备份,只能防止机械故障带来的数据丢失,例如主备模式、数据库集群。
【多余的重复或啰嗦内容(包括信息、语言、代码、结构、服务、软件、硬件等等)均称为冗余】
备份过程中必须考虑因素:
-
数据的一致性
-
服务的可用性
逻辑备份: 备份的是建表、建库、插入等操作所执行SQL语句(DDL DML DCL),适用于中小型数据库,版本兼容性较好,但是效率相对较低。
mysqldump mydumper
物理备份: 直接复制数据库文件,适用于大型数据库环境,不受存储引擎的限制,但不能恢复到不同(版本跨度较大)的MySQL版本。
tar,cp xtrabackup(建议大家使用) inbackup
lvm快照
完全备份
增量备份(自上次备份发生数据变更的备份)
差异备份(始终针对完整备份不同的备份)
二.逻辑备份
1.binlog日志逻辑备份
2.mysqldump 逻辑备份
3.into outfile 逻辑备份
mysqldump 备份
mysqldump逻辑备份
===================================
使用mysqldump备份:主要针对小数据进行备份!
- 备份单个数据库
# mysqldump -uroot -p1 库名 > /tmp/xxx.sql
- 备份单个表
# mysqldump -u root -p1 库名 表名 > /tmp/xxx.sql
- 备份多个表
# mysqldump -u root -p1 库名 表名 表名 > /tmp/xxx.sql
- 多库备份 -B,–databases
# mysqldump -u root -p1 -B 库名 库名 > /tmp/xxx.sql
- 全库备份 -A, --all-databases
# mysqldump -u root -p1 -A > /tmp/xxx.sql
恢复数据库
为保证数据一致性,应在恢复数据之前停止数据库对外的服务**,停止binlog日志因为binlog使用binlog日志恢复数据时也会产生binlog**日志
mysql> set sql_log_bin=0
- 单库恢复
mysql> drop database db1;
Query OK, 2 rows affected (0.01 sec)
mysql> create database db1; //先建库Query OK, 1 row affected (0.00 sec)
第一种恢复方式:
[root@ULA mysql]# mysql -u root -p1 db1 < /tmp/db1.sql
第二种恢复方式:
[root@ULA mysql]# mysql -uroot -p1 mysql> use db1
mysql> source /tmp/db1.sql
- 单表恢复
mysql -u root -p1 db1 < /tmp/db1.sql
-
多表恢复(同单表恢复一样)
-
多库恢复(恢复之前是不需要手动创建数据库的)