<p>【引自攀岩人生的博客】MySQL备份通常采起全库备份、日志备份;MySQL出现故障后可使用全备份和日志备份将数据恢复到最后一个二进制日志备份前的任意位置或时间;mysql的二进制日志记录着该数据库的全部增删改的操做日志还包括了这些操做的执行时间</p>
Binlog的用途:主从同步、恢复数据库mysql
使用binlog工具有份sql
查看binlog是否开启,由于默认是关闭的数据库
从上图可知off为关闭状态,通常logbin为只读,在/etc/my.cnf下开启工具
重启数据库post
重启后在目录下查看是否生成bin日志,黄色表示为日志测试
建立数据库,表,数据spa
建立表的时候 auto_increment为自增3d
从新开始一个新的日志文件日志
flush logs; #从新生成新的二进制文件code
delete from tb1 where id=2; #删除id列中的序列号为2的数据方便测试
insert into tb1(name) values('tom'); #建立一个新的数据名为tom
查看数据
查看mysql上的二进制文件日志
查看二进制日志事件
- mysql> show binlog events;
- +------------------+------+----------------+-----------+-------------+-----------------------------------------------------------------------------------+
- | Log_name | Pos | Event_type | Server_id | End_log_pos | Info |
- +------------------+------+----------------+-----------+-------------+-----------------------------------------------------------------------------------+
- | mysql-bin.000001 | 4 | Format_desc | 1 | 123 | Server ver: 5.7.13-log, Binlog ver: 4 |
- | mysql-bin.000001 | 123 | Previous_gtids | 1 | 154 | |
- | mysql-bin.000001 | 154 | Anonymous_Gtid | 1 | 219 | SET @@SESSION.GTID_NEXT= 'ANONYMOUS' |
- | mysql-bin.000001 | 219 | Query | 1 | 316 | create database test1 |
- | mysql-bin.000001 | 316 | Anonymous_Gtid | 1 | 381 | SET @@SESSION.GTID_NEXT= 'ANONYMOUS' |
- | mysql-bin.000001 | 381 | Query | 1 | 525 | use `test1`; create table tb1(id int primary key auto_increment,name varchar(20)) |
- | mysql-bin.000001 | 525 | Anonymous_Gtid | 1 | 590 | SET @@SESSION.GTID_NEXT= 'ANONYMOUS' |
- | mysql-bin.000001 | 590 | Query | 1 | 663 | BEGIN |
- | mysql-bin.000001 | 663 | Table_map | 1 | 713 | table_id: 108 (test1.tb1) |
- | mysql-bin.000001 | 713 | Write_rows | 1 | 758 | table_id: 108 flags: STMT_END_F |
- | mysql-bin.000001 | 758 | Xid | 1 | 789 | COMMIT /* xid=10 */ |
- | mysql-bin.000001 | 789 | Anonymous_Gtid | 1 | 854 | SET @@SESSION.GTID_NEXT= 'ANONYMOUS' |
- | mysql-bin.000001 | 854 | Query | 1 | 927 | BEGIN |
- | mysql-bin.000001 | 927 | Table_map | 1 | 977 | table_id: 108 (test1.tb1) |
- | mysql-bin.000001 | 977 | Write_rows | 1 | 1026 | table_id: 108 flags: STMT_END_F |
- | mysql-bin.000001 | 1026 | Xid | 1 | 1057 | COMMIT /* xid=11 */ |
- | mysql-bin.000001 | 1057 | Rotate | 1 | 1104 | mysql-bin.000002;pos=4 | # 此处为日志轮换事件,执行flush logs引发的
- +------------------+------+----------------+-----------+-------------+-----------------------------------------------------------------------------------+
- 17 rows in set (0.00 sec)
查看指定二进制日志的事件(上面那个命令只能查看默认1的)
- mysql> show binlog events in 'mysql-bin.000002';
- +------------------+-----+----------------+-----------+-------------+---------------------------------------+
- | Log_name | Pos | Event_type | Server_id | End_log_pos | Info |
- +------------------+-----+----------------+-----------+-------------+---------------------------------------+
- | mysql-bin.000002 | 4 | Format_desc | 1 | 123 | Server ver: 5.7.13-log, Binlog ver: 4 |
- | mysql-bin.000002 | 123 | Previous_gtids | 1 | 154 | |
- | mysql-bin.000002 | 154 | Anonymous_Gtid | 1 | 219 | SET @@SESSION.GTID_NEXT= 'ANONYMOUS' |
- | mysql-bin.000002 | 219 | Query | 1 | 292 | BEGIN |
- | mysql-bin.000002 | 292 | Table_map | 1 | 342 | table_id: 108 (test1.tb1) |
- | mysql-bin.000002 | 342 | Delete_rows | 1 | 391 | table_id: 108 flags: STMT_END_F |
- | mysql-bin.000002 | 391 | Xid | 1 | 422 | COMMIT /* xid=14 */ |
- | mysql-bin.000002 | 422 | Anonymous_Gtid | 1 | 487 | SET @@SESSION.GTID_NEXT= 'ANONYMOUS' |
- | mysql-bin.000002 | 487 | Query | 1 | 560 | BEGIN |
- | mysql-bin.000002 | 560 | Table_map | 1 | 610 | table_id: 108 (test1.tb1) |
- | mysql-bin.000002 | 610 | Write_rows | 1 | 654 | table_id: 108 flags: STMT_END_F |
- | mysql-bin.000002 | 654 | Xid | 1 | 685 | COMMIT /* xid=15 */ |
- +------------------+-----+----------------+-----------+-------------+---------------------------------------+
- 12 rows in set (0.00 sec)
使用mysqlbinlog工具的-v(--verbose)选项,该选项会将行事件重构成被注释掉的伪SQL语句,若是想看到更详细的信息能够将该选项给两次如-vv,这样能够包含一些数据类型和元信息的注释内容,如
先切换到binlog所在的目录下
mysqlbinlog mysql-bin.000001
mysqlbinlog -v mysql-bin.000001
mysqlbinlog -vv mysql-bin.000001
-h,-P,-p,-u等,这些参数仅在指定了--read-from-remote-server后有效。
恢复导出binlog日志
恢复完成后查看表的数据是否完整
常见的选项有:
--start-datetime #从二进制日志中读取指定时间戳或者本地计算机时间以后的日志事件
--stop-datetime #从二进制日志中读取指定时间戳或者本地计算机时间以前的日志事件
--start-position #从二进制日志中读取指定position 事件位置做为开始
--stop-position #从二进制日志中读取指定position 事件位置做为事件截至
由于备份得时候把删除那项跳过了,因此id为2的zhangsan也恢复了
使用mysqldump备份恢复
它是用于备份和数据迁移的工具,通常在数据量比较小的状况下使用如几个G,当数据比较大的状况下建议不使用;mysqldump能够对单(多)个表、单(多)个数据库及全部数据库进行导出操做;
- mysqldump [options] db_name [tbl_name ...] #导出指定数据库或单个表
- mysqldump [options] --databases db_name ... #导出多个数据库
- mysqldump [options] --all-databases #导出全部
备份数据库test1
- mysqldump -p123456 --flush-logs test1 > /opt/test1.spl
- #备份整个数据库,而且从新开启一个新的binlog
- mysql -p123456 test1 </opt/test1.spl #从备份的目录中导入
建立数据测试mysqldump工具
查看数据
建立备份的目录及备份数据库和cp bin.000001二进制文件
清楚二进制00000.2以前的日志
删除数据测试
而后在进行备份第二个二进制文件
进行数据库恢复
查看表的数据是否恢复
上面数据已经所有恢复 但愿能帮到你