- 浏览: 2539917 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (676)
- linux运维 (157)
- php (65)
- mysql (78)
- nginx (27)
- apche (18)
- framework (6)
- windows (9)
- IDE工具 (23)
- struts2 (7)
- java (13)
- 移动互联网 (14)
- memcache redis (23)
- shell基础/命令/语法 (37)
- shell (50)
- puppet (4)
- C (11)
- python (9)
- 产品经理 (27)
- Sphinx (4)
- svn (12)
- 设计构建 (12)
- 项目管理 (44)
- SEO (1)
- 网站架构 (26)
- 审时度势 (42)
- 网络 (14)
- 激发事业[书&视频] (81)
- 其它 (12)
- 摄影 (8)
- android (21)
最新评论
-
zhongmin2012:
原文的书在哪里
数据库水平切分的实现原理解析---分库,分表,主从,集群,负载均衡器 -
renzhengzhi:
你好,请问个问题,从master同步数据到slave的时候,s ...
数据库水平切分的实现原理解析---分库,分表,主从,集群,负载均衡器 -
ibc789:
你好,看了你的文章,我想请教个问题, 我在用 redis的时候 ...
redis 的两种持久化方式及原理 -
iijjll:
写得非常好
数据库水平切分的实现原理解析---分库,分表,主从,集群,负载均衡器 -
iijjll:
写得非常好
数据库水平切分的实现原理解析---分库,分表,主从,集群,负载均衡器
【转载】http://blog.chinaunix.net/space.php?uid=25266990&do=blog&id=3314699
xtrabackup 是 percona 的一个开源项目,可以热备份 innodb , XtraDB, 和 MyISAM (会锁表)
官方网址 http://www.percona.com/docs/wiki/percona-xtrabackup:start
Xtrabackup 是由 percona 开发的一个开源软件,此软件可以说是 innodb 热备工具 ibbackup 的一个开源替代品。这个软件是由 2 个部分组成的 :xtrabackup 和 innobackupex 。 Xtrabackup 专门用于 innodb 引擎和 xtraDB 引擎;而 innobackupex 是专门用于 myisam 和 innodb 引擎,及混合使用的引擎。
一、安装
1 、 RPM 安装:
rpm -ivh –nodeps percona-xtrabackup-debuginfo-2.0.0-417.rhel5.x86_64.rpm
–nodeps( 不检查软件间的依赖关系 ) ,因为安装 xtrabackup 需要 mysql_client ,但是我的是通过源码安装的。所以环境变量要设置正确
比如 export PATH=$PATH:/usr/local/mysql/bin 如果 mysql 没有设置到 PATH 里 会报错。
2 、下载二进制源码包:
tar -zxvf percona-xtrabackup-2.0.0.tar.gz
mv percona-xtrabackup-2.0.0 /usr/loca/xtrabackup
3 、 使用源代码方式安装
如果你想使用源代码方式安装的话,则会发现 其安装方式有点古怪,这是因为它采用的在 MySQL 源代码上打补丁构建的方式。
tar
zxf xtrabackup-0.8.tar.gz
cd xtrabackup-0.8
./configure
make
进行到这里时,千万别惯性使然接着
make install
,那样就会接着安装
MySQL
了,正确方法是接着:
cd innobase/xtrabackup/
make
make install
查看版本号:
mysqld 配置文件 : ( 多实例时备份必须要 )
- [mysqld]
- innodb_data_home_dir = /www/mysqldata/ibdata #用来储存文件的数据
- innodb_log_group_home_dir = /www/mysqldata/iblogs
- innodb_data_file_path=ibdata1:10M;ibdata2:10M:autoextend
- innodb_log_files_in_group = 2
- innodb_log_file_size = 1G
注:文本测试中没有 多实例 ,使用默认my.cnf。
二、 xtrabackup 备份和恢复
Xtrabackup
有两个主要的工具:
xtrabackup
、
innobackupex
。
xtrabackup
只能备份
InnoDB
和
XtraDB
两种数据表,支持在线热备份,不会锁表
innobackupex
则封装了
xtrabackup
,同时可以备份
MyISAM
数据表,如果你的数据库里有
innodb
和
myisam
存储引擎,只能使用
innobackupex
备份。
*
xtrabackup -
用于热备份
innodb, xtradb
表的工具,不能备份其他表。
*
innobackupex -
对
xtrabackup
封装的
perl
脚本,提供了
myisam
表备份的能力。(能进行整库和数据表备份)。本文旨在介绍
Xtrabackup
工具对数据库进行增量备份实践。
1、 innobackupex-1.5.1 备份
在实施备份时,需要在数据库运行的情况下在线执行,并先提前建立用于备份的路径。
- innobackupex [--defaults-file=/etc/my.cnf] –user=root [--host=192.168.10.198] [--password=xxx] [--port=3306] /www/backup/ 2>/www/backup/backup.log
参数:
/www/backup/ # 备份的目录
2>/www/backup/backup.log # 将备份过程中的输出信息重定向到 /www/backup/backup.log
–slave-info # 会记录复制主日志的复制点,便于重新做复制用。(用在备份从机器用)
xtrabackup_binlog_info # 存放 binlog 的信息。( binlog 需要另外拷贝备份,如果需要 binlog 的话)
xtrabackup_checkpoints # 存放备份的起始位置和结束位置。
–-stream=tar # 告诉 xtrabackup ,备份需要以 tar 的文件流方式输出。
–-include='test' # 备份包含的库表,如例:意思是要备份 test 库中所有的表。如果需要全备份,则省略这个参数;如果需要备份 test 库下的 2 个表: tableA & tableB, 则写成: –-include='test.tableA|test.tableB' ;再如果 test 库下只有 2 个前缀是 table 的表,你还可以写成: –-include='test.table*' 。
–-throttle=500 #xtrabackup 在备份过程中, IO 操作比较多,因此需要限定一下 IO 操作。以免服务器压力过大,不过好像作用不太明显,也不知道是不是设置的还是过大。待测 …
–-socket=/data/mysql/backup/mysql.sock # 指定 mysql.sock 所在位置,以便备份进程登录 mysql
--apply-log
--redo-only
( 1 )、完整数据备份
例如:
-
mysql>
show
databases;
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
-
|
Database
|
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
-
|
information_schema |
-
|
jss |
-
|
my_db |
-
|
mysql |
-
|
test |
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
- 5 rows in set ( 0. 00 sec)
全量备份:
- innobackupex --defaults-file=/etc/my.cnf /www/backup/
将在 /www/backup/ 目录下产生一个按当前日期时间命令的目录,如 2012-07-18_15-05-06 ,在恢复时,注意要先关闭服务器,并且将 datadir 的目录先清空,在恢复数据后一定需要重置该目录的权限。
模拟故障,具体操作如下:
/usr/local/mysql5/bin/mysqladmin -uroot shutdown
mv /www/mysqldata /tmp/
mkdir /www/mysqldata
应用全量备份:
- innobackupex --apply-log /www/backup/2012-07-18_15-05-06/
- innobackupex --copy-back /www/backup/2012-07-18_15-05-06/
ln
-s /usr/local/mysql5/share/english
/www/mysqldata/mysql/english
#
恢复初始目录树,否则无法启动
chown -R mysql.mysql /www/mysqldata
/usr/local/mysql5/bin/mysqld_safe --user=mysql &
提示,可以在备份时直接压缩以节约磁盘空间:
- innobackupex --defaults-file=/etc/my.cnf --stream=tar /www/backup/ | gzip > /www/backup/compress/mysql_backup.tar.gz
不过注意解压需要手动进行,并加入 -i 的参数,否则无法解压出所有文件。
- tar zxfi /www/backup/compress/mysql_backup.tar.gz
- innobackupex --apply-log /www/backup/compress
- innobackupex --copy-back /www/backup/compress
(2) Innobackupex 针对某个库增量备份:
增量备份仅针对 InnoDB 这类支持事务的引擎,对于 MyISAM 等引擎,则仍然是全备了。
全量备份:
- innobackupex-1.5.1 --defaults-file=/etc/my.cnf --databases="jss" /www/backup/full/
登录到数据库 ,创建几个新的对象:
- mysql> use jss;
- Database changed
- mysql> show tables;
- +---------------+
- | Tables_in_jss |
- +---------------+
- | j1 |
- +---------------+
- 1 row in set (0.00 sec)
- mysql> truncate table j1;
- Query OK, 0 rows affected (0.01 sec)
- mysql> create table ja(id int);
- Query OK, 0 rows affected (0.04 sec)
- mysql> insert into ja values (1);
- Query OK, 1 row affected (0.01 sec)
完整备份目录上做第一次增量备份
- innobackupex-1.5.1 --defaults-file=/etc/my.cnf --databases="jss" --incremental --incremental-basedir=/www/backup/full/2012-07-18_19-47-49/ /www/backup/inc
如果默认存储引擎是基于
MyISAM
,那么增量备份时备份的文件分别是
.frm
、
.MYD
、
.MYI
。
如果默认存储引擎是基于 InnoDB ,那么增量备份时备份的只会是 .frm 文件,我的配置文件所采用的是独立表空间。
在 /www/backup/rec/ 下会产生增量文件:
[root@localhost jss]# cd /www/backup/inc/2012-07-18_19-55-17/
[root@localhost 2012-07-18_19-55-17]# ls -l
total 384
-rw-r--r-- 1 root root 250 Jul 18 19:55 backup-my.cnf
-rw-r----- 1 root root 360448 Jul 18 19:55 ibdata1.delta
-rw-r----- 1 root root 18 Jul 18 19:55 ibdata1.meta
drwxr-xr-x 2 root root 4096 Jul 18 19:55 jss
-rw-r--r-- 1 root root 13 Jul 18 19:55 xtrabackup_binary
-rw-r--r-- 1 root root 26 Jul 18 19:55 xtrabackup_binlog_info
-rw-r----- 1 root root 81 Jul 18 19:55 xtrabackup_checkpoints
-rw-r----- 1 root root 2560 Jul 18 19:55 xtrabackup_logfile.
[root@localhost 2012-07-18_19-55-17]# cd jss/
[root@localhost jss]# ls -l
total 28
-rw-r--r-- 1 mysql mysql 61 Jul 18 19:18 db.opt
-rw-r--r-- 1 mysql mysql 8556 Jul 18 19:18 j1.frm
-rw-rw---- 1 mysql mysql 8556 Jul 18 19:53 ja.frm
note:
此过程仅影响
XtraDB
或基于
InnoDB
的表,其他带不同存储引擎的表会在增量备份出现时被完全复制
恢复过程也需要用到
prepare
首先,提交事务必须重新执行每一个备份
然后,未提交事务必须回退
模拟故障
rm -rf /www/mysqldata/jss
将完整备份中的数据恢复到数据库中
- innobackupex-1.5.1 --defaults-file=/etc/my.cnf --databases="jss" --apply-log /www/backup/full/2012-07-18_19-47-49/
第一个增量备份应用到完整备份
- innobackupex-1.5.1 --defaults-file=/etc/my.cnf --databases="jss" --apply-log /www/backup/full/2012-07-18_19-47-49/ --incremental-dir=/www/backup/inc/2012-07-18_19-55-17/
在完整备份目录下会看到一个新增文件:
经过分析,原来是在 prepare 时, XtraBackup 并没有将增量备份集中,属于新建对象的 .frm 文件复制到完整备份集目录,因此在执行 copy-back 时,这部分文件自然也就没有复制回数据文件路径。只有手动还原到 datadir 。
拷贝到 datadir 目录下
cp -rp 2012-07-18_19-47-48jss /www/mysqldata/jss
进入 datadir 查看文件:
[root@localhost backup]# cd /www/mysqldata
[root@localhost mysqldata]# ls
ibdata1 ib_logfile0 ib_logfile1 jss my_db mysql test xtrabackup_binlog_pos_innodb xtrabackup_checkpoints
[root@localhost mysqldata]# chown -R mysql.mysql /www/mysqldata
重启 mysql
2、 xtrabackup 备份详解
xtrabackup
只备份
InnoDB
数据文件,表结构是不备份的,所以恢复的时候,你必须有对应表结构文件
(.frm)
mysql
use jss;
alter table j1 engine=innodb;
(1) 全量备份及恢复
(使用 xtrabackup ,仅限 InnoDB 和 xtradb 表,且注意 mysql 配置文件 my.cnf 中 “default_table_type = InnoDB” 否则不成功)。
- xtrabackup --defaults-file=/etc/my.cnf --backup --target-dir=/www/backup/
执行两次:
- xtrabackup --defaults-file=/etc/my.cnf --prepare --target-dir=/www/backup/
- xtrabackup --defaults-file=/etc/my.cnf --prepare --target-dir=/www/backup/
将数据库停掉,删除数据库下的 ib* ( ib 开头的所有)文件。
将 /www/backup/ 目录下的 ib* 文件拷贝到数据库目录。
设置权限:
#chown mysql:mysql ib*
重启数据库后测试,是否成功。
[root@localhost backup]# cp ib* /www/mysqldata/
[root@localhost backup]# chown mysql.mysql /www/mysqldata/ib*
[root@localhost backup]# /usr/local/mysql/bin/mysqld_safe --user=mysql &
[1] 1695
[root@localhost backup]# 120719 15:56:19 mysqld_safe Logging to '/www/mysqldata/localhost.localdomain.err'.
120719 15:56:19 mysqld_safe Starting mysqld daemon with databases from /www/mysqldata
[root@localhost backup]# mysql
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 1
Server version: 5.1.57-log MySQL Community Server (GPL)
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql> use jss;
Database changed
mysql> select * from j2;
+------+
| id |
+------+
| 2 |
+------+
1 row in set (0.01 sec)
注意, xtrabackup 只备份数据文件,并不备份数据表结构 (.frm) ,所以使用 xtrabackup 恢复的时候,你必须有对应表结构文件 (.frm) 。
(2) 增量备份及恢复
再次强调, xtrabackup 做增量仅限 InnoDB 和 xtradb 表,且注意 mysql 配置文件 my.cnf 中 “default_table_type= InnoDB” 否则不成功。
做增量前当然要先进行全量备份,在全量的基础上来进行增量。
首先进行全量备份。
- xtrabackup --defaults-file=/etc/my.cnf --backup --target-dir=/www/backup/
在全量备份的基础上进行增量。
- xtrabackup --defaults-file=/etc/my.cnf --backup --target-dir=/www/inc/1 --incremental-basedir=/www/backup/
( 注: /www/inc/1/ 是每次都需修改的。比如第二次增量就改成 /www/inc/ 2 ,当然可以写个脚本进行自动备份,备份脚本将陆续奉上 ...... 恢复的时候也是一样 )
增量恢复。(步骤同全量恢复,只是在执行恢复命令的时候中间多一步)
- xtrabackup --defaults-file=/etc/my.cnf --prepare --target-dir=/www/backup/
- xtrabackup --target-dir=/www/backup/ --prepare --incremental-dir=/www/inc/1
- xtrabackup --defaults-file=/etc/my.cnf --prepare --target-dir=/www/backup/
将数据库停掉,删除数据库下 /www/mysqldata/ibdata 的 ib* 表文件。将 /www/backup/ 目录下的 ib* 文件拷贝到数据库目录 /www/mysqldata/ibdata 。
设置权限:
#chown mysql:mysql ib*
重启后测试。是否成功。
注:备份前先登录数据库,打开一个表看看记录条数,然后进行备份,然后再对表最终的记录进行修改,然后在备份,再测试。
三、 innobackupex-1.5.1 与 xtrabackup 相结合
备份策略:
整库备份直接用 innobackupex-1.5.1 脚本。
只对 InnoDB 或 xtradb 表,进行备份直接用 xtrabackup 。
由于 xtrabackup 不能备份表结构,所以备份时首先用 innobackupex-1.5.1 脚本对数据库进行整库备份。再用 xtrabackup 进 行表备份。分别进行。恢复时也分别进行恢复。如果发生表结构丢失则先使用 innobackupex-1.5.1 进行恢复,然后再用 xtrabackup 恢 复增量数据。用生成的文件 ib* 覆盖用 innobackupex-1.5.1 恢复后的 ib* 文件。
=======================================================================================
首先, innobackupex-1.5.1 全备份:
- innobackupex --defaults-file=/etc/my.cnf /www/backup/full/ 2> /www/backup//1.log
# 会生成一个时间文件夹,这里假如是 2012-7-20_15-57-44
然后, xtrabackup 做增量备份:
- innobackupex-1.5.1--defaults-file=/etc/my.cnf --incremental --incremental-basedir=/www/backup/full/2012-7-20_15-57-44/ /www/backup/inc/1
恢复:
首先停掉数据库,备份二进制日志(如果有的话),然后删除数据库目录下的所有数据库文件 .
cd /www/mysqldata
rm -rf * # 删除数据目录里的所有文件
恢复全量备份:
- innobackupex-1.5.1 --apply-log /www/backup/full/2012-7-20_15-57-44/ # 应用日志
- innobackupex-1.5.1 --copy-back /www/backup/full/2012-7-20_15-57-44/ # 拷贝文件
恢复增量备份:
- xtrabackup --prepare --target-dir=/www/backup/full/2012-7-20_15-57-44 --incremental-dir= /www/backup/inc/1
将 /www/backup/ 目录下的 ib* 文件拷贝到数据库目录
重启 mysql 服务。
发表评论
-
mysql表修复
2015-04-07 10:16 102861.1命令myisamchk(必须停掉mysql服务,或者所操 ... -
Table_locks_immediate
2014-08-25 15:46 3070Table_locks_immediate表示立即释放表锁数 ... -
mysql分区
2014-02-21 10:38 1848mysql自5.1开始支持分区 ... -
InnoDB 引擎独立表空间 innodb_file_per_table
2013-02-25 11:14 1310http://deeplyloving.iteye.com ... -
mysql监测工具tuning-primer.sh
2013-01-21 17:57 2657【转】http://www.dbasky.net ... -
mysql主从日志的定期清理
2013-01-21 16:24 1153[转]http://wangwei007.blog.51 ... -
[转]Mysql报错:Result consisted of more than one row
2013-01-09 16:25 15868Error Code : 1172 Result consi ... -
根据bin log 分析管理员被莫名删除问题
2013-01-04 17:04 1164============== 根据bin log 分析管理 ... -
mysql中select * for update锁表的问题
2013-01-04 14:07 2509先前介绍过SELECT ... FOR UPDATE的用法 ... -
PDO报错:Cannot execute queries while other unbuffered queries are active.
2012-12-12 17:57 11929用 PDOStatement->execute() 执行 ... -
MySQL死锁导致无法查询
2012-12-11 14:51 2559客服反馈后台无法查询,原因大概知道,是因为MySQL的事务 ... -
mysql性能分析:mysql profiling 应用
2012-12-11 10:26 13451)先打开profiling ==> set pro ... -
mysql体系结构和查看当前的数据库请求
2012-12-07 15:00 2892mysql体系结构: 由 ... -
mysql_error:Error starting thread: Resource temporarily unavailable
2012-11-01 17:57 2110121031 18:53:17 InnoDB: Unable ... -
导出bin log时间段脚本datarecover.sh
2012-09-06 13:34 1243修改 _binlogdir='/data/mysql/m ... -
数据库中的隔离级别和锁机制
2012-08-09 17:55 1585ANSI/ISO SQL92标准定义了 ... -
mysqldump和mysql命令
2012-08-03 13:44 1380========================= mys ... -
【汇总】mysql join
2012-07-18 11:35 1169标准SQL中CROSS JOIN交叉连接(笛卡尔积)和内连接I ... -
mysql cursor游标的使用,实例
2012-07-17 23:09 1812mysql被oracle收购后,从mysql-5.5开始, ... -
使用innotop监测mysql
2012-07-13 10:56 3812最近学习innotop工具,自己搜集整理了一下网上的各种资源, ...
相关推荐
Percona Xtrabackup是一款针对MySQL数据库的物理备份工具,由Percona公司开发,旨在提供无损、在线的全量和增量备份解决方案。版本8.0.35是其最新的稳定版,针对MySQL 8.0.x系列进行了优化,支持最新的数据库特性和...
XtraBackup是一个用来备份 MySQL 的 InnoDB 数据库的开源工具。例如执行增量备份的命令是: # ./xtrabackup --backup --target-dir=/backup/delta --incremental-basedir=/backup/base
备份工具,大文件增量、全量备份,速度比mysqldump快。
Percona XtraBackup是Percona公司推出的一款开源、无阻塞的MySQL数据库热备份工具,专为InnoDB和XtraDB存储引擎设计。它在不影响MySQL服务正常运行的情况下,能够安全地备份数据库,确保数据的一致性和完整性。这款...
Autoback-xtraback
包括mha4mysql-manager-0.58.tar.gz, mha4mysql-manager-0.58-0.el7.centos.noarch.rpm, mha4mysql-node-0.58.tar.gz, mha4mysql-node-0.58-0.el7.centos.noarch.rpm, mha4mysql-manager-0.57.tar.gz, mha4mysql-...
Percona XtraBackup是一款开源、高效且无阻塞的数据备份工具,主要用于MySQL和MariaDB数据库系统。这款软件是由Percona公司开发的,旨在提供热备份解决方案,能够在不影响数据库正常运行的情况下进行完整或增量备份...
Percona Xtrabackup是一款开源的、高效的数据备份工具,特别针对MySQL和MariaDB数据库系统设计。它提供了完整且无锁的热备份功能,能够在不影响数据库运行的情况下,确保数据的安全存储和恢复。此压缩包"percona-...
1、支持centos\redhat\orace \ubuntu\debian\麒麟V10\欧拉 2、 percona-xtrabackup-2.4.24-Linux-x86_64.glibc2.12-minimal.tar.gz percona-xtrabackup-2.4.24-Linux-x86_64.glibc2.12.tar.gz percona-xtrabackup-24...
Percona XtraBackup 是一个免费、开源、完整的在线备份解决方案,适用于所有版本的 Percona Server for MySQL 和 MySQL。它在事务系统上执行在线非阻塞、紧密压缩、高度安全的备份,以便应用程序在计划的维护窗口...
Percona XtraBackup 是一个免费、开源、完整的在线备份解决方案,适用于所有版本的 Percona Server for MySQL 和 MySQL。它在事务系统上执行在线非阻塞、紧密压缩、高度安全的备份,以便应用程序在计划的维护窗口...
Autoback-xtraback.shAutoinstall ELK V1.3.sh black list.shcheck mysql_ms.shCpu Limit.sh Custom Rm.sh Daily Archive.sh Hourly Archive.sh install elasticserch.sh install filebeat.sh install git.sh ...
percona-xtrabackup-8.0.27-19-Linux-x86_64.glibc2.12-minimal.tar.gz、 percona-xtrabackup-8.0.27-19-Linux-x86_64.glibc2.17-minimal.tar.gz、 percona-xtrabackup-80-8.0.27-19.1.el6.x86_64.rpm、 ...
percona-xtrabackup-24-2.4.22-1.el7.x86_64.rpm
percona-xtrabackup2.4 release package for CentOS 7
Debian 下使用 percona-xtrabackup_2.3.10-1.stretch_amd64.deb
percona-xtrabackup-83-8.3.0-1.1.el7.x86_64.rpm
percona-xtrabackup-80-8.0.33-28.1.el7.x86_64