1.数据库备份与恢复
逻辑备份工具 mysqldump
使用mysql 恢复数据库
 
1.1备份MySQL服务器上的所有库
]# mysqldump -u root -p123456 --all-databases > /root/alldb.sql
l]# file /root/alldb.sql  //确认备份文件类型
/root/alldb.sql: UTF-8 Unicode English text, with very long lines
 
1.2只备份指定的某一个库
]# mysqldump -u root -p123456 userdb > userdb.sql
 
1.3 同时备份指定的多个库
]# mysqldump -u root -p123456 -B mysql userdb > mysql+test+userdb.sql
 
1.1.4使用mysql命令从备份中恢复数据库、表
创建名为userdb2的新库
mysql> CREATE DATABASE userdb2;
导入备份文件,在新库中重建表及数据
]# mysql -u root -p123456 userdb2 < /root/userdb.sql
前面备份过,现在恢复看是否有数据
确认新库正常,启用新库
mysql> USE userdb2;
mysql> SHOW TABLES;
 
2 使用binlog日志
利用binlog恢复库表,要求如下:
启用binlog日志
创建db1库tb1表,插入3条记录
删除tb1表中刚插入的3条记录
使用mysqlbinlog恢复删除的3条记录
 
2.1 启用binlog日志
]# vim  /etc/my.cnf
[mysqld]
.. ..
server_id=50
log-bin=mysql50
binlog_format=STATEMENT                           
//在Mysql5.7中,binlog日志格式默认为ROW,但它不记录sql语句上下文相关信息。需要将binlog日志格式修改为STATEMENT
]# systemctl restart mysqld.service
]# ls /var/lib/mysql/mysql50*
/var/lib/mysql/mysql50-bin.000001 /var/lib/mysql/mysql50-bin.index
其中mysql50-bin.index文件记录了当前保持的二进制文件列表
]# cat /var/lib/mysql/mysql50-bin.index 
./mysql50-bin.000001
 
重启MySQL服务程序,或者执行SQL操作“FLUSH LOGS;”,会生成一份新的日志
]# ls /var/lib/mysql/mysql50*
/var/lib/mysql/mysql50-bin.000001  /var/lib/mysql/mysql50-bin.index
/var/lib/mysql/mysql50-bin.000002
]# cat /var/lib/mysql/mysql50-bin.index 
./mysql50-bin.000001
./mysql50-bin.000002
 
2.2 利用binlog日志重做数据库操作
 
删除003以前所有日志
mysql> purge master logs to 'mysql50-bin.000003'
删除所有日志
mysql> reset master;
 
创建db1.tb1,插入值
mysql> CREATE DATABASE db1;
mysql> USE db1;
 
mysql> CREATE TABLE tb1(
    -> id int(10) NOT NULL,
    -> name varchar(24)
    -> );
 
mysql> INSERT INTO tb1 VALUES
    -> (1,'AA'),
    -> (2,'BB'),
    -> (3,'CC');
 
mysql> SELECT * FROM tb1;
+----+------+
| id | name |
+----+------+
|  1 | AA   |
|  2 | BB   |
|  3 | CC   |
+----+------+
 
删除tb1数据
mysql> DELETE FROM tb1;
mysql> SELECT * FROM tb1;
Empty set (0.00 sec)
 
2.3 通过binlog日志恢复表记录
查看mysql50-bin.000002日志内容
]# mysqlbinlog /var/lib/mysql/mysql50-bin.000002
# at 645
#190213 17:48:53 server id 50  end_log_pos 768 CRC32 0x4d5aae4a Querythread_id=5exec_time=0error_code=0
SET TIMESTAMP=1550051333/*!*/;
INSERT INTO tb1 VALUES
(1,'AA'),
(2,'BB'),
(3,'CC')
/*!*/;
# at 768
#190213 17:48:53 server id 50  end_log_pos 799 CRC32 0x268de03a Xid = 20
COMMIT/*!*/;
# at 799
 
]#  mysqlbinlog \
> --start-position=645 \
> --stop-position=799 \
(  --start-datetime="2017-04-12 12:06:55" \ )
(  --stop-datetime="2017-04-12 12:07:23" \  )
> /var/lib/mysql/mysql50-bin.000002 | mysql -u root -p1234567
mysql> SELECT * FROM tb1;
+----+------+
| id | name |
+----+------+
|  1 | AA   |
|  2 | BB   |
|  3 | CC   |
+----+------+
 
3.innobackupex备份工具
安装percona软件包
innobackupex完整备份、增量备份操作。
恢复数据
 
3.1 安装XtraBackup软件包
]# yum -y install libev-4.15-1.el6.rf.x86_64.rpm
]# yum -y install perl-DBD-MySQL perl-Digest-MD5
]# yum -y install percona-xtrabackup-24-2.4.7-1.el7.x86_64.rpm
 
