1. 备份成镜像

备份:

./mysqlbackup --socket=/usr/local/mysql-advanced-5.6.23-linux-glibc2.5-x86_64/data/mysql.sock --backup-image=/images/20161008.mbi --backup-dir=/tmp/backup  backup-to-image

其中,backup-dir是用来存储临时文件的。该目录下的文件可以直接删除掉。每次备份只需要备份这个镜像文件即可。

/images目录本身必须存在。

如果备份的是镜像,则首先必须把镜像恢复到备份目录中

./mysqlbackup --backup-image=/images/20161008.mbi --backup-dir=/backup image-to-backup-dir

应用日志

./mysqlbackup --backup-dir=/backup apply-log

恢复

./mysqlbackup --defaults-file=/backup/server-my.cnf --backup-dir=/backup/ copy-back   

2. 压缩备份

备份

./mysqlbackup --socket=/usr/local/mysql-advanced-5.6.23-linux-glibc2.5-x86_64/data/mysql.sock --backup-dir=/backup --compress --compress-level=9 backup

应用日志

./mysqlbackup --socket=/usr/local/mysql-advanced-5.6.23-linux-glibc2.5-x86_64/data/mysql.sock --backup-dir=/backup --uncompress apply-log

恢复

./mysqlbackup --defaults-file=/backup/server-my.cnf --backup-dir=/backup/ copy-back

3. 基于库的复制

非innodb表的复制

mysqlbackup中提供了这样一个参数--databases,很多人会想当然的以为这个就是用来实现基于库的复制,但实际上并不是,首先看看--help中的说明

--databases=LISTThis option is used to filter the list of non-innodbtables that needs to be backed up. To filter innodb tables,use --include option.The argument specifies space separated list of database/tablenames of the following form:"db_name[.table_name] db_name1[.table_name1] ...".If this option is not specified all databases will be backed up. Also, if the specified database does not matchwith any single database/table, then all databases will bebacked up.

意思--database只是用来备份非innodb表的,支持两种方式的写法,--databases=test和--databases=test.test1。

令人意外的是,如果指定了test库进行复制,则其它所有的非innodb库都不会复制,譬如,mysql库中的user表,performance_schema库。

而且,上述说明中还提到了“if the specified database does not match with any single database/table, then all databases will be backed up.”,意思是如果指定的数据库或表实际上不存在,则所有的非innodb表都会备份。但实际测试的恰恰相反,如果指定的不存在,则其它所有的非innodb表都不会被复制。

所以,--databases这种场景基本上可以忽略,因为对于非innodb表来说,可以直接copy,无需用这种方式来备份,而且,指定了特定表,而没有指定mysql库的话,即便执行了恢复操作,也无法启动数据库。如果要复制多个非innodb表,可使用:--databases='test.test mysql'

innodb表的复制

下面重点看一下innodb表的复制,这个涉及到--include参数

  --include=REGEXP  Backup only those per-table innodb data files which match the regular expression (REGEXP). For each table with a per-table data file, a string of the form db_name.table_nameis checked against the regular expression (REGEXP). If the REGEXP matches db_name.table_name, the table is included. The REGEXP should be of POSIX 1003.2 'extended' form. 

可以看出--include参数是用正则表达式来匹配的。

譬如下面备份语句,只备份db1库和test库

./mysqlbackup --socket=/usr/local/mysql-advanced-5.6.23-linux-glibc2.5-x86_64/data/mysql.sock --backup-dir=/backup --include='(db1|test)\..*' backup

我这是只备份了db1库和test库。

但是这种备份方式有点问题,这个在恢复的时候会体现出来。

1. 没有备份mysql库中的几张innodb表。

2. 备份了所有表的frm文件,包括没有备份的innodb表,这样,在恢复的时候会报如下错误,因为只有frm文件,而没有ibd文件。虽然并没有影响数据库的正常启动,但终究不太好。

2016-09-28 10:05:16 1989 [ERROR] InnoDB: Failed to find tablespace for table '"test1"."test1"' in the cache. Attempting to load the t
ablespace with space id 25.2016-09-28 10:05:16 7fc1ac33e700  InnoDB: Operating system error number 2 in a file operation.
InnoDB: The error means the system cannot find the path specified.
2016-09-28 10:05:16 1989 [ERROR] InnoDB: Could not find a valid tablespace file for 'test1/test1'. See http://dev.mysql.com/doc/refma
n/5.6/en/innodb-troubleshooting-datadict.html for how to resolve the issue.2016-09-28 10:05:16 7fc1ac33e700 InnoDB: cannot calculate statistics for table "test1"."test1" because the .ibd file is missing. For
help, please refer to http://dev.mysql.com/doc/refman/5.6/en/innodb-troubleshooting.html

