设为首页 收藏本站
查看: 694|回复: 0

[经验分享] mysql大数据备份及恢复(一)

[复制链接]

尚未签到

发表于 2018-9-28 12:30:59 | 显示全部楼层 |阅读模式
  Mysql大数据备份和恢复一
  MySQL备份一般采取全库备份、日志备份;MySQL出现故障后可以使用全备份和日志备份将数据恢复到最后一个二进制日志备份前的任意位置或时间;mysql的二进制日志记录着该数据库的所有增删改的操作日志还包括了这些操作的执行时间
  Binlog的用途:主从同步、恢复数据库
  使用binlog工具备份
  查看binlog是否开启,因为默认是关闭的
DSC0000.png

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

  重启数据库
DSC0002.png

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

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

  delete from tb1 where>  insert into tb1(name) values('tom');       #创建一个新的数据名为tom
  查看数据
DSC0004.png

  查看mysql上的二进制文件日志
DSC0005.png

  查看二进制日志事件
  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日志
DSC0006.png

  恢复完成后查看表的数据是否完整
  常见的选项有:
  --start-datetime  #从二进制日志中读取指定时间戳或者本地计算机时间之后的日志事件
  --stop-datetime   #从二进制日志中读取指定时间戳或者本地计算机时间之前的日志事件
  --start-position  #从二进制日志中读取指定position 事件位置作为开始
  --stop-position   #从二进制日志中读取指定position 事件位置作为事件截至
DSC0007.png

  因为备份得时候把删除那项跳过了,所以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

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-603295-1-1.html 上篇帖子: mysql中flush命令 下篇帖子: aws中RDS修改mysql的编码
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表