3.2 innobackupex完整备份、增量备份操作
--host 主机名
--port 3306
--user 用户名
--password 密码
--databases="库名"
--databases="库1 库2"
--databases="库.表"
--no-timestamp 不用日期命名备份文件存储的子目录,使用备份的数据库名做备份目录名
--no-timestmap 不使用日期命名备份目录名
]# innobackupex --user=root --password=1234567 /backup --no-timestamp
...
190213 19:38:53 completed OK!
]# du -sh /backup
27M/backup
]# ls /backup/
backup-my.cnf   mysql               test                    xtrabackup_checkpoints
db1             performance_schema  userdb                  xtrabackup_info
ib_buffer_pool  qqq                 userdb2                 xtrabackup_logfile
ibdata1         sys                 xtrabackup_binlog_info
 
3.3 做一个增量备份
mysql> USE db1;
mysql> CREATE TABLE mytb(id int(4), name varchar(24));
mysql> INSERT INTO mytb VALUES \
    -> (1,'bon'), \
    -> (2,'bo');
mysql> SELECT * FROM mytb;
+------+------+
| id   | name |
+------+------+
|    1 | bon  |
|    2 | bo   |
+------+------+
以前一次保存到/backup的完整备份为基础,做一个增量备份,保存到/incr01/,
指定增量备份参照的基本目录(完整备份目录)需要用到选项--incremental-basedir
]# innobackupex --user=root --password=1234567 --incremental /incr01 --incremental-basedir=/backup --no-timestamp
]# du -sh /incr01
3.9M/incr01
 
3.3 再做一个增量备份
mysql> CREATE TABLE mytb2(id int(4), name varchar(24));
mysql> INSERT INTO mytb2 VALUES \
    -> (1,'aa'),
    -> (2,'bb');
mysql> SELECT * FROM mytb2;
+------+------+
| id   | name |
+------+------+
|    1 | aa   |
|    2 | bb   |
+------+------+
]# innobackupex --user=root --password=1234567 --incremental /incr02 --incremental-basedir=/incr01 --no-timestamp
]# du -sh /incr02
4.1M/incr02
 
3.4 恢复数据
mysql> DROP DATABASE db1;
]# systemctl stop mysqld.service 
]# cat /backup/xtrabackup_checkpoints 
backup_type = full-backuped
from_lsn = 0
to_lsn = 2994642
last_lsn = 2994651
compact = 0
recover_binlog_info = 0
 
准备恢复“完整备份”
完成准备以后,最终/backup可用来重建MySQL服务器。
这种情况下,需要先做一个“--apply-log --redo-only ”的准备操作,以确保数据一致性:
]# innobackupex --user=root --password=1234567 --apply-log --redo-only /backup/
]# cat /backup/xtrabackup_checkpoints
backup_type = log-applied
from_lsn = 0
to_lsn = 2994642
last_lsn = 2994651
compact = 0
recover_binlog_info = 0
 
合并/incr01
]# innobackupex --user=root --password=1234567 --apply-log --redo-only /backup/ --incremental-dir=/incr01
]# cat /backup/xtrabackup_checkpoints
backup_type = log-applied
from_lsn = 0
to_lsn = 3000744
last_lsn = 3000753
compact = 0
recover_binlog_info = 0
 
合并/incr02
]# innobackupex --user=root --password=1234567 --apply-log --redo-only /backup/ --incremental-dir=/incr02
 
]# cat /backup/xtrabackup_checkpoints
backup_type = log-applied
from_lsn = 0
to_lsn = 3011372
last_lsn = 3011381
compact = 0
recover_binlog_info = 0
 
]# cat /incr02/xtrabackup_checkpoints
backup_type = incremental
from_lsn = 3000744
to_lsn = 3011372
last_lsn = 3011381
compact = 0
recover_binlog_info = 0
 
删除所有数据
]# rm -rf /var/lib/mysql/*
恢复所有数据
]# innobackupex --copy-back /backup
]# ls -ld /var/lib/mysql/*
drwxr-x--- 2 root root      116 2月  13 20:37 /var/lib/mysql/db1
-rw-r----- 1 root root      480 2月  13 20:37 /var/lib/mysql/ib_buffer_pool
-rw-r----- 1 root root 12582912 2月  13 20:37 /var/lib/mysql/ibdata1
...
]# chown -R mysql:mysql /var/lib/mysql
]# ls -ld /var/lib/mysql/*
drwxr-x--- 2 mysql mysql      116 2月  13 20:37 /var/lib/mysql/db1
-rw-r----- 1 mysql mysql      480 2月  13 20:37 /var/lib/mysql/ib_buffer_pool
-rw-r----- 1 mysql mysql 12582912 2月  13 20:37 /var/lib/mysql/ibdata1
...
 
查看
]# systemctl start mysqld.service 
]# mysql -uroot -p1234567 -e "select * from db1.mytb2"
mysql: [Warning] Using a password on the command line interface can be insecure.
+------+------+
| id   | name |
+------+------+
|    1 | aa   |
|    2 | bb   |
+------+------+

