热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

xtrabackup_Mysqlxtrabackup与MySQL5.7binlog实现数据即时点恢复

篇首语:本文由编程笔记#小编为大家整理,主要介绍了Mysql-xtrabackup与MySQL5.7binlog实现数据即时点恢复相关的知识,希望对你有一定的参考价值。

篇首语:本文由编程笔记#小编为大家整理,主要介绍了Mysql-xtrabackup 与MySQL5.7 binlog 实现数据即时点恢复相关的知识,希望对你有一定的参考价值。


 

mysql-xtrabackup 与MySQL5.7 binlog  实现数据即时点恢复

 一、数据库准备

1. rpm -e mariadb-libs postfix

  tar xf mysql-5.7.14-1.el7.x86_64.rpm-bundle.tar

2. 安装

yum install mysql-community-client-5.7.14-1.el7.x86_64.rpm mysql-community-server-5.7.14-1.el7.x86_64.rpm mysql-community-libs-compat-5.7.14-1.el7.x86_64.rpm mysql-community-libs-5.7.14-1.el7.x86_64.rpm mysql-community-common-5.7.14-1.el7.x86_64.rpm

3. 数据库初始化

5.6:mysql_install_db --user=mysql

有可能报错-> 解决方法:yum install perl-Data-Dumper -y

5.7: mysqld --initialize --user=mysql

  tail /var/log/mysqld.log

………

2017-12-01T02:18:54.261204Z 1 [Note] A temporary password is generated

for [email protected]: Xrpwbb#hP8yp

4. 启动服务并登录数据库

   [[email protected] ~]# mysql -uroot -pXrpwbb#hP8yp

mysql: [Warning] Using a password on the command line interface can be insecure.

ERROR 2002 (HY000): Can‘t connect to local MySQL server through socket ‘/var/lib/mysql/mysql.sock‘ (2)

报错解决:

[[email protected] ~]# chown -R mysql:mysql /var/lib/mysql

[[email protected] ~]# systemctl restart mysqld

5. 修改数据库密码

[[email protected] ~]# mysqladmin -uroot  -pXrpwbb#hP8yp password  123456

 

6. vim /etc/my.cnf

添加

.............

server-id=1

log-bin=mysql-bin                   //开启binlog日志

character-set-server=utf8            //设置字符集

validate_password=off                //关闭密码检测插件

7. 准备库表素材

[[email protected] ~]# mysql -uroot -p123456 -e ‘create database db1;‘

    [[email protected] ~]# mysql -uroot -p123456 -e ‘create table db1.t1(id int,name varchar(20));‘

    [[email protected] ~]# mysql -uroot -p123456 -e ‘insert into db1.t1 values(1,"a"),(2,"b"),(3,"c");‘

    [[email protected] ~]# mysql -uroot -p123456 -e ‘select * from db1.t1;‘

    mysql: [Warning] Using a password on the command line interface can be insecure.

    +------+------+

    | id   | name |

    +------+------+

    |    1 | a    |

    |    2 | b    |

    |    3 | c    |

    +------+------+

二. 安装percona-xtrabackup

yum install https://www.percona.com/downloads/XtraBackup/Percona-XtraBackup-2.4.8/binary/redhat/7/x86_64/percona-xtrabackup-24-2.4.8-1.el7.x86_64.rpm

1. 使用innobackup完全备份

    创建backup用户:

    [[email protected] ~]# mysql -uroot -p123456 -e "grant SELECT,RELOAD,SHOW DATABASES,LOCK TABLES,SUPER,REPLICATION CLIENT,CREATE TABLESPACE,PROCESS on *.* to [email protected]‘localhost‘ identified by ‘123456‘;"

完全备份:

    [[email protected] ~]# mkdir -p /bak/full

[[email protected]~]# innobackupex --user=backup --password=123456 --no-timestamp /mysqlbackup/full/full_`date +%F`

查看

[[email protected] full]# ls

full_2017-12-02-11:21:08

[[email protected] full]# cd full_2017-12-02-11\:21\:08/

[[email protected] full_2017-12-02-11:21:08]# ls

backup-my.cnf   ibdata1             sys                     xtrabackup_info

db1             mysql               xtrabackup_binlog_info  xtrabackup_logfile

ib_buffer_pool  performance_schema  xtrabackup_checkpoints

继续插入数据

[[email protected] ~]# mysql -uroot -p123456 -e ‘insert into db1.t1 values(4,"d");‘

    [[email protected] ~]# mysql -uroot -p123456 -e ‘insert into db1.t1 values(5,"e");‘

误操作删除

 [[email protected] ~]# mysql -uroot -p123456 -e ‘delete from db1.t1 where id>3;‘

