代码改变世界

mysql之冷备和mysqldump、mydumper、xtrabackup备份

2018-11-15 14:55  烟雨楼人  阅读(2124)  评论(0编辑  收藏  举报

1.冷备流程:

停库备份,冷备份一般用于非核心业务,这类业务一般都允许停库。

在停止数据库后,将数据文件拷贝出来,然后对原始数据文件进行备份。

流程:

1.关闭数据库备份          2.拷贝数据文件

3.压缩数据文件           4.重启数据库

2.热备

热备份分逻辑备份和物理备份.,逻辑备份的是SQL语句,将数据库里面的数据,转储为SQL文件.

在线备份,一般是使用mysqldumpxtrabackup进行备份和恢复

Mysqldump适合规模比较小的库,业务并不繁忙的数据库,一般都是选择mysqldump

Mysqldumpmydumper都是逻辑备份工具,xtrabackup是物理备份工具.

Mysqldumpmysql自带的工具,xtrabackuppercona公司开发的工具.

如果数据量大于100G,逻辑备份恢复比较慢,可以优先考虑物理备份.

        2.1 mysqldump备份原理及参数介绍

mysqldump是 官方工具,本身mysql自带,不用安装.
Mysqldump备份原理:将数据库的数据,查询出来,然后通过拼接语句,形成sql文件.mysqldump是逻辑备份.

如何保证备份的一致性,以及mysqldump参数的讲解:

--single-transaction:可以保证在不加锁的情况下,备份一致性数据.

参数原理:在备份的时候mysqldump---->mysqld(客户端连接到服务器端),在备份会中,--single-transaction会显式的将会话的事务隔离级别改为RR隔离级别,并且开启一个事务,RR隔离级别下,备份数据都是开启事务的时候的数据的快照,于是保证了备份的一致性.

故一般备份情况下加这个参数来保证数据的一致性.

优点: 1.不加锁 2.可以保证数据的备份一致性

实际在数据备份的时候,获取binlog位置的时候,是需要加锁加锁--获取binlog位置--解锁--备份数据.加锁只是在获取binlog位置的一瞬间然后释放,在备份开始后的时间是不加锁的.

--master-data 1|2  一般用2 , 加注释,作用是打印备份的数据的binlog pos点到备份文件头部.可通过查看备份文件知道备份的pos.

head -n 35 test.txt 查看文本前35行一般就看查看到pos.

于是在保证备份一致性(不加锁)的情况下语句是:

mysqldump --single-transaction  --master-data=2

可通过mysqldump --help查看其它参数信息.

-A, --all-databases 作用是备份所有数据库(包括mysql数据库)

--add-drop-database 和 --add-drop-table(--skip-add-drop-table) 参数:意思是如果库或者表已经存在,就删除掉尽量在恢复之前,就是手动删掉数据.

-c, --complete-insert  完整insert (不是简写的,全写:insert into t1 (id,name) values(1,'mxt');)

-B, --databases   指定备份的数据

-K, --disable-keys  作用是使索引失效,防止大批量数据插入的开销.

-h  作用是连接哪个主机.(host.)

-x, --lock-all-tables  ----备份加锁.(一般不用)

-l, --lock-tables   Lock all tables for read.(加锁,一般不用)

--max-allowed-packet=#  mysqldumpmysqld都需要设置,mysqld允许最大的数据包,加到配置文件max-allowed-packet=32M(mysqldmysqldump里都设置.)

-d, --no-data      ----------只备份表结构

-q, --quick       --------- 不经过内存,如果内存比较小,直接落盘到文件.(可以减少对内存的占用)

--replace      ------ insert into 更改成 replace  INTO.

--hex-blob     -------- 表里面有二进制的列(blob text字段) ,需要备份加这个参数.

--triggers  ------ 备份触发器

-E, --events  ---------备份事件

上面大多数参数对MYISAM存储引擎不起作用,因为其不支持事务,没有RR模式,故无法保证事务一致性,故备份需加锁.

mysqldump备份特点:

1.简单,不需要额外安装,sql文件易读(.sql  .txt ....是文本文件,文件后缀不能决定文件的性质)

2.该工具单线程,不能并发备份恢复 ,因为是逻辑备份,数据量越大,恢复越慢.

 

       2.2mysqldump备份及恢复语句

备份所有数据库:

mysqldump -uroot -p -S /tmp/mysql3306.sock --master-data=2 --single-transaction  -A > /tmp/all.sql

 

备份单个数据库:

mysqldump -uroot -p -S /tmp/mysql3306.sock --master-data=2 --single-transaction  -B test1 > /tmp/all.sql

 

导出表:

mysqldump -uroot -p -S /tmp/mysql3306.sock --master-data=2 --single-transaction  -B test1 --tables t3 > t1.sql

 

导出表结构:

mysqldump -uroot -p -S /tmp/mysql3306.sock --master-data=2 --single-transaction  -A -d > /tmp/all.sql

 

mysqldump导入数据:

方法1.  mysql -uroot -proot -S /tmp/mysql3306.sock < all.sql

方法2.  mysql > source /tmp/all.sql

对于恢复数据:  尽量不要跨机房和网段等恢复,尽量将备份文件拷贝到mysqld所在机器上,进行恢复.

  2.3 mydumper介绍

由来:Mydumper也是逻辑备份.备份时过程与mysqldump相似,都是瞬间开启RR模式然后释放锁,保证了数据的一致性.弥补了mysqldump只能单线程备份的特点,其设计中可以多线程拷贝数据,.但消耗资源.并且mysqldump是第三方开发工具,使用时需要安装.

/usr/local/bin/mydumper 备份工具

/usr/local/bin/myloader 恢复工具

Mydumper进行备份时,有一个主线程和多个备份线程完成.不用加参数-single-transaction--master-datea=2等参数.

/usr/local/bin/mydumper 备份工具

/usr/local/bin/myloader 恢复工具

Mydumper进行备份时,有一个主线程和多个备份线程完成.不用加参数-single-transaction--master-datea=2等参数.

 1.mydumper的安装

安装mydumper步骤:

 1.yum -y install cmake pcre-devel gcc-c++ glib2-devel zlib*

 2.tar zxvf mydumper-0.9.1.tar.gz

 3.cd mydumper-0.9.1

 4.mkdir build

 5.cd build

 6.cmake ..

 7.make

 8.make install

安装完成后再ls  /usr/local/bin里有该命令.

其中mydumper是逻辑备份工具,myloader是逻辑恢复工具.

查看使用方法报错: mydumper --help报错。

解决方法:

执行:  ls -l /usr/local/mysql/lib/libmysqlclient.so.20*

执行:  ln -s /usr/local/mysql/lib/libmysqlclient.so.20 /usr/lib/

vim /etc/ld.so.conf在里面添加一行:  export LD_LIBRARY_PATH=/usr/local/mysql/lib.里面内容如下:

include ld.so.conf.d/*.conf

export LD_LIBRARY_PATH=/usr/local/mysql/lib