三十三.mysqldump 实时增量备份 、innobackupex的更多相关文章

  1. NFS +inotify+rsync 实现数据的远程挂载与实时增量备份

    NFS 网络文件系统 功能: 用户可以像访问自己的本地文件系统一样使用网络中的远端系统上的文件 原理: 用户进程-->RPC服务(portman)-->tcp/ip协议栈-->远端主 ...

  2. mysql实时增量备份

    采用binlog日志的好处 掌控所有更改操作,必要时可用于恢复数据 数据库主从复制的必要条件 [root@localhost~]# vim /etc/my.cnf [mysqld] .. .. log ...

  3. rsync 实现实时增量备份

    Rsync + Crontab实现定时文件同步(首次全量+后续增量) 2015-04-14 19:02:11 标签:增量更新 rsync crontab 原创作品,允许转载,转载时请务必以超链接形式标 ...

  4. MySQL集群-PXC搭建以及使用innobackupex工具进行全局备份和增量备份

    环境:centos7 vm1:10.154.47.236 vm2:10.154.52.189 vm3:10.105.12.50 目的:pxc使用三个节点构建mysql集群,使用innobackupex ...

  5. xtrabackup之Innobackupex增量备份及恢复

    演示增量备份 #启动一个全备 innobackupex \ > --defaults-/my.cnf \ > --host=127.0.0.1 \ > --user=xtrabk \ ...

  6. innobackupex做MySQL增量备份及恢复【转】

    创建备份用户 mysql> grant process,reload,lock tables,replication client on *.* to 'backup'@'localhost' ...

  7. innobackupex自动备份脚本(增量备份,自动压缩)

    #!/bin/bash #日期转为天数 function date2days { echo "$*" | awk '{ z=-$)/); y=$+-z; m=$+*z-; j=*m ...

  8. Percona-XtraBackup系列三:增量备份恢复

    1:创建测试表和测试库如果需要快速建立测试表和库的话,参考之前写的这篇博客:http://www.cnblogs.com/xiaoit/p/3376685.html create database b ...

  9. innobackupex实现对MySQL的增量备份与还原

    备份增量备份是基于完整备份的,所以我们需要先做一次完整备份: innobackupex --defaults-file=/etc/my.cnf --user root --password cheng ...

随机推荐

  1. centos7 为使用su命令的用户添加pam授权认证

    # 查看用户所属哪个组 groups 用户名 #查看当前有哪些用户运行程序 ps -aux|awk '{print $1}'|sort -rn|uniq -c|sort -rn # 清理不再使用的用户 ...

  2. python数据库基础

    1.数据类型:(使用原则:够用就行,尽量使用范围小的) 整数:int,bit 小数:decimal 字符串:varchar(可变长度),char(固定长度字符串) 日期时间:date,time,dat ...

  3. PAT(B) 1063 计算谱半径(Java)

    题目链接:1063 计算谱半径 (20 point(s)) 题目描述 在数学中,矩阵的"谱半径"是指其特征值的模集合的上确界.换言之,对于给定的 n 个复数空间的特征值 { a​1 ...

  4. 【数论】小A进学校

    小A进学校 题目描述 近日,清华大学挖出来一个明清古墓.小A决定冒充考古系科研人员去盗墓.他遇到的第一个难关是来自校门口保安的质疑,因为小没有清华学生证,所以保安决定通过问问题的方式验证小A的身份. ...

  5. Oracle通过ODBC链接SqlServer数据库

    原网址:https://www.cnblogs.com/jijm123/p/11598515.html 第一步.创建ODBC数据源 这一步要考虑数据源是32位还是64位的问题,其实就是选择不同的exe ...

  6. R_基础_01

    R语言介绍:R是一种区分大小写的解释型语言.R中有多种数据类型,包括向量.矩阵.数据框(与数据集类似)以及列表(各种对象的集合),广泛用于数据统计. R的特点:一次交互式会话期间的所有数据对象都被保存 ...

  7. 【js】字符串反转(倒序)的多种处理方式

    今天发布一篇关于字符串反转的几种方式(一种问题的解决方案不是只有一种). 方式1: 这种方式比较简单,推荐使用 字符串转数组,反转数组,数组转字符串. split(""):根据空字 ...

  8. 【Java】接口和抽象类总结

    一.接口 1.1 成员变量(其实是常量) 1.2 方法 二.抽象类 2.1 成员变量 2.2 方法 一.接口 1.1 成员变量(其实是常量) 成员变量默认用 public static final修饰 ...

  9. 解决mysql登录警告问题

    一.前言 我们在登录mysql的时候经常会看到一句警告: Warning: Using a password on the command line interface can be insecure ...

  10. Docker本地镜像上传到阿里云仓库

    登录阿里云 在容器镜像服务中先创建命名空间 随后创建镜像仓库 我使用的代码源是本地仓库 创建后点击仓库的管理 就可以看到阿里云提供的操作指南 (下面的操作每个人都不同,详情查看阿里云的操作指南) 输入 ...