继续插入数据

[[email protected] ~]# mysql -uroot -p123456 -e ‘insert into db1.t1 values(6,"f"),(7,"g");‘

误删除数据库

[[email protected] ~]# mysql -uroot -p123456 -e ‘drop database db1;‘

2.过程恢复操作

1) 刷新binlog日志

[[email protected] ~]# mysql -uroot -p123456 -e ‘flush logs;‘

2) 查看binlog日志

方法一

[[email protected] ~]# mysql -uroot -p123456 -e "show master status;"

mysql: [Warning] Using a password on the command line interface can be insecure.

+------------------+----------+--------------+------------------+-------------------+

| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |

+------------------+----------+--------------+------------------+-------------------+

| mysql-bin.000003 |      154 |              |                  |                   |

+------------------+----------+--------------+------------------+-------------------+

#一般查看前一个日志文件

    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.18-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 |         310 | create database db1  

 

………………………

方法二:使用mysqlbinlog

    #注意5.7版本,insert语句已经加密,默认看不到,查看时加上选项[[email protected] ~]# mysqlbinlog --base64-output=DECODE-ROWS –vv  /var/lib/mysql/mysql-bin.000002

/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=1*/;

    /*!50003 SET @[email protected]@COMPLETION_TYPE,COMPLETION_TYPE=0*/;

    DELIMITER /*!*/;

    # at 4

    #171202 13:28:13 server id 1  end_log_pos 123 CRC32 0xfbf051da     Start: binlog v 4, server v 5.7.18-log created 170810 20:35:03 at startup

    ROLLBACK/*!*/;

    # at 123

    #171202 13:29:03 server id 1  end_log_pos 154 CRC32 0x7761f86f     Previous-GTIDs

    # [empty]

    # at 154

    #171202 31:29:32 server id 1  end_log_pos 219 CRC32 0xb60eddec     Anonymous_GTID    last_committed=0  sequence_number=1

    SET @@SESSION.GTID_NEXT= ‘ANONYMOUS‘/*!*/;

    # at 219

    #171202 13:29:44 server id 1  end_log_pos 310 CRC32 0xbbe85598     Query  thread_id=5   exec_time=0   error_code=0

    SET TIMESTAMP=1502368628/*!*/;

    SET @@session.pseudo_thread_id=5/*!*/;

    SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1/*!*/;

    SET @@session.sql_mode=1436549152/*!*/;

    SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/;

    /*!\C utf8 *//*!*/;

    SET @@session.character_set_client=33,@@session.collation_cOnnection=33,@@session.collation_server=33/*!*/;

    SET @@session.lc_time_names=0/*!*/;

    SET @@session.collation_database=DEFAULT/*!*/;

 

    create database db1

    /*!*/;

    # at 310

    #171202 13:31:08 server id 1  end_log_pos 375 CRC32 0x3d54173c     Anonymous_GTID    last_committed=1  sequence_number=2

    SET @@SESSION.GTID_NEXT= ‘ANONYMOUS‘/*!*/;

    # at 375

    #171302 13:32:08 server id 1  end_log_pos 488 CRC32 0x10705617     Query  thread_id=6   exec_time=0   error_code=0

    SET TIMESTAMP=1502368628/*!*/;

    create table db1.t1(id int,name varchar(20))

 

…………………………………….

…………………..

 

3) 根据日志文件提取全备后数据



  •  基于时间点提取插入第4条和第5条数据

       [[email protected] ~]# mysqlbinlog /var/lib/mysql/mysql-bin.000002 --start-datetime="2017-12-02 13:47:41" --stop-datetime="2017-12-02 13:47:57" > time.sql



  •  基于位置点提取插入第6条和第7条数据

       [[email protected] ~]# mysqlbinlog /var/lib/mysql/mysql-bin.000002 --start-position="2306" --stop-position="2502" -r position.sql

    3.恢复全备

应用日志    

[[email protected] ~]# innobackupex --user=backup --password=123456 --apply-log /mysqlbackup/full/full_2017-12-02-13\:47\:17

[[email protected] ~]# systemctl stop mysqld

删除数据文件    

[[email protected] ~]# rm -rf /var/lib/mysql/*

还原数据  

[[email protected] ~]# innobackupex --user=backup --password=123456 --copy-back / mysqlbackup/full/full_2017-12-02-13\:47\:17

授权    

[[email protected] ~]# chown -R mysql.mysql /var/lib/mysql

[[email protected] ~]# systemctl restart mysqld