所以,在这种备份方式下,需人为的删除这些表的frm文件。

官方文档中其实还提到了两个参数:--only-innodb和 --only-innodb-with-frm。

如果指定了--only-innodb参数,则只会备份指定表的ibd文件,不会备份指定备份的innodb表的frm文件和任何非innodb表(包括mysql和performance_schema)

如果指定了--only-innodb-with-frm参数,则会备份指定表的ibd文件和frm文件,但是不会备份非innodb表。

个人感觉,这两个参数还是比较鸡肋,如果要实现innodb表的复制,只能指定--include参数,然后人为删除不需要的frm文件。

4. 利用可传输表空间基于部分库的复制

复制

 ./mysqlbackup --socket=/usr/local/mysql-advanced-5.6.23-linux-glibc2.5-x86_64/data/mysql.sock --backup-dir=/backup --include='db1\.t1' --use-tts backup

在该例中,只备份了一张表db1.t1,也可以备份多张表或库

应用日志

./mysqlbackup --backup-dir=/backup/ apply-log

恢复

./mysqlbackup --defaults-file=/backup/server-my.cnf --socket=/usr/local/mysql-advanced-5.6.23-linux-glibc2.5-x86_64/data/mysql.sock --backup-dir=/backup/ copy-back

但是,报如下错误

160929 11:37:35 mysqlbackup: INFO: Importing table: db1.t1.mysqlbackup: ERROR: mysql query: 'ALTER TABLE db1.t1 IMPORT TABLESPACE': Internal error: Cannot reset LSNs in table '"db1"."t1"' : Tablespace not found mysqlbackup: ERROR: Failed to import tablespace db1.t1.mysqlbackup failed with errors!

查看db1目录下t1各文件的权限

[root@localhost db1]# ll
total 116
-rw-rw---- 1 mysql mysql    65 Sep 29 11:17 db.opt
-rw-r--r-- 1 root  root    371 Sep 29 11:37 t1.cfg
-rw-rw---- 1 mysql mysql  8556 Sep 29 11:37 t1.frm
-rw-r--r-- 1 root  root  98304 Sep 29 11:37 t1.ibd

发现,其中两个文件的权限是root。

注意:即便是把备份目录/backup的权限设置为mysql,这两个文件的权限依旧是root

此时,可修改这两个文件的权限

[root@localhost db1]# chown mysql.mysql *

在客户端手动import表空间

mysql> alter table db1.t1 import tablespace;
Query OK, 0 rows affected (1.55 sec)mysql> select * from db1.t1;
+------+
| id   |
+------+
|    1 |
+------+
1 row in set (0.00 sec)

导入成功。

注意:基于可传输表空间的部分表或库的复制,无需在新的实例上恢复,可在任意一个online实例上进行,前提是这些实例中待导入的表并不存在。

5. 增量复制

全量复制

./mysqlbackup --socket=/usr/local/mysql-advanced-5.6.23-linux-glibc2.5-x86_64/data/mysql.sock --backup-dir=/backup backup

第一次增量复制

./mysqlbackup --socket=/usr/local/mysql-advanced-5.6.23-linux-glibc2.5-x86_64/data/mysql.sock --incremental --incremental-backup-dir=/increment_backup_1 --incremental-base=dir:/backup backup

第二次增量复制

./mysqlbackup --socket=/usr/local/mysql-advanced-5.6.23-linux-glibc2.5-x86_64/data/mysql.sock --incremental --incremental-backup-dir=/increment_backup_2 --incremental-base=dir:/increment_backup_1 backup

基于增量复制的恢复

首先要应用日志

./mysqlbackup --backup-dir=/backup apply-log

第一次增量恢复

./mysqlbackup --incremental-backup-dir=/increment_backup_1 --backup-dir=/backup apply-incremental-backup

第二次增量恢复

./mysqlbackup --incremental-backup-dir=/increment_backup_2 --backup-dir=/backup apply-incremental-backup

恢复

./mysqlbackup --defaults-file=/backup/server-my.cnf --backup-dir=/backup copy-back

关于增量备份, mysqlbackup支持两种方式的增量备份

基于数据文件

--incremental --incremental-backup-dir=PATH --start-lsn=LSN | --incremental-base=BACKUP 

基于redo文件

 --incremental-with-redo-log-only --incremental-backup-dir=PATH --start-lsn=LSN | --incremental-base=BACKUP 

基于redo文件的备份有个前提,即指定LSN后的redo log没有被覆盖。

对于基于数据文件的增量备份,除了上述指定--incremental-base的方式外,还可指定--start-lsn,

