zhangli-s 发表于 2018-9-28 12:30:59

mysql大数据备份及恢复(一)

  Mysql大数据备份和恢复一
  MySQL备份一般采取全库备份、日志备份;MySQL出现故障后可以使用全备份和日志备份将数据恢复到最后一个二进制日志备份前的任意位置或时间;mysql的二进制日志记录着该数据库的所有增删改的操作日志还包括了这些操作的执行时间
  Binlog的用途:主从同步、恢复数据库
  使用binlog工具备份
  查看binlog是否开启,因为默认是关闭的

  从上图可知off为关闭状态,一般logbin为只读,在/etc/my.cnf下开启

  重启数据库

  重启后在目录下查看是否生成bin日志,黄色表示为日志
  创建数据库,表,数据

  创建表的时候 auto_increment为自增
  重新开始一个新的日志文件
  flush logs;                            #重新生成新的二进制文件

  delete from tb1 where>  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 db_name    #导出指定数据库或单个表
  mysqldump --databases db_name ...#导出多个数据库
  mysqldump --all-databases          #导出所有
  备份数据库test1
  mysqldump -p123456 --flush-logs test1 > /opt/test1.spl
  #备份整个数据库,并且重新开启一个新的binlog
  mysql -p123456 test1
页: [1]
查看完整版本: mysql大数据备份及恢复(一)