检查全备:

    [[email protected] ~]# mysql -uroot -p -e ‘select * from db1.t1;‘

    Enter password:

    +------+------+

    | id   | name |

    +------+------+

    |    1 | a    |

    |    2 | b    |

    |    3 | c    |

    +------+------+

   4. 增量恢复

    [[email protected] ~]# mysql -uroot -p

    Enter password:

    [[email protected] ~]# mysql -uroot -p -e ‘select * from db1.t1;‘

    Enter password:

    +------+------+

    | id   | name |

    +------+------+

    |    1 | a    |

    |    2 | b    |

    |    3 | c    |

    |    4 | d    |

    |    5 | e    |

    +------+------+

    [[email protected] ~]# mysql -uroot -p

    Enter password:

    [[email protected] ~]# mysql -uroot -p -e ‘select * from db1.t1;‘

    Enter password:

    +------+------+

    | id   | name |

    +------+------+

    |    1 | a    |

    |    2 | b    |

    |    3 | c    |

    |    4 | d    |

    |    5 | e    |

    |    6 | f    |

    |    7 | g    |

    +------+------+

 


推荐阅读
  • PDO MySQL
    PDOMySQL如果文章有成千上万篇,该怎样保存?数据保存有多种方式,比如单机文件、单机数据库(SQLite)、网络数据库(MySQL、MariaDB)等等。根据项目来选择,做We ... [详细]
  • 本文详细介绍了MysqlDump和mysqldump进行全库备份的相关知识,包括备份命令的使用方法、my.cnf配置文件的设置、binlog日志的位置指定、增量恢复的方式以及适用于innodb引擎和myisam引擎的备份方法。对于需要进行数据库备份的用户来说,本文提供了一些有价值的参考内容。 ... [详细]
  • 本文详细介绍了SQL日志收缩的方法,包括截断日志和删除不需要的旧日志记录。通过备份日志和使用DBCC SHRINKFILE命令可以实现日志的收缩。同时,还介绍了截断日志的原理和注意事项,包括不能截断事务日志的活动部分和MinLSN的确定方法。通过本文的方法,可以有效减小逻辑日志的大小,提高数据库的性能。 ... [详细]
  • PHP设置MySQL字符集的方法及使用mysqli_set_charset函数
    本文介绍了PHP设置MySQL字符集的方法,详细介绍了使用mysqli_set_charset函数来规定与数据库服务器进行数据传送时要使用的字符集。通过示例代码演示了如何设置默认客户端字符集。 ... [详细]
  • Oracle Database 10g许可授予信息及高级功能详解
    本文介绍了Oracle Database 10g许可授予信息及其中的高级功能,包括数据库优化数据包、SQL访问指导、SQL优化指导、SQL优化集和重组对象。同时提供了详细说明,指导用户在Oracle Database 10g中如何使用这些功能。 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • 本文讨论了在数据库打开和关闭状态下,重新命名或移动数据文件和日志文件的情况。针对性能和维护原因,需要将数据库文件移动到不同的磁盘上或重新分配到新的磁盘上的情况,以及在操作系统级别移动或重命名数据文件但未在数据库层进行重命名导致报错的情况。通过三个方面进行讨论。 ... [详细]
  • WhenIusepythontoapplythepymysqlmoduletoaddafieldtoatableinthemysqldatabase,itdo ... [详细]
  • Oracle优化新常态的五大禁止及其性能隐患
    本文介绍了Oracle优化新常态中的五大禁止措施,包括禁止外键、禁止视图、禁止触发器、禁止存储过程和禁止JOB,并分析了这些禁止措施可能带来的性能隐患。文章还讨论了这些禁止措施在C/S架构和B/S架构中的不同应用情况,并提出了解决方案。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • 本文介绍了使用Java实现大数乘法的分治算法,包括输入数据的处理、普通大数乘法的结果和Karatsuba大数乘法的结果。通过改变long类型可以适应不同范围的大数乘法计算。 ... [详细]
  • r2dbc配置多数据源
    R2dbc配置多数据源问题根据官网配置r2dbc连接mysql多数据源所遇到的问题pom配置可以参考官网,不过我这样配置会报错我并没有这样配置将以下内容添加到pom.xml文件d ... [详细]
  • 本文介绍了深入浅出Linux设备驱动编程的重要性,以及两种加载和删除Linux内核模块的方法。通过一个内核模块的例子,展示了模块的编译和加载过程,并讨论了模块对内核大小的控制。深入理解Linux设备驱动编程对于开发者来说非常重要。 ... [详细]
  • 本文介绍了sqlserver云存储和本地存储的区别,云存储是将数据存储在网络上,方便查看和调用;本地存储是将数据存储在电脑磁盘上,只能在存储的电脑上查看。同时提供了几种启动sqlserver的方法。此外,还介绍了如何导出数据库的步骤和工具。 ... [详细]
author-avatar
N01小贱_652
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有