start-lsn即是上一个备份集中meta目录下backup_variables.txt文件中end_lsn的值。

6. 其它用法

验证镜像是否损坏

./mysqlbackup --backup-dir=/image --backup-image=2016_09_27_image validate

转载于:https://www.cnblogs.com/ivictor/p/5913370.html

MySQL MEB常见用法相关推荐

  1. mysql中正则表达式的用法_Mysql中正则表达式Regexp常见用法

    Mysql中Regexp常见用法 模糊匹配,包含特定字符串 # 查找content字段中包含"车友俱乐部"的记录 select * from club_content where ...

  2. python propresql mysql_python数据库操作mysql:pymysql、sqlalchemy常见用法详解

    本文实例讲述了python数据库操作mysql:pymysql.sqlalchemy常见用法.分享给大家供大家参考,具体如下: 相关内容: 使用pymysql直接操作mysql 创建表 查看表 修改表 ...

  3. Java8新特性Stream的常见用法

    目录 Stream简介 Stream的使用 创建流 (1) 通过Stream.of()将元素转化成流 (2)每个集合都可以通过调用 stream() 方法来产生一个流 使用举例 (1) 遍历/匹配(f ...

  4. MySql的Explain用法

    MySql的Explain用法 explain执行计划 explain执行计划 使用EXPLAIN关键字可以模拟优化器执行SQL查询语句,从而知道MySQL是如何处理你的SQL语句的.分析你的查询语句 ...

  5. 【MySQL】explain 用法详解

    [MySQL]explain 用法详解   explain命令主要来查看SQL语句的执行计划,查看该SQL语句有没有使用索引,有没有做全表扫描等.它可以模拟优化器执行SQL查询语句,从而知道MySQL ...

  6. MySQL:讨人喜欢的 MySQL replace into 用法(insert into 的增强版)

    讨人喜欢的 MySQL replace into 用法(insert into 的增强版) 在向表中插入数据的时候,经常遇到这样的情况:1. 首先判断数据是否存在: 2. 如果不存在,则插入:3.如果 ...

  7. 【node】express中mysql的基本用法、连接池的使用、事务的回滚

    [node]express中mysql的基本用法.连接池的使用 安装mysql包 mysql的配置信息 mysql基本操作 查询mysql并渲染数据 mysql插入操作 首先在html页面写上< ...

  8. 老男孩教育每日一题-2017年4月28日- MySQL主从复制常见故障及解决方法?

    MySQL主从复制常见故障及解决方法? 1.1.1故障1:从库数据与主库冲突 show slave status; 报错:且show slave status\G Slave_I/O_Running: ...

  9. python六:常见数据类型以及常见用法

    bool 布尔值 # 在bool中 0,()(空元祖),[](空列表),{}(空字典),None,""(空字符串) 都是False int 整形 float 浮点型 str 字符串 ...

最新文章

  1. linux 内核 netfilter 网络过滤模块 (1)-框架
  2. Netty中的线程处理EventLoop
  3. 后台运行神器screen
  4. 微型计算机c560,2010广东省计算机等级考试试题 二级C试题最新考试试题库
  5. 网络爬虫--1.通用爬虫和聚焦爬虫
  6. mysql里面手动关闭_MySQL 启动与关闭(手动与自动)
  7. Python3练习题系列(03)
  8. html全屏代码怎么写,JS实现全屏的四种写法
  9. 珍大户《认知世界的经济学》学习笔记 -- 第17课 影响消费者的因素 -- 色彩、冷暖、秩序
  10. 百度文库文档免费下载功能
  11. Alibaba代码检查工具插件
  12. MATLAB基本语法速成
  13. pandas安装了但是import不了
  14. 方法引用错误:reason: no instance(s) of type variable(s) exist so that String conforms to Person
  15. L2正则化—tensorflow实现
  16. MySQL实现排名、分组筛选、TopN问题
  17. NOIP 提高组复赛 day1 国王游戏
  18. 2021哎呦百度搜索指数批量查询工具【速度快】
  19. 安搭Share:中国最神奇的城市:500年出一个天子
  20. 快速上手@Aspect+@Pointcut

热门文章

  1. asp网站微信登录源码
  2. python解析返回值类型为xml的数据接口
  3. 去百度,还是去创新工场
  4. 怎么用Photoshop做出物体的投影效果出来
  5. 【ps-course 网页设计】抠图
  6. 前端学习记录(十一) 一个“屡教不改”的错误
  7. whistle安装,成功率高
  8. Python实现发送警告通知到企业微信方法详解
  9. Docker快速入门总结笔记
  10. 简单的ATM机代码实现