mysql备份和恢复
完全备份、部分备份
完全备份:备份整个数据集
部分备份:只备份数据子集
完全备份、增量备份、差异备份
增量备份:仅备份最近一次完全备份或增量备份(如果存在增量)以来变化的数据
差异备份:仅备份最近一次完全备份以来变化的数据
热备份、温备份、冷备份
热备:读写操作均可执行
温备:读操作可执行,但写操作不能
冷备:读写操作均不可用进行
MyISAM:温备,不能热备
InnoDB:热备
物理备份、逻辑备份
物理备份:直接复制数据文件进行备份
逻辑备份:从数据库中“导出”数据另存而进行的备份;(与存储引擎无关)
备份内容:
数据、二进制日志、InnoDB的事务日志、代码(存储过程、函数、触发器、事件调度器)、服务器配置文件
备份工具:
mysqldump:逻辑备份工具,适用所有存储引擎,温备:完全备份、部分备份;对InnoDB存储引擎支持热备;
cp,tar等复制归档工具:物理备份工具,适用于所有存储引擎,冷备。
lvm2的快照:几乎热备:借组于文件系统管理工具进行备份
mysqlhotcopy:几乎冷备:仅适用于MyISAM存储引擎
1.myslqdump+复制binlog;
mysqldump:完全备份(每周备份一次)
复制binlog中指定时间范围的event:增量备份(每天)
2.lvm2快照+复制binlog;
lvm2快照:适用cp或tar进行物理完全备份
复制binlog中指定时间范围的event:增量备份
3.xtrabackup
由percona提供的支出对InnoDB进行热备(物理备份)的工具;
完全备份、增量备份;
mysqldump+二进制日志备份恢复:
1.创建数据测试数据库,建立表,并插入数据。
MariaDB [(none)]> create database Allen;
Query OK, 1 row affected (0.00 sec)
MariaDB [(none)]> use Allen;
Database changed
MariaDB [Allen]> create table test (id int auto_increment primary key,name varchar(20));
Query OK, 0 rows affected (0.00 sec)
MariaDB [Allen]> insert into test(name)values('laowang'),('laozhang'),('laoli');
Query OK, 3 rows affected (0.00 sec)
Records: 3 Duplicates: 0 Warnings: 0
MariaDB [Allen]> select * from test;
+----+----------+
| id | name |
+----+----------+
| 1 | laowang |
| 2 | laozhang |
| 3 | laoli |
+----+----------+
3 rows in set (0.00 sec)
2.创建备份文件夹、完全备份数据
[root@localhost ~]# mkdir /backup
[root@localhost ~]# mysqldump --all-database --lock-all-tables --routines --triggers --master-data=2 --flush-logs >/backup/2018-1-4.sql
[root@localhost ~]# ls /backup/
2018-1-4.sql
3.再次插入数据,插入完成之后删除test表。
MariaDB [Allen]> insert into test (name)values('xiaoli');
MariaDB [Allen]> insert into test (name)values('xiaoming');
MariaDB [Allen]> select * from test;
+----+----------+
| id | name |
+----+----------+
| 1 | laowang |
| 2 | laozhang |
| 3 | laoli |
| 4 | xiaoli |
| 5 | xiaoming |
+----+----------+
MariaDB [Allen]> drop table test;
MariaDB [Allen]> show master status;
+----------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+----------------------+----------+--------------+------------------+
| mysql_bin_log.000008 | 808 | | |
+----------------------+----------+--------------+------------------+
1 row in set (0.00 sec)
4.查看二进制日志文件删除test表时的序号为772.
[root@localhost ~] mysqlbinlog -d Allen /var/lib/mysql/mysql_bin_log.000008
# at 772
#180104 18:10:03 server id 1 end_log_pos 879 Query thread_id=11 exec_time=0 error_code=0
SET TIMESTAMP=1515060603/*!*/;
DROP TABLE `test` /* generated by server */
/*!*/;
DELIMITER ;
# End of log file
5.从二进制日志中提取后面插入的两条数据的相关二进制日志。
[root@localhost ~] mysqlbinlog --stop-position=772 /var/lib/mysql/mysql_bin_log.000008 >/backup/test.sql
6.恢复全备份数据再恢复刚刚提取出来的后面两条数据。
MariaDB [Allen]> flush logs;
MariaDB [Allen]> set session sql_log_bin=0;
MariaDB [Allen]> source /backup/2018-1-4.sql
MariaDB [Allen]> source /backup/test.sql
MariaDB [Allen]> select * from test;
+----+----------+
| id | name |
+----+----------+
| 1 | laowang |
| 2 | laozhang |
| 3 | laoli |
| 4 | xiaoli |
| 5 | xiaoming |
+----+----------+
本文转自阿伦艾弗森 51CTO博客,原文链接:,http://blog.51cto.com/perper/2057469如需转载请自行联系原作者