1、安装xtrabackup
[root@mysql ~]# wget https://www.percona.com/downloads/XtraBackup/Percona-XtraBackup2.4.4/binary/tarball/percona-xtrabackup-2.4.4-Linux-x86_64.tar.gz # 下载xtrabackup#解压并进入目录复制[root@mysql ~]# tar zxf percona-xtrabackup-2.4.4-Linux-x86_64.tar.gz [root@mysql ~]# cd percona-xtrabackup-2.4.4-Linux-x86_64/[root@mysql percona-xtrabackup-2.4.4-Linux-x86_64]# cp bin/* /usr/bin/[root@mysql percona-xtrabackup-2.4.4-Linux-x86_64]# ls bin/
Xtrabackup中主要包含两个工具: xtrabackup:是用于热备份innodb, xtradb表中数据的工具,支持在线热备 份,可以在不加锁的情况下备份Innodb数据表,不过此工具不能操作Myisam引擎表; innobackupex:是将 xtrabackup进行封装的perl脚本,能同时处理Innodb和Myisam,但在处理Myisam时需要加一个读锁。 由于操 作Myisam时需要加读锁,这会堵塞线上服务的写操作,而Innodb没有这样的限制,所以数据库中Innodb表类 型所占的比例越大,则越有利。
#安装相关插件[root@mysql ~]# yum -y install perl-DBI perl-DBD-MySQL perl-Time-HiRes perl-IO-Socket-SSL perlTermReadKey.x86_64 perl-Digest-MD5#下载percona-toolkit并安装[root@mysql /]# wget https://www.percona.com/downloads/percona-toolkit/2.2.19/RPM/perconatoolkit-2.2.19-1.noarch.rpm [root@mysql ~]# rpm -ivh percona-toolkit-2.2.19-1.noarch.rpm
就这样,xtrabackup工具就安装好了,接下来就可以开始备份了方案一、xtrabackup完全备份+binlog增量备份1、创建备份目录
[root@mysql ~]# mkdir -p /opt/mysqlbackup/{full,inc}#full:全备存放的目录;inc:增量备份存放的目录
1)、完全备份
[root@mysql ~]# innobackupex --defaults-file=/etc/my.cnf --user=root --password=123 /opt/mysqlbackup/full/
注: --defaults-file=/etc/my.cnf 指定mysql的配置文件my.cfg,如果指定则必须是第一个参数。 /path/to/BACKUP-DIR/指定备份所存放的目标目录,备份过程会创建一个以当时备份时间命名的目录存放备份 文件。 出现如下图所示,则表示备份成功:在备份的同时,备份数据会在备份目录下创建一个以当前日期时间为名字的目录存放备份文件:
[root@mysql ~]# cd /opt/mysqlbackup/full/[root@mysql full]# lltotal 0drwxr-x--- 6 root root 206 Jun 15 22:35 2020-06-15_22-35-02[root@mysql full]# ll 2020-06-15_22-35-02/total 12336-rw-r----- 1 root root 425 Jun 15 22:35 backup-my.cnf-rw-r----- 1 root root 338 Jun 15 22:35 ib_buffer_pool-rw-r----- 1 root root 12582912 Jun 15 22:35 ibdata1drwxr-x--- 2 root root 4096 Jun 15 22:35 mysqldrwxr-x--- 2 root root 8192 Jun 15 22:35 performance_schemadrwxr-x--- 2 root root 8192 Jun 15 22:35 sysdrwxr-x--- 2 root root 50 Jun 15 22:35 test1-rw-r----- 1 root root 113 Jun 15 22:35 xtrabackup_checkpoints-rw-r----- 1 root root 459 Jun 15 22:35 xtrabackup_info-rw-r----- 1 root root 2560 Jun 15 22:35 xtrabackup_logfile
各文件说明:(1)xtrabackup_checkpoints ——备份类型(如完全或增量)、备份状态(如是否已经为prepared 状态)和LSN(日志序列号)范围信息; 每个InnoDB页(通常为16k大小)都会包含一个日志序列号,即LSN。LSN是 整个数据库系统的系统版本号,每个页面相关的LSN能够表明此页面最近是如何发生改变的。(2)xtrabackup_binlog_info —— mysql服务器当前正在使用的二进制日志文件及至备份这一刻为止二进制日志事 件的位置。(3)xtrabackup_binlog_pos_innodb ——二进制日志文件及用于InnoDB或XtraDB表的二进制日志文件的当前 position。(4)xtrabackup_binary ——备份中用到的xtrabackup的可执行文件; (5)backup-my.cnf ——备份命令用到的配置选项信息;
在使用innobackupex进行备份时,还可以使用--no-timestamp选项来阻止命令自动创建一个以时间命名的目 录;如此一来,innobackupex命令将会创建一个BACKUP-DIR目录来存储备份数据
注意:相关选项说明: 其中,--user指定连接数据库的用户名,--password指定连接数据库的密码,-defaults-file指定数据库的配置文件,innobackupex要从其中获取datadir等信息;--database指定要备份 的数据库,这里指定的数据库只对MyISAM表有效,对于InnoDB 数据来说都是全备(所有数据库中的 InnoDB数据都进行了备份,不是只备份指定的数据库,恢复时也一样);/opt/mysqlbackup/full是备份 文件的存放位置。
注:备份数据库的用户需要具有相应权限,如果要使用一个最小权限的用户进行备份,则可基于如下 命令创建此类用户:
#创建用户mysql> create user ‘bkpuser‘@‘localhost‘ identified by ‘123456‘;#回收用户所有权限mysql> revoke all privileges,grant option from ‘bkpuser‘@‘localhost‘;#授权有关备份的相应权限mysql> grant reload,lock tables,replication client, process on *.* to ‘bkpuser‘@‘localhost‘; mysql> flush privileges;
至此全备完全成功,然后向mysql某个库插入几条数据,然后进行增量备份 对完全备份的后数据库更改进行二 进制日志增量备份:
#查看完全备份时binlog日志位置[root@mysql full]# cat /opt/mysqlbackup/full/2020-06-15_22-49-41/xtrabackup_binlog_info bin_log.000001 154#模拟数据库修改:mysql>select * from tb1;+------+----------+--------+| id | name | back ||------+----------+--------|| 1 | zhangsan | w || 2 | lisi | q || 3 | wangwu | e || 4 | zhaoliu | r || 5 | liuyi | t || 6 | didi | y |+------+----------+--------+6 rows in setmysql>insert into tb1 values(7,‘tom‘,‘u‘);mysql>insert into tb1 values(8,‘tom2‘,‘i‘);
[root@mysql data]# pwd/usr/local/mysql/data[root@mysql data]# mysqlbinlog -v bin_log.000001 # 可以通过mysqlbinlog二进制日志号[root@mysql data]# cat /opt/mysqlbackup/full/2020-06-15_22-49-41/xtrabackup_binlog_info bin_log.000001 154 # 后面这个154 就是开始#由于我全备之后还做了一些操作,所以我这里并不是154#增量备份二进制文件[root@mysql data]# mysqlbinlog --start-position=219 /usr/local/mysql/data/bin_log.000001 > /opt/mysqlbackup/inc/`date +%F`.sql[root@mysql data]# ls /opt/mysqlbackup/inc/2020-06-15.sql
2、还原数据库#模拟数据库损坏, 我这里直接使用删除数据目录文件来模拟损坏。
[root@mysql ~]# rm -rf /usr/local/mysql/data/*
还原完全备份: 准备(prepare)一个完全备份 一般情况下,在备份完成后,数据尚且不能用于恢复操作, 因为备份的数据中可能会包含尚未提交的事务或已经提交但尚未同步至数据文件中的事务。因此,此时数据文 件仍处理不一致状态。“准备”的主要作用正是通过回滚未提交的事务及同步已经提交的事务至数据文件也使得 数据文件处于一致性状态。 在准备(prepare)过程结束后,InnoDB表数据已经前滚到整个备份结束的点,而 不是回滚到xtrabackup刚开始时的点。
[root@mysql ~]# innobackupex --apply-log /opt/mysqlbackup/full/2020-06-15_22-49-41/
注:/opt/mysqlbackup/full/2020-06-15_22-49-41/ 备份文件所在目录名称 如果执行正确,其最后输出的几行信 息通常如下:在实现“准备”的过程中,innobackupex通常还可以使用--use-memory选项来指定其可以使用的内存的大小,默 认通常为100M。如果有足够的内存可用,可以多划分一些内存给prepare的过程,以提高其完成速度。 innobackupex命令的--copy-back选项用于执行恢复操作,其通过复制所有数据相关的文件至mysql服务器 DATADIR目录中来执行恢复过程。innobackupex通过backup-my.cnf来获取DATADIR目录的相关信息。 (2)还原数据库语法:
[root@mysql ~]# innobackupex --copy-back /opt/mysqlbackup/full/2020-06-15_22-49-41/
这里的--copy-back指明是进行数据恢复。数据恢复完成之后,需要修改相关文件的权限mysql数据库才能正常 启动。如果执行正确,其输出信息的最后几行通常如下:请确保如上信息的最行一行出现“completed OK!”。 修改还原后的数据目录权限:
[root@mysql ~]# ll /usr/local/mysql/data/total 122916-rw-r----- 1 root root 357 Jun 15 23:36 ib_buffer_pool-rw-r----- 1 root root 12582912 Jun 15 23:36 ibdata1-rw-r----- 1 root root 50331648 Jun 15 23:36 ib_logfile0-rw-r----- 1 root root 50331648 Jun 15 23:36 ib_logfile1-rw-r----- 1 root root 12582912 Jun 15 23:36 ibtmp1drwxr-x--- 2 root root 4096 Jun 15 23:36 mysqldrwxr-x--- 2 root root 8192 Jun 15 23:36 performance_schemadrwxr-x--- 2 root root 8192 Jun 15 23:36 sysdrwxr-x--- 2 root root 50 Jun 15 23:36 test1-rw-r----- 1 root root 504 Jun 15 23:36 xtrabackup_info
当数据恢复至DATADIR目录以后,还需要确保所有数据文件的属主和属组均为正确的用户,如mysql,否则,在 启动mysqld之前还需要事先修改数据文件的属主和属组。如:
[root@mysql ~]# chown -R mysql:mysql /usr/local/mysql/data/[root@mysql ~]# ll /usr/local/mysql/data/total 122916-rw-r----- 1 mysql mysql 357 Jun 15 23:36 ib_buffer_pool-rw-r----- 1 mysql mysql 12582912 Jun 15 23:36 ibdata1-rw-r----- 1 mysql mysql 50331648 Jun 15 23:36 ib_logfile0-rw-r----- 1 mysql mysql 50331648 Jun 15 23:36 ib_logfile1-rw-r----- 1 mysql mysql 12582912 Jun 15 23:36 ibtmp1drwxr-x--- 2 mysql mysql 4096 Jun 15 23:36 mysqldrwxr-x--- 2 mysql mysql 8192 Jun 15 23:36 performance_schemadrwxr-x--- 2 mysql mysql 8192 Jun 15 23:36 sysdrwxr-x--- 2 mysql mysql 50 Jun 15 23:36 test1-rw-r----- 1 mysql mysql 504 Jun 15 23:36 xtrabackup_info[root@mysql ~]# systemctl restart mysqld#验证还原后的数据mysql> select * from tb1;+------+----------+------+| id | name | back |+------+----------+------+| 1 | zhangsan | w || 2 | lisi | q || 3 | wangwu | e || 4 | zhaoliu | r || 5 | liuyi | t || 6 | didi | y |+------+----------+------+6 rows in set (0.00 sec)
(3)还原增量备份:为了防止还原时产生大量的二进制日志,在还原时可临时关闭二进制日志后再还原:
mysql> set sql_log_bin=0;mysql> source /opt/mysqlbackup/inc/2020-06-15.sql
也可以在命令行执行如下语句
mysql –uroot –p < /opt/mysqlbackup/inc/2020-06-15.sqlmysqlbinlog /opt/mysqlbackup/inc/2020-06-15.sql | mysql –uroot -p
重新启动二进制日志并验证还原数据:
mysql> set sql_log_bin=1;mysql> select * from tb1; # 可以看到两个tom已经回来了+------+----------+------+| id | name | back |+------+----------+------+| 1 | zhangsan | w || 2 | lisi | q || 3 | wangwu | e || 4 | zhaoliu | r || 5 | liuyi | t || 6 | didi | y || 7 | tom | u || 8 | tom2 | i |+------+----------+------+8 rows in set (0.00 sec)
方案二、xtrabackup完全备份+xtrabacup增量备份前面我们进行增量备份时,使用的还是老方法:备份二进制日志。其实xtrabackup还支持进行增量备份。 先介 绍下xtrabackup的备份原理 在InnoDB内部会维护一个redo日志文件,我们也可以叫做事务日志文件 (transaction log,事务日志)。事务日志会存储每一个InnoDB表数据的记录修改。当InnoDB启动时,InnoDB 会检查数据文件和事务日志,并执行两个步骤:它应用已经提交的事务日志到数据文件,并将修改过但没有提 交的数据进行回滚操作。 xtrabackup在启动时会记住log sequence number(LSN),并且复制所有的数据文 件。复制过程需要一些时间,所以这期间如果数据文件有改动,那么将会使数据库处于一个不同的时间点。这 时,xtrabackup会运行一个后台进程,用于监视事务日志,并从事务日志复制最新的修改。xtrabackup必须持 续的做这个操作,是因为事务日志是会轮转重复的写入,并且事务日志可以被重用。所以xtrabackup自启动开 始,就不停的将事务日志中每个数据文件的修改都记录下来。这就是xtrabackup的备份过程 所以每个InnoDB的页面都会包含一个LSN信息,每当相关的数据发生改变,相关的页面的LSN就会自动增长。 这正是InnoDB表可以进行增量备份的基础。 xtraBackup基于InnoDB的crash-recovery功能。它会复制innodb的 data file,由于不锁表,复制出来的数据是不一致的,在恢复的时候使用crash-recovery,使得数据恢复一致。 当InnoDB启动的时候,它会先去检查data file和transaction log,并且会做二步操作: 1.It applies committed transaction logentries to the data files 2.it performs an undo operation on anytransactions that modified data but did not commit. 所以在prepare过程中,XtraBackup使用复制到的transactions log对备份出来的innodb data file进行crash recovery。
准备测试环境,创建一个测试数据库,并创建一张表输入几行数据
mysql> create database test2;mysql> use test2;mysql> create table tab1(id int,name varchar(20));mysql> insert into tab1 values(1,‘tom1‘);mysql> insert into tab1 values(2,‘tom2‘);
1、 xtrabacup进行备份 执行完全备份:
[root@mysql ~]# xtrabackup --default-file=/etc/my.cnf --user=root --password="123" --port=3306 --backup --target-dir=/opt/mysqlbackup/full/full_incre_$(date+%Y-%m-%d_%H:%M:%S)#查看完全备份文件[root@mysql ~]# ls /opt/mysqlbackup/full/ -ltotal 0drwxr-x--- 6 root root 288 Jun 15 23:33 2020-06-15_22-49-41drwxr-x--- 7 root root 249 Jun 15 23:56 full_incre_#xtrabackup进行增量备份 先录入些数据,实现第一次增量数据:mysql> use test2;mysql> insert into tab1 values(3,‘tom3‘);[root@mysql ~]# xtrabackup --defaults-file=/etc/my.cnf --user=root --password="123" --port=3306 --backup --target-dir=/opt/mysqlbackup/inc/incre_$(date +%Y%m%d_%H%M%S) --incremental-basedir=/opt/mysqlbackup/full/full_incre_
部分显示信息如下图所示:
#查看增量备份文件:[root@mysql ~]# ls -l /opt/mysqlbackup/inc/total 8drwxr-x--- 7 root root 275 Jun 16 00:04 incre_20200616_000403#这里的增量备份其实只针对的是InnoDB,对于MyISAM来说,还是完整备份。 #向表中再插入几行数据,继续第二次增量备份 mysql> insert into tab1 values (4,‘tom4‘);mysql> commit;#接下来进行第二次增量备份[root@mysql ~]# xtrabackup --defaults-file=/etc/my.cnf --user=root --password="123" --port=3306 --backup --target-dir=/opt/mysqlbackup/inc/incre_$(date +%Y%m%d_%H%M%S) --incremental-basedir=/opt/mysqlbackup/inc/incre_20200616_000403
如下图所示:注:第二次增量备份--incremental-basedir指向上一次增量备份文件的位置。 注:第二次增量备份--incremental-basedir指向上一次增量备份文件的位置。 注:第二次增量备份--incremental-basedir指向上一次增量备份文件的位置。
#查看增量备份文件[root@mysql ~]# ls -l /opt/mysqlbackup/inc/total 8drwxr-x--- 7 root root 275 Jun 16 00:04 incre_20200616_000403drwxr-x--- 7 root root 275 Jun 16 00:08 incre_20200616_000826
2、 xtrabacup进行增量恢复 为了验证比对,先删除两个增量备份前表里面的数据
mysql> delete from tab1 where id=3;
完整备份恢复: 在进行恢复前,如果完整备份在远程主机上,首先将完整备份复制到本地主机上,如果是tar 包,则需要先解包,解包命令为:tar –izxf xxx.tar,这里必须使用-i参数(忽略存档中的 0 字节块(通常意味着 文件结束))。开始全备份恢复 :
[root@mysql ~]# xtrabackup --defaults-file=/etc/my.cnf --prepare --user=root --password="123" --apply-log-only --target-dir=/opt/mysqlbackup/full/full_incre_/
恢复成功如图所示:恢复到第一次增量的时刻 增量备份恢复的步骤和完整备份恢复的步骤基本一致,只是应用日志的过程稍有不 同。增量备份恢复时,是先将所有的增量备份挨个应用到完整备份的数据文件中,然后再将完整备份中的数据 恢复到数据库中。
[root@mysql ~]# xtrabackup --defaults-file=/etc/my.cnf --prepare --user=root --password="123" --apply-log-only --target-dir=/opt/mysqlbackup/full/full_incre_/ --incremental-dir=/opt/mysqlbackup/inc/incre_20200616_000403/
如图所示:恢复到第二次增量备份前面:
[root@mysql ~]# xtrabackup --defaults-file=/etc/my.cnf --prepare --user=root --password="123" --apply-log-only --target-dir=/opt/mysqlbackup/full/full_incre_/ --incremental-dir=/opt/mysqlbackup/inc/incre_20200616_000826/
如图所示:恢复整个库 :
[root@mysql ~]# xtrabackup --defaults-file=/etc/my.cnf --prepare --user=root --password="123" --target-dir=/opt/mysqlbackup/full/full_incre_/
如图所示:停止mysql数据库:
[root@mysql ~]# systemctl stop mysqld
开始rsync同步数据文件:
[root@mysql full_incre_]# rsync -rvt --exclude ‘xtrabackup_checkpoints‘ --exclude ‘xtrabackup_logfile‘ ./ /usr/local/mysql/data/
#当数据恢复至DATADIR目录以后,还需要确保所有数据文件的属主和属组均为正确的用户,如mysql,否则,在 启动mysqld之前还需要事先修改数据文件的属主和属组。 [root@mysql data]# lltotal 122972-rw-r----- 1 mysql mysql 56 Jun 15 23:38 auto.cnf-rw-r----- 1 root root 425 Jun 15 23:56 backup-my.cnf-rw-r----- 1 mysql mysql 177 Jun 15 23:38 bin_log.000001-rw-r----- 1 mysql mysql 177 Jun 15 23:40 bin_log.000002-rw-r----- 1 mysql mysql 1847 Jun 16 00:42 bin_log.000003-rw-r----- 1 mysql mysql 111 Jun 15 23:41 bin_log.index-rw-r----- 1 root root 298 Jun 15 23:56 ib_buffer_pool-rw-r----- 1 root root 12582912 Jun 16 00:19 ibdata1-rw-r----- 1 root root 50331648 Jun 16 00:19 ib_logfile0-rw-r----- 1 root root 50331648 Jun 16 00:19 ib_logfile1-rw-r----- 1 root root 12582912 Jun 16 00:19 ibtmp1drwxr-x--- 2 mysql mysql 4096 Jun 16 00:18 mysql-rw-r----- 1 mysql mysql 22460 Jun 16 00:42 mysql.errdrwxr-x--- 2 mysql mysql 8192 Jun 16 00:18 performance_schemadrwxr-x--- 2 mysql mysql 8192 Jun 16 00:18 sysdrwxr-x--- 2 mysql mysql 50 Jun 16 00:18 test1drwxr-x--- 2 mysql mysql 52 Jun 16 00:18 test2-rw-r----- 1 root root 20 Jun 16 00:18 xtrabackup_binlog_info-rw-r--r-- 1 root root 20 Jun 16 00:19 xtrabackup_binlog_pos_innodb-rw-r----- 1 root root 628 Jun 16 00:18 xtrabackup_info[root@mysql data]# chown -R mysql:mysql /usr/local/mysql/data/[root@mysql data]# systemctl restart mysqldmysql> select * from tab1;+------+------+| id | name |+------+------+| 1 | tom1 || 2 | tom2 || 3 | tom3 || 4 | tom4 |+------+------+
方案三、innobackupex全库备份+innobackupex增量备份测试环境准备创建一个测试数据库,并创建一张表输入几行数据
mysql> create database test3;mysql> use test3;mysql> create table tab1(id int,name varchar(20));mysql> insert into tab1 values(1,‘lisi1‘);mysql> insert into tab1 values(2,‘lisi2‘);
1、innobackupex先做完全备份
[root@mysql data]# innobackupex --defaults-file=/etc/my.cnf --user=root --password="123" /opt/mysqlbackup/full/full_incre_$(date +%Y%m%d_%H%M%S) --no-timestamp#查看完全备份文件[root@mysql data]# ls /opt/mysqlbackup/full/full_incre_20200616_005156
做第一次增量备份 先录入增量数据
mysql> insert into tab1 values(3,‘lisi3‘);#进行增强备份[root@mysql data]# innobackupex --incremental /opt/mysqlbackup/inc/incre_$(date +%Y%m%d_%H%M%S) --incremental-basedir=/opt/mysqlbackup/full/full_incre_20200616_005156 --user=root --password="123" --no-timestamp#查看增量备份文件[root@mysql data]# ll /opt/mysqlbackup/inc/drwxr-x--- 8 root root 288 Jun 16 00:56 incre_20200616_005610
基于全备和第一个增量备份来做第二次增量备份 先录入增量数据录入
mysql> insert into tab1 values(4,‘lisi4‘);[root@mysql inc]# innobackupex --incremental /opt/mysqlbackup/inc/incre_$(date +%Y%m%d_%H%M%S) --incremental-basedir=/opt/mysqlbackup/inc/incre_20200616_005610/ --user=root --password="123" --no-timestamp#查看增量备份文件[root@mysql inc]# lltotal 8drwxr-x--- 8 root root 288 Jun 16 00:56 incre_20200616_005610drwxr-x--- 8 root root 288 Jun 16 01:03 incre_20200616_010301
#**先删除两次增量数据,用来查看验证恢复结果**mysql> delete from tab1 ;#开始做恢复,恢复全备份[root@mysql inc]# innobackupex --apply-log --redo-only /opt/mysqlbackup/full/full_incre_20200616_005156/#--redo-only 用于准备增量备份内容把数据合并到全备份目录,配合incremental-dir 增量备份目录使用#基于全备份进行第一次增量备份的恢复 [root@mysql ~]# innobackupex --apply-log --redo-only /opt/mysqlbackup/full/full_incre_20200616_005156/ --incremental-dir=/opt/mysqlbackup/inc/incre_20200616_005610/#基于全备份和第一次增量备份,恢复第二次增量备份 [root@mysql ~]# innobackupex --apply-log --redo-only /opt/mysqlbackup/full/full_incre_20200616_005156/ --incremental-dir=/opt/mysqlbackup/inc/incre_20200616_010301/
#停止数据库[root@mysql ~]# systemctl stop mysqld
#清空数据目录下所有文件[root@mysql ~]# mkdir -p /tmp/mysqldatabak[root@mysql ~]# mv /usr/local/mysql/data/* /tmp/mysqldatabak/
#将恢复好的数据按照配置文件的需求拷贝到相应目录[root@mysql ~]# innobackupex --defaults-file=/etc/my.cnf --user=root --password="123" --copy-back /opt/mysqlbackup/full/full_incre_20200616_005156/
#当数据恢复至DATADIR目录以后,还需要确保所有数据文件的属主和属组均为正确的用户,如mysql,否则,在 启动mysqld之前还需要事先修改数据文件的属主和属组[root@mysql ~]# cd /usr/local/mysql/data/[root@mysql data]# lltotal 12328-rw-r----- 1 root root 298 Jun 16 01:12 ib_buffer_pool-rw-r----- 1 root root 12582912 Jun 16 01:12 ibdata1drwxr-x--- 2 root root 4096 Jun 16 01:12 mysqldrwxr-x--- 2 root root 8192 Jun 16 01:12 performance_schemadrwxr-x--- 2 root root 8192 Jun 16 01:12 sysdrwxr-x--- 2 root root 50 Jun 16 01:12 test1drwxr-x--- 2 root root 52 Jun 16 01:12 test2drwxr-x--- 2 root root 52 Jun 16 01:12 test3-rw-r----- 1 root root 20 Jun 16 01:12 xtrabackup_binlog_pos_innodb-rw-r----- 1 root root 598 Jun 16 01:12 xtrabackup_info[root@mysql data]# chown -R mysql:mysql /usr/local/mysql/data/#启动服务[root@mysql data]# systemctl restart mysqld
登录mysql界面,查看数据是否已经恢复
mysql> select * from tab1;+------+-------+| id | name |+------+-------+| 1 | lisi1 || 2 | lisi2 || 3 | lisi3 || 4 | lisi4 |+------+-------+4 rows in set (0.00 sec)
Xtrabackup的“流”及“备份压缩”功能 Xtrabackup对备份的数据文件支持“流”功能,即可以将备份的数据通过 STDOUT传输给tar程序进行归档,而不是默认的直接保存至某备份目录中。要使用此功能,仅需要使用-stream选项即可。
# innobackupex --user=root --password="123" --stream=tar /opt/mysqlbackup/full/ | gzip >/opt/mysqlbackup/full/full_`date +%F_%H%M%S`.tar.gz
xtrabackup 实现MySQL数据库备份
标签:ras option timestamp mes tom 日期时间 har http 准备
小编还为您整理了以下内容,可能对您也有帮助:
xtrabackup 会备份mysql数据库吗
[root@local-db opt]# innobackupex --defaults-file=/etc/my.cnf --user=root --password=123456 /bak/mysql/
该语句将拷贝数据文件(由my.cnf里的变量datadir指定)至备份目录下(/bak/mysql/),注意:如果不指定--defaults-file,默认值为/etc/my.cnf。
备份成功后,将在备份目录下创建一个时间戳目录(本例创建的目录为/bak/mysql/2015-07-08_18-52-43),在该目录下存放备份文件。
(2)恢复
删除数据库test123,尝试恢复
恢复之前,要先关闭数据库,并且删除数据文件和日志文件。
[root@local-db opt]# innobackupex --defaults-file=/etc/my.cnf --user=root --password=123456 --apply-log /bak/mysql/2015-07-08_18-52-43/
[root@local-db opt]# innobackupex --defaults-file=/etc/my.cnf --user=root --password=123456 --copy-back /bak/mysql/2015-07-08_18-52-43/
恢复分为两个步骤:
第1步是apply-log,为了加快速度,一般建议设置--use-memory,这个步骤完成之后,目录/bak/mysql/2015-07-08_18-52-43/下的备份文件已经准备就绪。
第2步是copy-back,即把备份文件拷贝至原数据目录下。恢复完成之后,一定要记得检查数据目录的所有者和权限是否正确。
3.增量备份及恢复
注意:innobackupex 增量备份仅针对InnoDB这类支持事务的引擎,对于MyISAM等引擎,则仍然是全备。
(1)增量备份
增量备份需要基于全备,我们已经有了一个全备(/bak/mysql/2015-07-08_18-52-43/),我们需要在该全备的基础上做增量备份。
测试新建库,导入新数据,做增量备份。
[root@local-db mysql]# innobackupex --defaults-file=/etc/my.cnf --user=root --password=123456 --incremental-basedir=/bak/mysql/2015-07-08_18-52-43/ --incremental /bak/mysql/
其中--incremental-basedir指向全备目录,--incremental指向增量备份的目录。
上面语句执行成功之后,会在--incremental执行的目录下创建一个时间戳子目录(本例中为:/bak/mysql/2015-07-08_19-46-30),在该目录下存放着增量备份的所有文件。
在备份目录下,有一个文件xtrabackup_checkpoints记录着备份信息,全备的信息如下:
基于该全备的增量备份的信息如下:
从上面可以看出,增量备份的from_lsn正好等于全备的to_lsn。
那么,我们是否可以在增量备份的基础上再做增量备份呢?答案是肯定的,只要把--incremental-basedir执行上一次增量备份的目录即可,如下所示:
[root@local-db mysql]# innobackupex --defaults-file=/etc/my.cnf --user=root --password=123456 --incremental-basedir=/bak/mysql/2015-07-08_19-46-30/ --incremental /bak/mysql/
它的xtrabackup_checkpoints记录着备份信息如下:
可以看到,该增量备份的from_lsn是从上一次增量备份的to_lsn开始的。
(2)恢复
删除数据库test456,尝试恢复
恢复之前,要先关闭数据库,并且删除数据文件和日志文件。
增量备份的恢复比全备要复杂很多,第一步是在所有备份目录下重做已提交的日志,如:
[root@local-db mysql]# innobackupex --defaults-file=/etc/my.cnf --user=root --password=123456 --apply-log --redo-only /bak/mysql/2015-07-08_18-52-43/
[root@local-db mysql]# innobackupex --defaults-file=/etc/my.cnf --user=root --password=123456 --apply-log --redo-only /bak/mysql/2015-07-08_18-52-43/ --incremental-dir=/bak/mysql/2015-07-08_19-46-30/
[root@local-db mysql]# innobackupex --defaults-file=/etc/my.cnf --user=root --password=123456 --apply-log --redo-only /bak/mysql/2015-07-08_18-52-43/ --incremental-dir=/bak/mysql/2015-07-08_21-01-19/
其中/bak/mysql/2015-07-08_18-52-43/是指全备目录,/bak/mysql/2015-07-08_19-46-30/是指第一次的增量备份,/bak/mysql/2015-07-08_21-01-19/是指第二次的增量备份,以此类推。
以上语句执行成功之后,最终数据在全备目录下。
第一步完成之后,我们开始第二步:回滚未完成的日志:
[root@local-db mysql]# innobackupex --defaults-file=/etc/my.cnf --user=root --password=123456 --apply-log /bak/mysql/2015-07-08_18-52-43/
上面执行完之后,/bak/mysql/2015-07-08_18-52-43/里的备份文件已完全准备就绪,最后一步是拷贝:
[root@local-db mysql]# innobackupex --defaults-file=/etc/my.cnf --user=root --password=123456 --copy-back /bak/mysql/2015-07-08_18-52-43/
修改目录权限,启动mysql。
修改目录权限,启动mysql。
恢复完成,如下图
本文出自 “Linux艺术(Q群:1991706)” 博客,请务必保留此出处http://304076020.blog.51cto.com/7503470/1674913
mysql5.6利用xtrabackup全备及增量备份
标签:mysql
xtrabackup 会备份mysql数据库吗
[root@local-db opt]# innobackupex --defaults-file=/etc/my.cnf --user=root --password=123456 /bak/mysql/
该语句将拷贝数据文件(由my.cnf里的变量datadir指定)至备份目录下(/bak/mysql/),注意:如果不指定--defaults-file,默认值为/etc/my.cnf。
备份成功后,将在备份目录下创建一个时间戳目录(本例创建的目录为/bak/mysql/2015-07-08_18-52-43),在该目录下存放备份文件。
(2)恢复
删除数据库test123,尝试恢复
恢复之前,要先关闭数据库,并且删除数据文件和日志文件。
[root@local-db opt]# innobackupex --defaults-file=/etc/my.cnf --user=root --password=123456 --apply-log /bak/mysql/2015-07-08_18-52-43/
[root@local-db opt]# innobackupex --defaults-file=/etc/my.cnf --user=root --password=123456 --copy-back /bak/mysql/2015-07-08_18-52-43/
恢复分为两个步骤:
第1步是apply-log,为了加快速度,一般建议设置--use-memory,这个步骤完成之后,目录/bak/mysql/2015-07-08_18-52-43/下的备份文件已经准备就绪。
第2步是copy-back,即把备份文件拷贝至原数据目录下。恢复完成之后,一定要记得检查数据目录的所有者和权限是否正确。
3.增量备份及恢复
注意:innobackupex 增量备份仅针对InnoDB这类支持事务的引擎,对于MyISAM等引擎,则仍然是全备。
(1)增量备份
增量备份需要基于全备,我们已经有了一个全备(/bak/mysql/2015-07-08_18-52-43/),我们需要在该全备的基础上做增量备份。
测试新建库,导入新数据,做增量备份。
[root@local-db mysql]# innobackupex --defaults-file=/etc/my.cnf --user=root --password=123456 --incremental-basedir=/bak/mysql/2015-07-08_18-52-43/ --incremental /bak/mysql/
其中--incremental-basedir指向全备目录,--incremental指向增量备份的目录。
上面语句执行成功之后,会在--incremental执行的目录下创建一个时间戳子目录(本例中为:/bak/mysql/2015-07-08_19-46-30),在该目录下存放着增量备份的所有文件。
在备份目录下,有一个文件xtrabackup_checkpoints记录着备份信息,全备的信息如下:
基于该全备的增量备份的信息如下:
从上面可以看出,增量备份的from_lsn正好等于全备的to_lsn。
那么,我们是否可以在增量备份的基础上再做增量备份呢?答案是肯定的,只要把--incremental-basedir执行上一次增量备份的目录即可,如下所示:
[root@local-db mysql]# innobackupex --defaults-file=/etc/my.cnf --user=root --password=123456 --incremental-basedir=/bak/mysql/2015-07-08_19-46-30/ --incremental /bak/mysql/
它的xtrabackup_checkpoints记录着备份信息如下:
可以看到,该增量备份的from_lsn是从上一次增量备份的to_lsn开始的。
(2)恢复
删除数据库test456,尝试恢复
恢复之前,要先关闭数据库,并且删除数据文件和日志文件。
增量备份的恢复比全备要复杂很多,第一步是在所有备份目录下重做已提交的日志,如:
[root@local-db mysql]# innobackupex --defaults-file=/etc/my.cnf --user=root --password=123456 --apply-log --redo-only /bak/mysql/2015-07-08_18-52-43/
[root@local-db mysql]# innobackupex --defaults-file=/etc/my.cnf --user=root --password=123456 --apply-log --redo-only /bak/mysql/2015-07-08_18-52-43/ --incremental-dir=/bak/mysql/2015-07-08_19-46-30/
[root@local-db mysql]# innobackupex --defaults-file=/etc/my.cnf --user=root --password=123456 --apply-log --redo-only /bak/mysql/2015-07-08_18-52-43/ --incremental-dir=/bak/mysql/2015-07-08_21-01-19/
其中/bak/mysql/2015-07-08_18-52-43/是指全备目录,/bak/mysql/2015-07-08_19-46-30/是指第一次的增量备份,/bak/mysql/2015-07-08_21-01-19/是指第二次的增量备份,以此类推。
以上语句执行成功之后,最终数据在全备目录下。
第一步完成之后,我们开始第二步:回滚未完成的日志:
[root@local-db mysql]# innobackupex --defaults-file=/etc/my.cnf --user=root --password=123456 --apply-log /bak/mysql/2015-07-08_18-52-43/
上面执行完之后,/bak/mysql/2015-07-08_18-52-43/里的备份文件已完全准备就绪,最后一步是拷贝:
[root@local-db mysql]# innobackupex --defaults-file=/etc/my.cnf --user=root --password=123456 --copy-back /bak/mysql/2015-07-08_18-52-43/
修改目录权限,启动mysql。
修改目录权限,启动mysql。
恢复完成,如下图
本文出自 “Linux艺术(Q群:1991706)” 博客,请务必保留此出处http://304076020.blog.51cto.com/7503470/1674913
mysql5.6利用xtrabackup全备及增量备份
标签:mysql
如何利用xtrabackup备份mysql数据库
:wget http://www.percona.com/downloads/XtraBackup/XtraBackup-2.2.9/binary/redhat/6/i386/percona-xtrabackup-2.2.9-5067.el6.i686.rpm
64位:wget http://www.percona.com/downloads/XtraBackup/XtraBackup-2.2.9/binary/redhat/6/x86_64/percona-xtrabackup-2.2.9-5067.el6.x86_64.rpm
rpm -ivh percona-xtrabackup-2.2.9-5067.el6.i686.rpm
使用:
全备份:(目前公司只采用了全备份)
innobackupex --user=root --password=123456 --socket=/tmp/mysqld.sock --defaults-file=/usr/local/mysql/my.cnf /data/mysql_bacp/ #备份数据库
注意:
/data/mysql_bacp/:备份目录
在/data/mysql_bacp/目录下面会生成一个以时间命名的目录
所有的数据库数据都被备份在这个目录下,同时又会生成几个新的文件:
backup-my.cnf: 备份命令用到的配置选项信息
xtrabackup_binlog_info: 备份时所用的二进制日志信息(记录了在备份时,正在用的二进制日志文件及pos值,这个在数据恢复时用)
xtrabackup_checkpoints: 备份的信息(备份类型(完全或增量)、备份状态(是否已经为prepared状态)、LSN(日志序列号)范围信息),可以查看此备份是全备份还是增量备份
xtrabackup_info: xtrabackup相关的信息
使用全备份恢复到备份时的数据:
/etc/init.d/mysqld stop #在数据恢复时一定要记得把mysql服务停掉
mv /opt/mysql/data/* /tmp/linshi/ #把数据库数据目录下的所有数据临时mv到一个临时目录里
innobackupex --apply-log 2015-06-09_13-02-30/ #找到最后一个全备份目录(全备份准备prepared) 意义:将未提交的事务进行回滚,将已经提交但还没有同步的数据进行同步
innobackupex --copy-back --defaults-file=/usr/local/mysql/my.cnf 2015-06-09_13-02-30/ #恢复数据
chown -R mysql.mysql /opt/mysql/data/ #修改数据权限(默认xtrabackup恢复数据后,所有数据的权限都是root)
/etc/init.d/mysqld start #启动mysql服务
使用二进制日志文件恢复备份之后的数据:
找到最后一个全备份目录:
cd /data/mysql_bacp/2015-06-09_13-02-30/
cat xtrabackup_binlog_info mysql-binlog.000052120
mysql-binlog.000052和120:做全备份时正在使用的二进制日志文件和此时的pos值
从这个二进制日志文件和pos值开始恢复之后的数据
参考:http://732233048.blog.51cto.com/9323668/1633051
本文出自 “见” 博客,请务必保留此出处http://732233048.blog.51cto.com/9323668/1660146
xtrabackup备份数据库
标签:mysql xtrabackup
如何利用xtrabackup备份mysql数据库
:wget http://www.percona.com/downloads/XtraBackup/XtraBackup-2.2.9/binary/redhat/6/i386/percona-xtrabackup-2.2.9-5067.el6.i686.rpm
64位:wget http://www.percona.com/downloads/XtraBackup/XtraBackup-2.2.9/binary/redhat/6/x86_64/percona-xtrabackup-2.2.9-5067.el6.x86_64.rpm
rpm -ivh percona-xtrabackup-2.2.9-5067.el6.i686.rpm
使用:
全备份:(目前公司只采用了全备份)
innobackupex --user=root --password=123456 --socket=/tmp/mysqld.sock --defaults-file=/usr/local/mysql/my.cnf /data/mysql_bacp/ #备份数据库
注意:
/data/mysql_bacp/:备份目录
在/data/mysql_bacp/目录下面会生成一个以时间命名的目录
所有的数据库数据都被备份在这个目录下,同时又会生成几个新的文件:
backup-my.cnf: 备份命令用到的配置选项信息
xtrabackup_binlog_info: 备份时所用的二进制日志信息(记录了在备份时,正在用的二进制日志文件及pos值,这个在数据恢复时用)
xtrabackup_checkpoints: 备份的信息(备份类型(完全或增量)、备份状态(是否已经为prepared状态)、LSN(日志序列号)范围信息),可以查看此备份是全备份还是增量备份
xtrabackup_info: xtrabackup相关的信息
使用全备份恢复到备份时的数据:
/etc/init.d/mysqld stop #在数据恢复时一定要记得把mysql服务停掉
mv /opt/mysql/data/* /tmp/linshi/ #把数据库数据目录下的所有数据临时mv到一个临时目录里
innobackupex --apply-log 2015-06-09_13-02-30/ #找到最后一个全备份目录(全备份准备prepared) 意义:将未提交的事务进行回滚,将已经提交但还没有同步的数据进行同步
innobackupex --copy-back --defaults-file=/usr/local/mysql/my.cnf 2015-06-09_13-02-30/ #恢复数据
chown -R mysql.mysql /opt/mysql/data/ #修改数据权限(默认xtrabackup恢复数据后,所有数据的权限都是root)
/etc/init.d/mysqld start #启动mysql服务
使用二进制日志文件恢复备份之后的数据:
找到最后一个全备份目录:
cd /data/mysql_bacp/2015-06-09_13-02-30/
cat xtrabackup_binlog_info mysql-binlog.000052120
mysql-binlog.000052和120:做全备份时正在使用的二进制日志文件和此时的pos值
从这个二进制日志文件和pos值开始恢复之后的数据
参考:http://732233048.blog.51cto.com/9323668/1633051
本文出自 “见” 博客,请务必保留此出处http://732233048.blog.51cto.com/9323668/1660146
xtrabackup备份数据库
标签:mysql xtrabackup
基于Xtrabackup8的Mysql定时全量,增量备份及恢复实战演练
官网:www.percona.com
percona-server
InnoDB --> XtraDB
percona提供的mysql数据库备份工具,惟一开源的能够对innodb和xtradb数据库进行热备的工具
手册:https://www.percona.com/doc/percona-xtrabackup/LATEST/index.html
xtrabackup 是用来备份 InnoDB 表的,不能备份非 InnoDB 表,和 MySQL Server 没有交互
innobackupex 脚本用来备份非 InnoDB 表,同时会调用 xtrabackup 命令来备份 InnoDB 表,还会和MySQL Server 发送命令进行交互,如加全局读锁(FTWRL)、获取位点(SHOW SLAVE STATUS)等。即innobackupex是在 xtrabackup 之上做了一层封装实现的
xtrabackup版本升级到2.4后,相比之前的2.1有了比较大的变化:innobackupex 功能全部集成到
xtrabackup 里面,只有一个 binary程序,另外为了兼容考虑,innobackupex作为 xtrabackup 的软链
接,即xtrabackup现在支持非Innodb表备份,并且 Innobackupex 在下一版本中移除,建议通过
xtrabackup替换innobackupex
使用innobackupex备份时,其会调用xtrabackup备份所有的InnoDB表,复制所有关于表结构定义的相
关文件(.frm)、以及MyISAM、MERGE、CSV和ARCHIVE表的相关文件,同时还会备份触发器和数据库
配置信息相关的文件。这些文件会被保存至一个以时间命名的目录中,在备份时,innobackupex还会在
备份目录中创建如下文件:
未完待续
MySQL备份和恢复[4]-xtrabackup备份工具
标签:doc 文件组 number 服务 arc http 文件 percona ber
基于Xtrabackup8的Mysql定时全量,增量备份及恢复实战演练
官网:www.percona.com
percona-server
InnoDB --> XtraDB
percona提供的mysql数据库备份工具,惟一开源的能够对innodb和xtradb数据库进行热备的工具
手册:https://www.percona.com/doc/percona-xtrabackup/LATEST/index.html
xtrabackup 是用来备份 InnoDB 表的,不能备份非 InnoDB 表,和 MySQL Server 没有交互
innobackupex 脚本用来备份非 InnoDB 表,同时会调用 xtrabackup 命令来备份 InnoDB 表,还会和MySQL Server 发送命令进行交互,如加全局读锁(FTWRL)、获取位点(SHOW SLAVE STATUS)等。即innobackupex是在 xtrabackup 之上做了一层封装实现的
xtrabackup版本升级到2.4后,相比之前的2.1有了比较大的变化:innobackupex 功能全部集成到
xtrabackup 里面,只有一个 binary程序,另外为了兼容考虑,innobackupex作为 xtrabackup 的软链
接,即xtrabackup现在支持非Innodb表备份,并且 Innobackupex 在下一版本中移除,建议通过
xtrabackup替换innobackupex
使用innobackupex备份时,其会调用xtrabackup备份所有的InnoDB表,复制所有关于表结构定义的相
关文件(.frm)、以及MyISAM、MERGE、CSV和ARCHIVE表的相关文件,同时还会备份触发器和数据库
配置信息相关的文件。这些文件会被保存至一个以时间命名的目录中,在备份时,innobackupex还会在
备份目录中创建如下文件:
未完待续
MySQL备份和恢复[4]-xtrabackup备份工具
标签:doc 文件组 number 服务 arc http 文件 percona ber
mysql数据库怎么备份数据库
mysqlmp基本语法:
mysqlmp -u username -p dbname table1 table2 ...-> BackupName.sql
其中:
dbname参数表示数据库的名称;
table1和table2参数表示需要备份的表的名称,为空则整个数据库备份;
BackupName.sql参数表设计备份文件的名称,文件名前面可以加上一个绝对路径。通常将数据库被分成一个后缀名为sql的文件;
使用root用户备份test数据库下的person表
xtrabackup能同时备份myisam和innodb吗
一、Xtrabackup介绍 A、Xtrabackup是什么 Xtrabackup是一个对InnoDB做数据备份的工具,支持在线热备份(备份时不影响数据读写),是商业备份工具InnoDB Hotbackup的一个很好的替代品。 Xtrabackup有两个主要的工具:xtrabackup、innobackupex 1、xtrabackup只能备份InnoDB和XtraDB两种数据表,而不能备份MyISAM数据表 2、innobackupex是参考了InnoDB Hotbackup的innoback脚本修改而来的f、/etc/mysql/myf、~/f,并读取配置文件中的[mysqld]和[xtrabackup]配置段。[mysqld]中只需要指定datadir、innodb_data_home_dir、innodb_data_file_path、innodb_log_group_home_dir、innodb_log_files_in_group、innodb_log_file_size6个参数即可让xtrabackup正常工作。 --defaults-extra-file=# 如果使用了该参数,在读取了全局配置文件之后,会再读取这里指定的配置文件 --target-dir=name 备份文件的存放目录路径 --backup 实施备份到target-dir --prepare 实施对备份文件进行恢复前的准备(生成InnoDB log file) --print-param 打印备份或恢复时需要的参数 --use-memory=# 该参数在 prepare 的时候使用,控制prepare时innodb实例使用的内存量 --suspend-at-end 在target-dir目录下产生一个xtrabackup_suspended文件,将xtrabackup进程挂起,不停地将数据文件的变化同步到备份文件,直到用户手工删除xtrabackup_suspended文件 --throttle=# 每秒IO次数,*backup时使用的I/O操作量,使备份对数据库正常业务的影响最小化 --log-stream 该参数在backup的时候使用,将xtrabackup_logfile的内容输出到标准输出,使用该参数时会自动使用suspend-at-end参数,innobackupex脚本的stream 模式会使用该参数。 --incremental-lsn=name 增量备份时只拷贝LSN比该参数指定值新的ibd pages,前次备份到了哪个LSN可以看前次备份集的xtrabackup_checkpoints文件 --incremental-basedir=name 该参数在backup的时候使用,备份比该参数指定位置的备份集新的idb pages --incremental-dir=name 该参数在prepare的时候使用,指定prepare时产生的f --backup --target-dir=/data0/backup/mysql/ cp -r /data0/mysql/data/testinnodb/ /data0/backup/mysql/ 注意:xtrabackup只备份数据文件,并不备份数据表结构(f --prepare --target-dir=/data0/backup/mysql/ 从备份目录复制对应数据库表结构到默认的数据目录 BASH cp -r /data0/backup/mysql/testinnodb/ /data0/mysql/data/ 删除默认数据目录中对应的数据文件并复制备份的数据文件到默认数据目录 BASH rm /data0/backup/mysql/ib* cp /data0/backup/mysql/ib* /data0/mysql/data/ 修改数据目录权限 BASH chown -R mysql:mysql /data0/mysql/data 重启MySQL BASH /data0/mysql/mysql restart b)增量备份 增量备份优点: 1、数据库太大没有足够的空间全量备份,作增量备份有效节省空间,且效率高。 2、支持热备份。备份过程不锁表,不受时间*,不影响用户使用。 3、每日备份只产生少量数据,远程备份传输更方便。同时节省空间。 4、备份恢复基于文件操作,降低直接对数据库操作风险。 5、备份效率更高,恢复效率更高。 这个我研究N久没成功,原因暂时还没找到。我测试环境的Mysql版本是5f --backup --target-dir=/data0/backup/mysql/base #生成的备份数据文件 ls /data0/backup/mysql/base/ ibdata1 xtrabackup_checkpoints xtrabackup_logfile #备份数据库表结构 cp -r /data0/mysql/data/testinnodb/ /data0/backup/mysql/ 以此全量备份为基础进行增量备份 BASH 复制代码 代码如下: #建立备份目录 mkdir -p /data0/backup/mysql/delta #建立一个增量备份 xtrabackup_55 --defaults-file=/data0/mysql/myf --prepare --target-dir=/data0/backup/mysql/base xtrabackup_55 --defaults-file=/data0/mysql/myf里datadir这个参数是必须要指定的,xtrabackup_55是根据它去定位innodb数据文件的位置。 innobackupex语法 BASH innobackup [--sleep=MS] [--compress[=LEVEL]] [--include=REGEXP] [--user=NAME] [--password=WORD] [--port=PORT] [--socket=SOCKET] [--no-timestamp] [--ibbackup=IBBACKUP-BINARY] [--slave-info] [--stream=tar] [--defaults-file=MYf /data0/backup/mysql 2>/tmp/mysqlbackupf --no-lock --stream=tar /data0/backup/mysql/ 2>/tmp/innobackupf --no-lock --stream=tar /data0/backup/mysql/ 2>/tmp/innobackupf --no-lock --stream=tar /data0/backup/mysql/ssh root@192f --no-lock /data0/backup/mysql 从备份目录拷贝数据、索引、日志到myf --no-lock /data0/backup/mysql 修改数据目录权限 BASH chown -R mysql:mysql /data0/mysql/data 重启MySQL BASH /data0/mysql/mysql restart 五、参考文档 /Linux/2011-05/35410/u4/122567/showart_2537465.html
xtrabackup能同时备份myisam和innodb吗
一、Xtrabackup介绍 A、Xtrabackup是什么 Xtrabackup是一个对InnoDB做数据备份的工具,支持在线热备份(备份时不影响数据读写),是商业备份工具InnoDB Hotbackup的一个很好的替代品。 Xtrabackup有两个主要的工具:xtrabackup、innobackupex 1、xtrabackup只能备份InnoDB和XtraDB两种数据表,而不能备份MyISAM数据表 2、innobackupex是参考了InnoDB Hotbackup的innoback脚本修改而来的f、/etc/mysql/myf、~/f,并读取配置文件中的[mysqld]和[xtrabackup]配置段。[mysqld]中只需要指定datadir、innodb_data_home_dir、innodb_data_file_path、innodb_log_group_home_dir、innodb_log_files_in_group、innodb_log_file_size6个参数即可让xtrabackup正常工作。 --defaults-extra-file=# 如果使用了该参数,在读取了全局配置文件之后,会再读取这里指定的配置文件 --target-dir=name 备份文件的存放目录路径 --backup 实施备份到target-dir --prepare 实施对备份文件进行恢复前的准备(生成InnoDB log file) --print-param 打印备份或恢复时需要的参数 --use-memory=# 该参数在 prepare 的时候使用,控制prepare时innodb实例使用的内存量 --suspend-at-end 在target-dir目录下产生一个xtrabackup_suspended文件,将xtrabackup进程挂起,不停地将数据文件的变化同步到备份文件,直到用户手工删除xtrabackup_suspended文件 --throttle=# 每秒IO次数,*backup时使用的I/O操作量,使备份对数据库正常业务的影响最小化 --log-stream 该参数在backup的时候使用,将xtrabackup_logfile的内容输出到标准输出,使用该参数时会自动使用suspend-at-end参数,innobackupex脚本的stream 模式会使用该参数。 --incremental-lsn=name 增量备份时只拷贝LSN比该参数指定值新的ibd pages,前次备份到了哪个LSN可以看前次备份集的xtrabackup_checkpoints文件 --incremental-basedir=name 该参数在backup的时候使用,备份比该参数指定位置的备份集新的idb pages --incremental-dir=name 该参数在prepare的时候使用,指定prepare时产生的f --backup --target-dir=/data0/backup/mysql/ cp -r /data0/mysql/data/testinnodb/ /data0/backup/mysql/ 注意:xtrabackup只备份数据文件,并不备份数据表结构(f --prepare --target-dir=/data0/backup/mysql/ 从备份目录复制对应数据库表结构到默认的数据目录 BASH cp -r /data0/backup/mysql/testinnodb/ /data0/mysql/data/ 删除默认数据目录中对应的数据文件并复制备份的数据文件到默认数据目录 BASH rm /data0/backup/mysql/ib* cp /data0/backup/mysql/ib* /data0/mysql/data/ 修改数据目录权限 BASH chown -R mysql:mysql /data0/mysql/data 重启MySQL BASH /data0/mysql/mysql restart b)增量备份 增量备份优点: 1、数据库太大没有足够的空间全量备份,作增量备份有效节省空间,且效率高。 2、支持热备份。备份过程不锁表,不受时间*,不影响用户使用。 3、每日备份只产生少量数据,远程备份传输更方便。同时节省空间。 4、备份恢复基于文件操作,降低直接对数据库操作风险。 5、备份效率更高,恢复效率更高。 这个我研究N久没成功,原因暂时还没找到。我测试环境的Mysql版本是5f --backup --target-dir=/data0/backup/mysql/base #生成的备份数据文件 ls /data0/backup/mysql/base/ ibdata1 xtrabackup_checkpoints xtrabackup_logfile #备份数据库表结构 cp -r /data0/mysql/data/testinnodb/ /data0/backup/mysql/ 以此全量备份为基础进行增量备份 BASH 复制代码 代码如下: #建立备份目录 mkdir -p /data0/backup/mysql/delta #建立一个增量备份 xtrabackup_55 --defaults-file=/data0/mysql/myf --prepare --target-dir=/data0/backup/mysql/base xtrabackup_55 --defaults-file=/data0/mysql/myf里datadir这个参数是必须要指定的,xtrabackup_55是根据它去定位innodb数据文件的位置。 innobackupex语法 BASH innobackup [--sleep=MS] [--compress[=LEVEL]] [--include=REGEXP] [--user=NAME] [--password=WORD] [--port=PORT] [--socket=SOCKET] [--no-timestamp] [--ibbackup=IBBACKUP-BINARY] [--slave-info] [--stream=tar] [--defaults-file=MYf /data0/backup/mysql 2>/tmp/mysqlbackupf --no-lock --stream=tar /data0/backup/mysql/ 2>/tmp/innobackupf --no-lock --stream=tar /data0/backup/mysql/ 2>/tmp/innobackupf --no-lock --stream=tar /data0/backup/mysql/ssh root@192f --no-lock /data0/backup/mysql 从备份目录拷贝数据、索引、日志到myf --no-lock /data0/backup/mysql 修改数据目录权限 BASH chown -R mysql:mysql /data0/mysql/data 重启MySQL BASH /data0/mysql/mysql restart 五、参考文档 /Linux/2011-05/35410/u4/122567/showart_2537465.html
mysql如何快速备份
来源:知乎
河南-老宋(志强)
问题描述的不是非常的清晰
使用mysqlmp备份时一般会会加上--single-transaction参数,这里假设你是加了这个参数。
一 加速备份
1 加了single-transaction参数 备份时 需要先flush table with read lock 这个过程中会有一个锁表的过程,如果有事务或语句正在执行,没有结束,那么备份进程会一直等待,并且阻塞别的事务,那么也会影响业务。所以要先确认备份的时候没有大的事务在运行。
具体 single-transaction的加锁可以参考 我的博客:mysqlmp备份时加single-transaction会不会加锁
2 mysqlmp是单进程的,没有办法并行,但现在机器的瓶颈多是出现在IO方面,可以使用更了的IO设备加快速度
3 mysqlmp时如果空间够的话,不要边压缩边备份
二 加速恢复
1 关闭binlog:不写入Binlog会大大的加快数据导入的速度
2 innodb_flush_log_at_trx_commit=0
3 更好的配置
建议:
一 如果非要使用逻辑备份,可以考虑mysqlmper, mysqlpump(5.7)这两个工具去备份,这两个在备份的时候支持并行操作,mysqlmper还可以对单表进行恢复,在只需要恢复单表的情况下,恢复速度会大大加快
二 使用物理备份 xtrabackup (open source),MEB(oracle提供,收费): 他们的备份原理是基于mysql crash recover, 备份速度 是和逻辑备份的相差不太大。但是恢复速度却有很大的提升。
逻辑备份 备出来的是sql语句文件,恢复时需要一条一条的执行sql,所以恢复很慢。
而物理备份和还原的速度 相当于直接copy文件,所以恢复的时候性能有很大的提升
并且这两个软件还支持并行,效果更好。
逻辑备份最大的优点是 备份好的文件经压缩后占用空间较小,最大缺点恢复太慢
物理备份可以很快的恢复,但是备份好的文件压缩后占用空间比逻辑备份要大。
使用云,你做为用户可以不用考虑这些事情。
附:xtrabackup的并行参数
Parallel local backups
Parallel compression
Parallel encryption
Parallel apply-log
Gary Chen
《MySQL DBA*之道》作者。从事数据库领域10多年。
1.一般来说,你只有靠更好的硬件. 软件没有大的变动的情况下不可能突破硬件瓶颈;
2. mysqlmp默认的导出选项已经可以了,单进程的工具不要期望太多,TommyChiu介绍的工具可试试.;
3. 导出的时候观察下系统,如果是cpu瓶颈,你基本无解.如果是swap问题,看是否是因为内存不够;
4. 恢复的时候主要是一个参数:innodb_flush_log_at_trx_commit=2
TommyChiu
mk-parallel-mp 试试
mysql如何快速备份
来源:知乎
河南-老宋(志强)
问题描述的不是非常的清晰
使用mysqlmp备份时一般会会加上--single-transaction参数,这里假设你是加了这个参数。
一 加速备份
1 加了single-transaction参数 备份时 需要先flush table with read lock 这个过程中会有一个锁表的过程,如果有事务或语句正在执行,没有结束,那么备份进程会一直等待,并且阻塞别的事务,那么也会影响业务。所以要先确认备份的时候没有大的事务在运行。
具体 single-transaction的加锁可以参考 我的博客:mysqlmp备份时加single-transaction会不会加锁
2 mysqlmp是单进程的,没有办法并行,但现在机器的瓶颈多是出现在IO方面,可以使用更了的IO设备加快速度
3 mysqlmp时如果空间够的话,不要边压缩边备份
二 加速恢复
1 关闭binlog:不写入Binlog会大大的加快数据导入的速度
2 innodb_flush_log_at_trx_commit=0
3 更好的配置
建议:
一 如果非要使用逻辑备份,可以考虑mysqlmper, mysqlpump(5.7)这两个工具去备份,这两个在备份的时候支持并行操作,mysqlmper还可以对单表进行恢复,在只需要恢复单表的情况下,恢复速度会大大加快
二 使用物理备份 xtrabackup (open source),MEB(oracle提供,收费): 他们的备份原理是基于mysql crash recover, 备份速度 是和逻辑备份的相差不太大。但是恢复速度却有很大的提升。
逻辑备份 备出来的是sql语句文件,恢复时需要一条一条的执行sql,所以恢复很慢。
而物理备份和还原的速度 相当于直接copy文件,所以恢复的时候性能有很大的提升
并且这两个软件还支持并行,效果更好。
逻辑备份最大的优点是 备份好的文件经压缩后占用空间较小,最大缺点恢复太慢
物理备份可以很快的恢复,但是备份好的文件压缩后占用空间比逻辑备份要大。
使用云,你做为用户可以不用考虑这些事情。
附:xtrabackup的并行参数
Parallel local backups
Parallel compression
Parallel encryption
Parallel apply-log
Gary Chen
《MySQL DBA*之道》作者。从事数据库领域10多年。
1.一般来说,你只有靠更好的硬件. 软件没有大的变动的情况下不可能突破硬件瓶颈;
2. mysqlmp默认的导出选项已经可以了,单进程的工具不要期望太多,TommyChiu介绍的工具可试试.;
3. 导出的时候观察下系统,如果是cpu瓶颈,你基本无解.如果是swap问题,看是否是因为内存不够;
4. 恢复的时候主要是一个参数:innodb_flush_log_at_trx_commit=2
TommyChiu
mk-parallel-mp 试试
windows下Mysql 怎样备份和还原?
双击MySQL Tools for 5.0MySQLAdministrator.exe;
点击Backup;
点击NewProject ;
选择中要备份的数据库,按标有>按钮;
接着点击ExecutBackup Now;
还原,选中倒数第二个Restore;
点击OpenBackup File;
点击打开按钮返回;
点击StartRestore 按钮。
windows下Mysql 怎样备份和还原?
双击MySQL Tools for 5.0MySQLAdministrator.exe;
点击Backup;
点击NewProject ;
选择中要备份的数据库,按标有>按钮;
接着点击ExecutBackup Now;
还原,选中倒数第二个Restore;
点击OpenBackup File;
点击打开按钮返回;
点击StartRestore 按钮。
Xtrabackup 能不能做单库的备份恢复
大数据量备份与还原,始终是个难点。当MYSQL超10G,用mysqlmp来导出就比较慢了。在这里推荐xtrabackup,这个工具比mysqlmp要快很多。 一、Xtrabackup介绍 1、Xtrabackup是什么 Xtrabackup是一个对InnoDB做数据备份的工具,支持在线热备份(备份时不影响数据读写),是商业备份工具InnoDB Hotbackup的一个很好的替代品。 Xtrabackup有两个主要的工具:xtrabackup、innobackupex 1、xtrabackup只能备份InnoDB和XtraDB两种数据表,而不能备份MyISAM数据表 2、 innobackupex是参考了InnoDB Hotbackup的innoback脚本修改而来的.innobackupex是一个perl脚本封装,封装了xtrabackup。主要是为了方便的 同时备份InnoDB和MyISAM引擎的表,但在处理myisam时需要加一个读锁。并且加入了一些使用的选项。如slave-info可以记录备份恢 复后,作为slave需要的一些信息,根据这些信息,可以很方便的利用备份来重做slave。 2、Xtrabackup可以做什么 : 在线(热)备份整个库的InnoDB、 XtraDB表 在xtrabackup的上一次整库备份基础上做增量备份(innodb only) 以流的形式产生备份,可以直接保存到远程机器上(本机硬盘空间不足时很有用) MySQL数据库本身提供的工具并不支持真正的增量备份,二进制日志恢复是point-in-time(时间点)的恢复而不是增量备份。 Xtrabackup工具支持对InnoDB存储引擎的增量备份,工作原理如下: (1)首先完成一个完全备份,并记录下此时检查点的LSN(Log Sequence Number)。 (2)在进程增量备份时,比较表空间中每个页的LSN是否大于上次备份时的LSN,如果是,则备份该页,同时记录当前检查点的LSN。 首 先,在logfile中找到并记录最后一个checkpoint(“last checkpoint LSN”),然后开始从LSN的位置开始拷贝InnoDB的logfile到xtrabackup_logfile;接着,开始拷贝全部的数据文 件.ibd;在拷贝全部数据文件结束之后,才停止拷贝logfile。 因为logfile里面记录全部的数据修改情况,所以,即时在备份过程中数据文件被修改过了,恢复时仍然能够通过解析xtrabackup_logfile保持数据的一致。 因为innobackupex支持innodb,myisam,所以本文说一下,怎么使用innobackupex。 二,安装xtrabackup 1、下载地址 /downloads/XtraBackup/ 2、安装 根据需求,选择不同的版本,我选择的是rpm安装包,如果报以下错误 复制代码 代码如下: [root@localhost xtrabackup]# rpm -ivh percona-xtrabackup-2.2.4-5004.el6.x86_64.rpm warning: percona-xtrabackup-2.2.4-5004.el6.x86_64.rpm: Header V4 DSA/SHA1 Signature, key ID cd2efd2a: NOKEY error: Failed dependencies: perl(Time::HiRes) is needed by percona-xtrabackup-2.2.4-5004.el6.x86_64 解决办法: 复制代码 代码如下: [root@localhost xtrabackup]# yum -y install perl perl-devel lio lio-devel perl-Time-HiRes perl-DBD-MySQL //安装依赖包 [root@localhost xtrabackup]# rpm -ivh percona-xtrabackup-2.2.4-5004.el6.x86_64.rpm //重新安装 warning: percona-xtrabackup-2.2.4-5004.el6.x86_64.rpm: Header V4 DSA/SHA1 Signature, key ID cd2efd2a: NOKEY Preparing... ########################################### [100%] 1:percona-xtrabackup ########################################### [100%]
Xtrabackup 能不能做单库的备份恢复
大数据量备份与还原,始终是个难点。当MYSQL超10G,用mysqlmp来导出就比较慢了。在这里推荐xtrabackup,这个工具比mysqlmp要快很多。 一、Xtrabackup介绍 1、Xtrabackup是什么 Xtrabackup是一个对InnoDB做数据备份的工具,支持在线热备份(备份时不影响数据读写),是商业备份工具InnoDB Hotbackup的一个很好的替代品。 Xtrabackup有两个主要的工具:xtrabackup、innobackupex 1、xtrabackup只能备份InnoDB和XtraDB两种数据表,而不能备份MyISAM数据表 2、 innobackupex是参考了InnoDB Hotbackup的innoback脚本修改而来的.innobackupex是一个perl脚本封装,封装了xtrabackup。主要是为了方便的 同时备份InnoDB和MyISAM引擎的表,但在处理myisam时需要加一个读锁。并且加入了一些使用的选项。如slave-info可以记录备份恢 复后,作为slave需要的一些信息,根据这些信息,可以很方便的利用备份来重做slave。 2、Xtrabackup可以做什么 : 在线(热)备份整个库的InnoDB、 XtraDB表 在xtrabackup的上一次整库备份基础上做增量备份(innodb only) 以流的形式产生备份,可以直接保存到远程机器上(本机硬盘空间不足时很有用) MySQL数据库本身提供的工具并不支持真正的增量备份,二进制日志恢复是point-in-time(时间点)的恢复而不是增量备份。 Xtrabackup工具支持对InnoDB存储引擎的增量备份,工作原理如下: (1)首先完成一个完全备份,并记录下此时检查点的LSN(Log Sequence Number)。 (2)在进程增量备份时,比较表空间中每个页的LSN是否大于上次备份时的LSN,如果是,则备份该页,同时记录当前检查点的LSN。 首 先,在logfile中找到并记录最后一个checkpoint(“last checkpoint LSN”),然后开始从LSN的位置开始拷贝InnoDB的logfile到xtrabackup_logfile;接着,开始拷贝全部的数据文 件.ibd;在拷贝全部数据文件结束之后,才停止拷贝logfile。 因为logfile里面记录全部的数据修改情况,所以,即时在备份过程中数据文件被修改过了,恢复时仍然能够通过解析xtrabackup_logfile保持数据的一致。 因为innobackupex支持innodb,myisam,所以本文说一下,怎么使用innobackupex。 二,安装xtrabackup 1、下载地址 /downloads/XtraBackup/ 2、安装 根据需求,选择不同的版本,我选择的是rpm安装包,如果报以下错误 复制代码 代码如下: [root@localhost xtrabackup]# rpm -ivh percona-xtrabackup-2.2.4-5004.el6.x86_64.rpm warning: percona-xtrabackup-2.2.4-5004.el6.x86_64.rpm: Header V4 DSA/SHA1 Signature, key ID cd2efd2a: NOKEY error: Failed dependencies: perl(Time::HiRes) is needed by percona-xtrabackup-2.2.4-5004.el6.x86_64 解决办法: 复制代码 代码如下: [root@localhost xtrabackup]# yum -y install perl perl-devel lio lio-devel perl-Time-HiRes perl-DBD-MySQL //安装依赖包 [root@localhost xtrabackup]# rpm -ivh percona-xtrabackup-2.2.4-5004.el6.x86_64.rpm //重新安装 warning: percona-xtrabackup-2.2.4-5004.el6.x86_64.rpm: Header V4 DSA/SHA1 Signature, key ID cd2efd2a: NOKEY Preparing... ########################################### [100%] 1:percona-xtrabackup ########################################### [100%]
如何实现MySQL的自动备份
一般在Linux服务器上,都是自己写自动化脚本,然后再加入定时任务即可。
现在备份一般都使用xtrabackup了,是percona出品的。
你也可以参考下官网的工具是如何备份的。
https://dev.mysql.com/doc/refman/5.6/en/backup-and-recovery.html
在这上www.linuxprobe.com/chapter-04.html可以看看如何写脚本。