美文网首页程序员Java
mysql备份与恢复:完全,增量备份,基于位置点,时间点恢复

mysql备份与恢复:完全,增量备份,基于位置点,时间点恢复

作者: 小美人鱼失去的腿 | 来源:发表于2020-09-27 15:21 被阅读0次

    理论介绍

    数据备份的重要性

    ●在生产环境中,数据的安全性至关重要

    ●任何数据的丢失都可能产生严重的后果

    ●造成数据丢失的原因:

    程序错误
    认为操作失误
    运算错误
    磁盘故障
    灾难等

    [图片上传失败...(image-799a75-1601017593330)]

    数据库备份的分类

    ●从物理与逻辑的角度,备份可分为:

    物理备份:对数据库操作系统的物理文件(如数据文件、日志文件等)的备份

    物理备份方法:
    冷备份(脱机备份)︰是在关闭数据库的时候进行的
    热备份(联机备份)∶数据库处于运行状态,依赖于数据库的日志文件
    温备份:数据库锁定表格(不可写入但可读)的状态下进行备份操作

    ●逻辑备份:对数据库逻辑组件(如:表等数据库对象)的备份

    ●从数据库的备份策略角度,备份可分为

    完全备份:每次对数据库进行完整的备份
    差异备份:备份自从上次完全备份之后被修改过的文件
    增量备份:只有在上次完全备份或者增量备份后被修改的文件才会被备份

    常见的备份方法

    ●物理冷备

    备份时数据库处于关闭状态,直接打包数据库文件
    备份速度快,恢复时也是最简单的

    ●专用备份工具mydump或mysqlhotcopy

    mysqldump常用的逻辑备份工具
    mysqlhotcopy仅拥有备份MylSAM和ARCHIVE表

    ●启用二进制日志进行增量备份

    进行增量备份,需要刷新二进制日志

    ●第三方工具备份

    免费的MySQL热备份软件Percona XtraBackup

    MySQL完全备份

    ■是对整个数据库、数据库结构和文件结构的备份

    ■保存的是备份完成时刻的数据库

    ■是差异备份与增量备份的基础

    优点: 缺点:
    备份与恢复操作简单方便 数据存在大量的重复
    占用大量的备份空间
    备份与恢复时间长

    数据库完全备份分类

    ■物理冷备份与恢复:
    关闭MySQL数据库
    使用tar命令直接打包数据库文件夹
    直接替换现有MySQL目录即可

    ■mysqldump备份与恢复
    MySQL自带的备份工具,可方便实现对MySQL的备份
    可以将指定的库、表导出为SQL脚本
    使用命令mysql导入备份的数据

    数据库备份与恢复

    MySQL数据库完全备份与恢复

    (1)环境搭建

    mysql> create database zz;
    Query OK, 1 row affected (0.00 sec)
    
    mysql> use auth;
    ERROR 1049 (42000): Unknown database 'auth'
    mysql> use zz;
    Database changed
    mysql> create table users (user_name CHAR(16) NOT NULL, user_passwd CHAR(48) DEFAULT '', PRIMARY KEY (user_name));
    Query OK, 0 rows affected (0.01 sec)
    
    mysql> insert into users(user_name,user_passwd) values('zhangsan', password('123456'));
    Query OK, 1 row affected, 1 warning (0.02 sec)
    
    mysql>  insert into users values('lisi', password('123456')); 
    Query OK, 1 row affected, 1 warning (0.00 sec)
    
    mysql> 
    mysql> show databases;
    +--------------------+
    | Database           |
    +--------------------+
    | information_schema |
    | mysql              |
    | performance_schema |
    | sys                |
    | zz                 |
    +--------------------+
    5 rows in set (0.00 sec)
    mysql> select * from zz.users;
    +-----------+-------------------------------------------+
    | user_name | user_passwd                               |
    +-----------+-------------------------------------------+
    | lisi      | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
    | zhangsan  | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
    +-----------+-------------------------------------------+
    2 rows in set (0.01 sec)
    
    mysql> flush privileges;
    Query OK, 0 rows affected (0.00 sec)
    
    

    (2)物理冷备份
    tar命令直接打包数据库文件夹

    [root@localhost ~]# systemctl stop mysqld
    
    #在根下新建个backup目录
    [root@localhost ~]# mkdir /backup
    
    #/usr/local/mysql/data备份压缩
    [root@localhost ~]# tar zcf /backup/mysql_all-$(date +%F).tar.gz /usr/local/mysql/data/
    
    [root@localhost ~]# cd /backup/
    [root@localhost backup]# ll
    总用量 1280
    -rw-r--r-- 1 root root 1310300 9月14 06:24 mysql_all-2020-09-14.tar.gz
    
    

    (3)模拟故障

    [root@localhost backup]#cd ~
    [root@localhost backup]# mkdir /bak  
    
    #将目录data数据移动到bak 里面去                       
    [root@localhost backup]# mv /usr/local/mysql/data/ /bak/
    [root@localhost backup]# cd /usr/local/mysql/
    
    #进mysql目录查看data
    [root@localhost mysql]# ll
    
    ####查看后data目录被移走 ,模拟故障成功
    总用量 64
    drwxr-xr-x  2 mysql mysql  4096 8月   4 19:19 bin
    -rw-r--r--  1 mysql mysql 17987 9月  13 2017 COPYING
    -rw-r--r--  1 mysql mysql 17987 9月  13 2017 COPYING-test
    drwxr-xr-x  2 mysql mysql    55 8月   4 19:19 docs
    drwxr-xr-x  3 mysql mysql  4096 8月   4 19:19 include
    drwxr-xr-x  4 mysql mysql   191 8月   4 19:19 lib
    drwxr-xr-x  4 mysql mysql    30 8月   4 19:19 man
    drwxr-xr-x 10 mysql mysql  4096 8月   4 19:20 mysql-test
    -rw-r--r--  1 mysql mysql  2478 9月  13 2017 README
    -rw-r--r--  1 mysql mysql  2478 9月  13 2017 README-test
    drwxr-xr-x 28 mysql mysql  4096 8月   4 19:20 share
    drwxr-xr-x  2 mysql mysql    90 8月   4 19:20 support-files
    drwxr-xr-x  3 mysql mysql    17 8月   4 19:19 usr
    
     ###data消失
    
    

    (3)将备份的数据库恢复

    [root@localhost backup]#cd ~
    
    ####根目录新建restore 目录
    [root@localhost ~]# mkdir /restore  
    
    #将备份数据库解压到 /restore目录下,看好时间节点时间节点不一样
    [root@localhost ~]# tar xzvf /backup/mysql_all-2018-08-12.tar.gz -C /restore/
    usr/local/mysql/data/
    usr/local/mysql/data/ibdata1
    usr/local/mysql/data/ib_logfile1
    usr/local/mysql/data/ib_logfile0
    .........省略........
    
    #将备份数据移动到到/usr/local/mysql中
    
    [root@localhost mysql]# mv /restore/usr/local/mysql/data/ /usr/local/mysql/
    [root@localhost ~]# cd /usr/local/mysql/
    
    [root@localhost mysql]# ll
    drwxr-x---   6 mysql mysql   157 9月  14 06:23 data
    
    [root@localhost mysql]# systemctl start mysqld 
    [root@localhost mysql]# systemctl status mysqld  
    
    [root@localhost mysql]# mysql -uroot -p -e 'select * from zz.users'
    Enter password: 
    +-----------+-------------------------------------------+
    | user_name | user_passwd                               |
    +-----------+-------------------------------------------+
    | lisi      | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
    | zhangsan  | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
    +-----------+-------------------------------------------+
    
    ##数据恢复成功
    
    

    mysqldump备份与恢复

    ■将指定的库、表、或全部的库导出为SQL脚本

    ■mysqldump备份需要和mysql进行数据交互,如果关闭mysql 则无法备份和恢复

    mysqldump [选项] 库名 [表名1] [表名2] … > /备份路径/备份文件名
    mysqldump [选项] --databases 库名1 [库名2] … > /备份路径/备份文件名
    mysqldump [选项] --all-databases > /备份路径/备份文件名

    需要的环境在上个列子中已经搭建,我们直接拿来用

    (1)数据库与表备份为sql脚本

    ###备份数据路mysql中的user表  ,文件保存在当前操作目录下面
    
    [root@localhost /]# mysqldump -u root -p mysql user >mysql-user.sql
    Enter password:  
    
    ####备份zz数据库     文件保存在当前操作目录下面
    [root@localhost /]# mysqldump -u root -p --databases zz >zz.sql
    Enter password:
    
    [root@localhost ~]# ll
    总用量 12
    -rw-r--r--  1 root root 5661 9月  14 06:50 mysql-user.sql
    -rw-r--r--  1 root root 2086 9月  14 06:50 zz.sql
    
    

    (2)表恢复操作
    mysql [选项] [库名] [表名] < /备份路径/备份文件名

    为了方便测试,我直接讲表导入新建的text库中

    [root@localhost /]# mysql -u root -p  
    Enter password:            
    mysql> show databases;
    +--------------------+
    | Database           |
    +--------------------+
    | information_schema |
    | mysql              |
    | performance_schema |
    | sys                |
    | zz                 |
    +--------------------+
    5 rows in set (0.00 sec)   
    
    #新建数据库text ,等下导表用###
    mysql> create database text;  
    mysql> exit
    
    [root@localhost opt]# mysql -u root -p text < mysql-user.sql 
    Enter password: 
    
    [root@localhost /]# mysql -u root -p -e 'show tables from text'
    Enter password:                                        
    +----------------+
    | Tables_in_text |
    +----------------+
    | user           |            ####导进去的表
    +----------------+
    
    

    (3)库恢复操作
    [root@localhost /]# mysql -u root -p -e ‘drop database auth’

    ######模拟故障    删除zz数据库
    [root@localhost /]# mysql -u root -p -e 'drop database zz' 
    
    [root@localhost ~]# mysql -u root -p -e 'show databases'
    Enter password: 
    +--------------------+
    | Database           |
    +--------------------+
    | information_schema |
    | mysql              |
    | performance_schema |
    | sys                |
    | text               |
    +--------------------+
    
    ####下面开始恢复
    [root@localhost ~]# mysql -u root -p < zz.sql
    
    [root@localhost ~]# mysql -u root -p -e 'show databases'
    Enter password: 
    +--------------------+
    | Database           |
    +--------------------+
    | information_schema |
    | mysql              |
    | performance_schema |
    | sys                |
    | text               |
    | zz                 |    ##导进去的数据库zz
    +--------------------+
    
    ##再看下表中数据是否还在
    [root@localhost ~]# mysql -uroot -p -e 'select * from zz.users'
    Enter password: 
    +-----------+-------------------------------------------+
    | user_name | user_passwd                               |
    +-----------+-------------------------------------------+
    | lisi      | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
    | zhangsan  | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
    +-----------+-------------------------------------------+
    
    

    MySQL数据库增量备份恢复

    ■增量备份的特点:
    与完全备份完全不同,增量备份没有重复数据,备份量不大,时间短;但其恢复麻烦,需要上次完成完全备份及备份之后的所有增量备份才能恢复。

    ■MySQL数据库二进制日志对备份的意义:
    二进制日志保存了所有更新或者可能更新数据的操作。二进制日志在启动mysql服务器后开始记录,并在文件达到二进制日志所设置的最大值或者接受到flush logs命令后重新创建新的日志文件,生成二进制的文件序列,并及时把这些日志文件保存到安全的存储位置,即可完成一个时间段的增量备份

    (1)首先搭建环境

    [root@localhost mysql]# vi /etc/my.cnf
    
    [mysqld]        找到这个模块,在最后一个=下添加
    log-bin=/usr/local/mysql/data/mysql-bin
    
    #这个地方开启二进制日志功能
    
    [root@localhost ~]# systemctl restart mysqld
    [root@localhost ~]# ll /usr/local/mysql/data/
    -rw-r----- 1 mysql mysql      154 9月  14 07:05 mysql-bin.000001
    -rw-r----- 1 mysql mysql       39 9月  14 07:05 mysql-bin.index
    
    [root@localhost opt]# mysql -u root -p
    Enter password: 
    mysql> create database client;
    Query OK, 1 row affected (0.01 sec)
    mysql> use client;
    
    mysql> create table info(身份证 char(20) not null,姓名 char(20) not null,姓别 char(4),用户ID号 char(10) not null,资费 int(10));
    mysql> insert into info values('000006','张三','男','016','10');
    mysql> insert into info values('000007','李四','女','017','91');
    mysql> insert into info values('000008','王五','女','018','23');
    mysql> select * from info;
    
    ####查看当前数据库binlog文件
    mysql> show master logs;   
    +------------------+-----------+
    | Log_name         | File_size |
    +------------------+-----------+
    | mysql-bin.000001 |      1492 |
    +------------------+-----------+
    1 row in set (0.00 sec)
    
    ##进行一次完全备份
    ##备份前需要将数据库加锁,防止数据在备份时写入。
    mysql> flush tables with read lock;
    
    mysql> exit
    Bye
    
    [root@localhost ~]# mkdir /mysql_bak
    [root@localhost opt]# mysqldump -u root -p client info >/mysql_bak/client_userinfo-$(date +%F).sql 
    
    [root@localhost ~]# ll /mysql_bak/
    -rw-r--r-- 1 root root 2055 9月  13 23:10 client_userinfo-2019-09-13.sql
    
    ##将下面的操作存入新的   mysql-bin 日志文件,直到下一个新的 mysql-bin出现
    [root@localhost mysql_bak]# mysqladmin -u root -p flush-logs
    [root@localhost ~]#  ll /usr/local/mysql/data/
    
    -rw-r----- 1 mysql mysql     1539 9月  13 23:11 mysql-bin.000001
    -rw-r----- 1 mysql mysql      154 9月  13 23:13 mysql-bin.000002
    -rw-r----- 1 mysql mysql       78 9月  13 23:11 mysql-bin.index
    
    

    flush tables with read lock;这个命令是全局读锁定,执行了命令之后所有库所有表都被锁定只读。一般都是用在数据库联机备份,这个时候数据库的写操作将被阻塞,读操作顺利进行

    (2)继续录入新的内容并进行增量备份

    [root@localhost mysql_bak]# mysql -u root -p
    Enter password: 
    mysql> unlock tables;             #######解除表锁。
    Query OK, 0 rows affected (0.00 sec)
    mysql> use client;
    mysql> insert into info values('000009','赵六','男','019','37');
    mysql> insert into info values('000010','孙七','男','020','36');
    mysql> select * from info;
    +-----------+--------+--------+-------------+--------+
    | 身份证    | 姓名   | 姓别   | 用户ID号    | 资费   |
    +-----------+--------+--------+-------------+--------+
    | 000006    | 张三   | 男     | 016         |     10 |
    | 000007    | 李四   | 女     | 017         |     91 |
    | 000008    | 王五   | 女     | 018         |     23 |
    | 000009    | 赵六   | 男     | 019         |     37 |
    | 000010    | 孙七   | 男     | 020         |     36 |
    +-----------+--------+--------+-------------+--------+
    5 rows in set (0.00 sec)
    
    mysql> exit
    Bye
    
    ##将下面的操作再次生成新的 mysql-bin 日志文件,上面所有的操作都在000002里面
    [root@localhost mysql_bak]# mysqladmin -u root -p flush-logs
    Enter password: 
    
    [root@localhost ~]# ll /usr/local/mysql/data
    -rw-r----- 1 mysql mysql     1539 9月  13 23:11 mysql-bin.000001
    -rw-r----- 1 mysql mysql      797 9月  13 23:13 mysql-bin.000002
    -rw-r----- 1 mysql mysql      154 9月  13 23:15 mysql-bin.000003
    
    [root@localhost ~]# cp /usr/local/mysql/data/mysql-bin.000002 /mysql_bak/
    
    

    (3)模拟操作失误 删除info表

    [root@localhost mysql_bak]# mysql -u root -p -e 'drop table client.user_info'
    Enter password: 
    [root@localhost mysql_bak]# mysql -u root -p -e 'select * from client.user_info'
    Enter password: 
    ERROR 1146 (42S02) at line 1: Table 'client.user_info' doesn't exist
    
    

    (4)恢复操作

    [root@localhost ~]# mysql -u root -p client < /mysql_bak/client_userinfo-2020-09-13.sql 
    Enter password: 
    [root@localhost mysql_bak]# mysql -u root -p -e'select * from client.info'
    Enter password: 
    +-----------+--------+--------+-------------+--------+
    | 身份证    | 姓名   | 姓别   | 用户ID号    | 资费   |
    +-----------+--------+--------+-------------+--------+
    | 000006    | 张三   | 男     | 016         |     10 |
    | 000007    | 李四   | 女     | 017         |     91 |
    | 000008    | 王五   | 女     | 018         |     23 |
    +-----------+--------+--------+-------------+--------+
    
    ## /mysql_bak/  这个路径我做了cp,你也可以/usr/local/mysql/data/
    [root@localhost ~]# mysqlbinlog --no-defaults /mysql_bak/mysql-bin.000002 |mysql -u root -p
    Enter password: 
    [root@localhost ~]#  mysql -u root -p -e'select * from client.info'
    Enter password: 
    +-----------+--------+--------+-------------+--------+
    | 身份证    | 姓名   | 姓别   | 用户ID号    | 资费   |
    +-----------+--------+--------+-------------+--------+
    | 000006    | 张三   | 男     | 016         |     10 |
    | 000007    | 李四   | 女     | 017         |     91 |
    | 000008    | 王五   | 女     | 018         |     23 |
    | 000009    | 赵六   | 男     | 019         |     37 |
    | 000010    | 孙七   | 男     | 020         |     36 |
    +-----------+--------+--------+-------------+--------+
    
    

    基于位置的恢复

    (1)恢复数据到指定位置
    mysqlbinlog --stop-position=’操作 id’ 二进制日志 |mysql -u 用户名 -p 密码

    环境上面已经搭建完毕

    #删除表再查看有没有这个表
    [root@localhost mysql_bak]# mysql -uroot -p -e 'drop table client.info'
    Enter password:
    
    [root@localhost mysql_bak]# mysql -uroot -p -e 'select * from client.info'
    Enter password: 
    ERROR 1146 (42S02) at line 1: Table 'client.info' doesn't exist
    
    [root@localhost mysql_bak]# mysql -u root -p client < /mysql_bak/client_info-2018-08-14.sql 
    Enter password:
    
    [root@localhost ~]# mysql -u root -p -e'select * from client.info'
    Enter password: 
    +-----------+--------+--------+-------------+--------+
    | 身份证    | 姓名   | 姓别   | 用户ID号    | 资费   |
    +-----------+--------+--------+-------------+--------+
    | 000006    | 张三   | 男     | 016         |     10 |
    | 000007    | 李四   | 女     | 017         |     91 |
    | 000008    | 王五   | 女     | 018         |     23 |
    +-----------+--------+--------+-------------+--------+
    
    
    ##使用这条命令可以将无规则乱码的二进制文件编排
    
    [root@localhost ~]# mysqlbinlog --no-defaults --base64-output=decode-rows -v /mysql_bak/mysql-bin.000002
    
    # at 293
    #180815  6:07:34 server id 1  end_log_pos 359 CRC32 0x3ccdc62e  Table_map: `client`.`user_info` mapped to number 221
    # at 359
    #180815  6:07:34 server id 1  end_log_pos 421 CRC32 0x55f72453  Write_rows: table id 221 flags: STMT_END_F
    ### INSERT INTO `client`.`user_info`
    ### SET
    ###   @1='000009'
    ###   @2='赵六'
    ###   @3='男'
    ###   @4='019'
    ###   @5=37
    # at 421
    #180815  6:07:34 server id 1  end_log_pos 452 CRC32 0x45fd2af6  Xid = 50
    COMMIT/*!*/;
    # at 452
    #180815  6:07:39 server id 1  end_log_pos 517 CRC32 0xa553503b  Anonymous_GTID  last_committed=1      sequence_number=2        rbr_only=yes
    /*!50718 SET TRANSACTION ISOLATION LEVEL READ COMMITTED*//*!*/;
    SET @@SESSION.GTID_NEXT= 'ANONYMOUS'/*!*/;
    # at 517
    #180815  6:07:39 server id 1  end_log_pos 591 CRC32 0x02ad5ee9  Query   thread_id=7     exec_time=0   error_code=0
    SET TIMESTAMP=1534284459/*!*/;
    BEGIN
    /*!*/;
    # at 591
    #180815  6:07:39 server id 1  end_log_pos 657 CRC32 0x3f478909  Table_map: `client`.`user_info` mapped to number 221
    # at 657
    #180815  6:07:39 server id 1  end_log_pos 719 CRC32 0xb478e1c5  Write_rows: table id 221 flags: STMT_END_F
    ### INSERT INTO `client`.`user_info`
    ### SET
    ###   @1='000010'
    ###   @2='孙七'
    ###   @3='男'
    ###   @4='020'
    ###   @5=36
    # at 719
    #180815  6:07:39 server id 1  end_log_pos 750 CRC32 0xe681426b  Xid = 51
    COMMIT/*!*/;
    # at 750
    #180815  6:07:59 server id 1  end_log_pos 797 CRC32 0xbc922301  Rotate to mysql-bin.000003  pos: 4
    SET @@SESSION.GTID_NEXT= 'AUTOMATIC' /* added by mysqlbinlog */ /*!*/;
    DELIMITER ;
    
    

    (2)#如果我只想要赵六的数据恢复,该怎么办?找到赵六结束的at 数字,不要紧挨着赵六的at,要隔一个最好

    通过上面的配置文件,我们看到赵六下面的 at 517,那就以这个为结束点,恢复备份

    
    [root@localhost ~]# mysqlbinlog --no-defaults --stop-position='517' /mysql_bak/mysql-bin.000002 |mysql -u root -p
    
    [root@localhost ~]# mysql -u root -p -e'select * from client.info'
    Enter password: 
    +-----------+--------+--------+-------------+--------+
    | 身份证    | 姓名   | 姓别   | 用户ID号    | 资费   |
    +-----------+--------+--------+-------------+--------+
    | 000006    | 张三   | 男     | 016         |     10 |
    | 000007    | 李四   | 女     | 017         |     91 |
    | 000008    | 王五   | 女     | 018         |     23 |
    | 000009    | 赵六   | 男     | 019         |     37 |
    +-----------+--------+--------+-------------+--------+
    
    

    (3)#如果我只想让孙七的数据数据恢复,怎么办?找到孙七开始前的at 数字,不要紧挨着孙七的at,要隔一个最好

    通过上面的配置文件,我们看到孙七上面的 at 657,那就以这个为开始点,恢复备份

    
    [root@localhost ~]# mysql -u root -p -e 'drop table client.info'
    Enter password: 
    [root@localhost ~]# mysql -u root -p client < /mysql_bak/client_info-2018-08-15.sql 
    Enter password: 
    [root@localhost ~]# mysqlbinlog --no-defaults --start-position='657' /mysql_bak/mysql-bin.000002 |mysql -u root -p        ####操作的节点附近即可
    Enter password: 
    [root@localhost ~]# mysql -u root -p -e'select * from client.info'
    Enter password: 
    +-----------+--------+--------+-------------+--------
    
    | 身份证    | 姓名   | 姓别   | 用户ID号    | 资费   |
    +-----------+--------+--------+-------------+--------+
    | 000006    | 张三   | 男     | 016         |     10 |
    | 000007    | 李四   | 女     | 017         |     91 |
    | 000008    | 王五   | 女     | 018         |     23 |
    | 000010    | 孙七   | 男     | 020         |     36 |
    +-----------+--------+--------+-------------+--------+
    
    

    总结:

    基于位置恢复的操作,节点不要选择太靠近操作的节点,否则容易恢复失败。

    基于时间恢复

    跟上面差不多,我怕么可以看到at 517下一行有 180815 6:07:39 ## 基于这个时间点,可以以这个时间为结束时间,恢复这个时间之前的数据

    也可以不要之前的数据,以这个时间点为开始,恢复这个时间之后的数据
    (1)只需要赵六的

    [root@localhost ~]# mysql -u root -p -e 'drop table client.info'
    Enter password: 
    [root@localhost ~]# mysql -u root -p client < /mysql_bak/client_info-2018-08-15.sql 
    Enter password: 
    [root@zeng ~]# mysql -u root -p -e'select * from client.info'
    Enter password: 
    +-----------+--------+--------+-------------+--------+
    | 身份证    | 姓名   | 姓别   | 用户ID号    | 资费   |
    +-----------+--------+--------+-------------+--------+
    | 000006    | 张三   | 男     | 016         |     10 |
    | 000007    | 李四   | 女     | 017         |     91 |
    | 000008    | 王五   | 女     | 018         |     23 |
    +-----------+--------+--------+-------------+--------+
    
    ########时间戳不要弄错了
    
    [root@localhost ~]# mysqlbinlog --no-defaults --stop-datetime='2018-8-15 6:07:39' /mysql_bak/mysql-bin.000002 |mysql -u root -p
    Enter password: 
    [root@localhost ~]# mysql -u root -p -e'select * from client.info'
    Enter password: 
    +-----------+--------+--------+-------------+--------+
    | 身份证    | 姓名   | 姓别   | 用户ID号    | 资费   |
    +-----------+--------+--------+-------------+--------+
    | 000006    | 张三   | 男     | 016         |     10 |
    | 000007    | 李四   | 女     | 017         |     91 |
    | 000008    | 王五   | 女     | 018         |     23 |
    | 000009    | 赵六   | 男     | 019         |     37 |
    +-----------+--------+--------+-------------+--------+
    
    

    (3)只需要孙七的的

    [root@localhost ~]# mysql -u root -p -e 'drop table client.info'
    Enter password: 
    [root@localhost ~]# mysql -u root -p client < /mysql_bak/client_info-2018-08-15.sql 
    Enter password: 
    
    ###时间戳不要弄错了,根据的你的日志文件来
    [root@localhost ~]# mysqlbinlog --no-defaults --start-datetime='2018-8-15 15:33:48' /mysql_bak/mysql-bin.000002 |mysql -u root -p
    Enter password: 
    [root@localhost ~]# mysql -u root -p -e'select * from client.info'
    Enter password: 
    +-----------+--------+--------+-------------+--------+
    | 身份证    | 姓名   | 姓别   | 用户ID号    | 资费   |
    +-----------+--------+--------+-------------+--------+
    | 000006    | 张三   | 男     | 016         |     10 |
    | 000007    | 李四   | 女     | 017         |     91 |
    | 000008    | 王五   | 女     | 018         |     23 |
    | 000010    | 孙七   | 男     | 020         |     36 |
    +-----------+--------+--------+-------------+--------+
    
    

    总结:
    如果你学了我的操作手法,那么生产环境严格按照此要求来

    相关文章

      网友评论

        本文标题:mysql备份与恢复:完全,增量备份,基于位置点,时间点恢复

        本文链接:https://www.haomeiwen.com/subject/kpsfuktx.html