【引自攀岩生活博客】MySQL备份一般采用全库备份和日志备份;MySQL发生故障后,可以使用全量备份和日志备份将数据恢复到上次二进制日志备份之前的任意位置或时间;mysqlbinarylog记录所有数据库增删改查的操作日志,还包括这些操作的执行时间状态,一般logbin是只读的,打开/etc/my.cnf下的数据库重启查看是否重启后在目录下生成bin日志,黄色表示日志创建数据库,表,数据创建时auto_increment自增,重启一个新的日志文件flushlogs;#重新生成一个新的二进制文件deletefromtb1whereid=2;#删除id列中序号为2的数据,方便测试insertintotb1(name)values('tom');#创建一个名为tom的新数据viewdataviewbinaryfilelogsonmysqlviewbinarylogeventsmysql>showbinlogevents;+----------------+------+--------------+------------+------------+------------------------------------------------------------------------------------+|Log_name|Pos|Event_type|Server_id|End_log_pos|Info|+-------------------+------+----------------+------------+--------------+--------------------------------------------------------------------------------+|mysql-bin。000001|4|Format_desc|1|123|Serverver:5.7.13-log,Binlogver: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|createdatabasetest1||mysql-bin.000001|316|Anonymous_Gtid|1|381|SET@@SESSION.GTID_NEXT='ANONYMOUS'||mysql-bin.000001|381|Query|1|525|use`test1`;createtabletb1(idintprimarykeyauto_increment,namevarchar(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:108flags: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:108flags:STMT_END_F||mysql-bin.000001|1026|Xid|1|1057|COMMIT/*xid=11*/||mysql-bin.000001|1057|旋转|1|1104|mysql-bin.000002;pos=4|#这里是日志轮转事件,是执行flushlogs引起的+-----------------+-----+----------------+------------+------------+---------------------------------------------------------------------------+17rowsinset(0.00sec)查看指定二进制日志的事件(以上命令只能查看默认1)mysql>showbinlogeventsin'mysql-bin.000002';+----------------+-----+----------------+----------+------------+--------------------------------------+|Log_name|Pos|Event_type|Server_id|End_log_pos|Info|+----------------+-----+----------------+------------+------------+--------------------------------------+|mysql-bin.000002|4|Format_desc|1|123|服务器版本:5.7。13-日志,Binlogver: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:108flags: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:108flags:STMT_END_F||mysql-bin.000002|654|Xid|1|685|提交/*xid=15*/|+----------------+-----+---------------+------------+------------+------------------------------------+12rowsinset(0.00sec)使用mysqlbinlog工具的-v(--verbose)选项,将行事件重构为注释掉的Pseudo-SQLstatement,如果想看到更详细的信息,可以给这个选项两次,比如-vv,这样可以包含一些数据类型和元信息的注解,比如先切换到binlog所在的目录。mysqlbinlogmysql-bin。000001mysqlbinlog-vmysql-bin.000001mysqlbinlog-vvmysql-bin.000001-h,-P,-p,-u等这些参数只有在指定--read-from-remote-server后才有效。恢复并导出binlog日志后,查看表中数据是否完整。常用选项有:--start-datetime#从二进制日志中读取指定时间戳或本地计算机时间之后的日志事件--stop-datetime#从二进制日志中读取指定时间戳或本地计算机之前的日志事件time--start-position#从二进制日志中读取指定位置事件position作为开始--stop-position#从二进制日志中读取指定位置事件position作为事件截至目前,因为删除项被跳过备份,id为2的zhangsan也已经恢复。使用mysqldump备份恢复它备份和数据迁移工具一般在数据量比较小的时候使用,比如几G,数据比较大的时候不建议使用;mysqldump可用于单(多)表、单(多)库和所有数据库的导出;mysqldump[options]db_name[tbl_name...]#导出指定数据库或单个表mysqldump[options]--databasesdb_name...#导出多个数据库mysqldump[options]--all-databases#导出所有备份数据库test1mysqldump-p123456--flush-logstest1>/opt/test1.spl#备份整个数据库,重新打开一个新的binlogmysql-p123456test1
