percona软件介绍
MySQL备份工具
常用的MySQL备份工具
- 效率较低、备份和还原速度慢、锁表
- 备份过程中,数据插入和更新操作被阻塞
XtraBackup工具
- 备份过程中不锁库表,适合生产环境
- 由专业组织Percona提供(改进MySQL分支)
- xtrabackup:C程序,支持InnoDB/XtraDB
- innobackupex:以Perl脚本封装xtrabackup,还支持MyISAM
安装percona
libev软件
提取码:mrt8
percona软件包
提取码:wnmo
libev软件包可以直接使用rpm命令安装
percona软件要到下载软件的目录进行yum安装,解决依赖
[root@host51 ~
]
[root@host51 ~
]
[root@host51 ~
]
/usr/bin/innobackupex
[root@host51 ~
]
/usr/bin/innobackupex //备份innodb、xtrdb、myisam引擎的表
/usr/bin/xbcloud
/usr/bin/xbcloud_osenv
/usr/bin/xbcrypt
/usr/bin/xbstream
/usr/bin/xtrabackup //备份innodb、xtrdb引擎的表
/usr/share/doc/percona-xtrabackup-24-2.4.7
/usr/share/doc/percona-xtrabackup-24-2.4.7/COPYING
/usr/share/man/man1/innobackupex.1.gz
/usr/share/man/man1/xbcrypt.1.gz
/ usr/share/man/man1/xbstream.1.gz
/usr/share/man/man1/xtrabackup.1.gz
[root@host51 ~
]
[root@host51 ~
]
innobackupex命令
常用选项含义
| –host | 主机名 |
| –user | 用户名 |
| –port | 端口号 |
| –password | 密码 |
| –databases | 数据库名 |
| –no-timestamp | 不用日期命名备份文件存储的子目录名 |
| –redo-only | 日志合并 |
| –apply-log | 准备恢复数据 |
| –copy-log | 拷贝数据 |
| –incremental 目录名 | 增量备份 |
| –increment-basedir=目录名 | 增量备份时,制定上一次备份数据存储的目录名 |
| –increment-dir=目录名 | 准备恢复数据时,指定增量备份数据存储的目录名 |
| –export | 导出表信息 |
| import | 导入表空间 |
--databases
="库名" //1个库
--databases
="库1 库2" //多个库
--databases
="库1.表" //1张表
[root@host51 ~
]
[root@host51 ~
]
[root@host51 ~
]
[root@host51 ~
]
[root@host51 ~
]
[root@host51 ~
]
innobackupex备份与恢复
完全备份与恢复
应用示例:在host51主机将所有信息备份,在host52主机做完全恢复,在备份的过程中不会对备份的表加锁,但是要求必须在空库下进行备份
准备环境:
首先!实验的所有主机都一定要有percona软件以及libev软件
实验将host51主机的库还原成初始状态的库
创建一个新的用于实验的库
创建两个存储数据的表,分别疯狂的写入数据
在51主机上
mysql
> drop database db1
; drop database db2
; drop database db3
;
mysql
> show databases
;
+--------------------+
| Database
|
+--------------------+
| information_schema
|
| mysql
|
| performance_schema
|
| sys
|
+--------------------+
4 rows
in set (0.00 sec
)
mysql
> create database gamedb
;
mysql
> create table gamedb.a
(id int
);
mysql
> create table gamedb.b
(name char
(10
));
mysql
> insert into gamedb.a values
(10
);
mysql
> insert into gamedb.b values
("bob");
mysql
> select count
(*
) from gamedb.a
;
+----------+
| count
(*
) |
+----------+
| 10
|
+----------+
1 row
in set (0.01 sec
)mysql
> select count
(*
) from gamedb.b
;
+----------+
| count
(*
) |
+----------+
| 11
|
+----------+
1 row
in set (0.00 sec
)mysql
> select * from gamedb.a
;
+------+
| id |
+------+
| 10
|
| 11
|
| 12
|
| 100
|
| 500
|
| 566
|
| 43
|
| 4455
|
| 4457
|
| 3552
|
+------+
10 rows
in set (0.00 sec
)mysql
> select * from gamedb.b
;
+--------+
| name
|
+--------+
| tian
|
| bob
|
| aaa
|
| bbb
|
| ccc
|
| sss
|
| ddd
|
| eee
|
| ffff
|
| gjkgjk
|
| fffghh
|
+--------+
11 rows
in set (0.00 sec
)innobackupex --user root --password 123456 /fullbak
rm -rf /fullbak/
innobackupex --user root --password 123456 /fullbak --no-timestamp
ls /fullbak
[root@host51 ~
]
backup_type
= full-backuped
from_lsn
= 0
to_lsn
= 3010832
last_lsn
= 3010841
compact
= 0
recover_binlog_info
= 0
[root@host51 ~
]在52主机上进行数据恢复,在52主机上也要有两个软件包
恢复数据的步骤:
1.关闭mysqld服务
2.删除数据库目录下的所有,恢复数据时要求目录为空
3.准备恢复数据
4.恢复数据
5.修改当前数据库目录的拥有者和所属组为mysql
6.重启服务
7.以root用户登录数据库查看数据是否恢复成功
[root@host52 ~
]
[root@host52 ~
]
[root@host52 ~
]
[root@host52 ~
]
backup_type
= full-backuped
from_lsn
= 0
to_lsn
= 3010832
last_lsn
= 3010841
compact
= 0
recover_binlog_info
= 0
[root@host52 ~
]
backup-my.cnf ib_logfile0 performance_schema xtrabackup_checkpoints
gamedb ib_logfile1 sys xtrabackup_info
ib_buffer_pool ibtmp1 xtrabackup_binlog_info xtrabackup_logfile
ibdata1 mysql xtrabackup_binlog_pos_innodb
[root@host52 ~
]
[root@host52 ~
]
backup_type
= full-prepared
from_lsn
= 0
to_lsn
= 3010832
last_lsn
= 3010841
compact
= 0
recover_binlog_info
= 0
[root@host52 ~
]
[root@host52 ~
]
[root@host52 ~
]
gamedb ib_logfile0 mysql xtrabackup_binlog_pos_innodb
ib_buffer_pool ib_logfile1 performance_schema xtrabackup_info
ibdata1 ibtmp1 sys
[root@host52 ~
]
总用量 122920
drwxr-x---. 2 root root 72 2月 19 17:24 gamedb
-rw-r-----. 1 root root 480 2月 19 17:24 ib_buffer_pool
-rw-r-----. 1 root root 12582912 2月 19 17:24 ibdata1
-rw-r-----. 1 root root 50331648 2月 19 17:24 ib_logfile0
-rw-r-----. 1 root root 50331648 2月 19 17:24 ib_logfile1
-rw-r-----. 1 root root 12582912 2月 19 17:24 ibtmp1
drwxr-x---. 2 root root 4096 2月 19 17:24 mysql
drwxr-x---. 2 root root 8192 2月 19 17:24 performance_schema
drwxr-x---. 2 root root 8192 2月 19 17:24 sys
-rw-r-----. 1 root root 17 2月 19 17:24 xtrabackup_binlog_pos_innodb
-rw-r-----. 1 root root 482 2月 19 17:24 xtrabackup_info
[root@host52 ~
]
[root@host52 ~
]
总用量 122920
drwxr-x---. 2 mysql mysql 72 2月 19 02:46 gamedb
-rw-r-----. 1 mysql mysql 480 2月 19 02:46 ib_buffer_pool
-rw-r-----. 1 mysql mysql 12582912 2月 19 02:46 ibdata1
-rw-r-----. 1 mysql mysql 50331648 2月 19 02:46 ib_logfile0
-rw-r-----. 1 mysql mysql 50331648 2月 19 02:46 ib_logfile1
-rw-r-----. 1 mysql mysql 12582912 2月 19 02:46 ibtmp1
drwxr-x---. 2 mysql mysql 4096 2月 19 02:46 mysql
drwxr-x---. 2 mysql mysql 8192 2月 19 02:46 performance_schema
drwxr-x---. 2 mysql mysql 8192 2月 19 02:46 sys
-rw-r-----. 1 mysql mysql 17 2月 19 02:46 xtrabackup_binlog_pos_innodb
-rw-r-----. 1 mysql mysql 482 2月 19 02:46 xtrabackup_info
[root@host52 ~
]
[root@host52 ~
]
mysql
>show databases
;
+--------------------+
| Database
|
+--------------------+
| information_schema
|
| gamedb
|
| mysql
|
| performance_schema
|
| sys
|
+--------------------+
5 rows
in set (0.01 sec
)mysql
>select * from gamedb.a
;
+------+
| id |
+------+
| 10
|
| 11
|
| 12
|
| 100
|
| 500
|
| 566
|
| 43
|
| 4455
|
| 4457
|
| 3552
|
+------+
10 rows
in set (0.07 sec
)mysql
>select * from gamedb.a
;
+--------+
| name
|
+--------+
| tian
|
| bob
|
| aaa
|
| bbb
|
| ccc
|
| sss
|
| ddd
|
| eee
|
| ffff
|
| gjkgjk
|
| fffghh
|
+--------+
11 rows
in set (0.01 sec
)
mysql
> select count
(*
) from gamedb.b
;
+----------+
| count
(*
) |
+----------+
| 11
|
+----------+
1 row
in set (0.00 sec
)mysql
> select count
(*
) from gamedb.a
;
+----------+
| count
(*
) |
+----------+
| 10
|
+----------+
1 row
in set (0.00 sec
)
恢复单张表
- 操作步骤:
1.删除表空间
2.导出表信息
3.拷贝表信息文件到数据库目录下
4.修改表信息文件的所有者以及组用户为mysql
5.导入表空间, 表空间:存储数据的表文件(表名.ibd)
6.删除数据库目录下的表信息文件
7.查看表记录
mysql
> alter table 库名.表名 discard tablespace
; //删除表空间
]
]
]
mysql
> alter table 库名.表名
import tablespace
; //导入表空间
mysql
> select * from 库名.表名
; //查看表记录
]
在host52主机上模拟不小心删除了gamedb库下的b表,在host51主机上备份还原回数据
[root@host52 ~
]mysql
> select * from gamedb.b
;
+--------+
| name
|
+--------+
| tian
|
| bob
|
| aaa
|
| bbb
|
| ccc
|
| sss
|
| ddd
|
| eee
|
| ffff
|
| gjkgjk
|
| fffghh
|
+--------+
11 rows
in set (0.00 sec
)mysql
> delete from gamedb.b
;
Query OK, 11 rows affected
(0.06 sec
)mysql
> select * from gamedb.b
;
Empty
set (0.00 sec
)mysql
> show tables
;
+------------------+
| Tables_in_gamedb
|
+------------------+
| a
|
| b
|
| c
|
+------------------+
3 rows
in set (0.00 sec
)[root@host52 ~
]
mysql
> delete from gamedb.b
;
Query OK, 11 rows affected
(0.06 sec
)mysql
> select * from gamedb.b
;
Empty
set (0.00 sec
)mysql
> create table gamedb.c
(name char
(10
) ,sex enum
("boy",
"girl"));
Query OK, 0 rows affected
(0.02 sec
)[root@host52 ~
]
a.frm a.ibd b.frm b.ibd c.frm c.ibd db.opt
[root@host52 ~
]
backup-my.cnf ib_logfile0 performance_schema xtrabackup_checkpoints
gamedb ib_logfile1 sys xtrabackup_info
ib_buffer_pool ibtmp1 xtrabackup_binlog_info xtrabackup_logfile
ibdata1 mysql xtrabackup_binlog_pos_innodb
[root@host52 ~
]
mysql
> alter table gamedb.b discard tablespace
;
Query OK, 0 rows affected
(0.00 sec
)mysql
> select * from gamedb.b
;
ERROR 1814
(HY000
): Tablespace has been discarded
for table
'b'[root@host52 ~
]
[root@host52 fullbak
]
backup-my.cnf ib_logfile0 performance_schema xtrabackup_checkpoints
gamedb ib_logfile1 sys xtrabackup_info
ib_buffer_pool ibtmp1 xtrabackup_binlog_info xtrabackup_logfile
ibdata1 mysql xtrabackup_binlog_pos_innodb
[root@host52 fullbak
]
a.frm a.ibd b.frm b.ibd db.opt
[root@host52 fullbak
][root@host52 fullbak
]
a.cfg a.exp a.frm a.ibd b.cfg b.exp b.frm b.ibd db.opt
[root@host52 fullbak
]
auto.cnf ibdata1 ibtmp1 mysql.sock.lock xtrabackup_binlog_pos_innodb
gamedb ib_logfile0 mysql performance_schema xtrabackup_info
ib_buffer_pool ib_logfile1 mysql.sock sys
[root@host52 fullbak
][root@host52 fullbak
]
-rw-r--r--. 1 root root 372 2月 19 18:16 /var/lib/mysql/gamedb/b.cfg
-rw-r-----. 1 root root 16384 2月 19 18:16 /var/lib/mysql/gamedb/b.exp
-rw-r-----. 1 mysql mysql 8560 2月 19 17:24 /var/lib/mysql/gamedb/b.frm
-rw-r-----. 1 root root 98304 2月 19 18:16 /var/lib/mysql/gamedb/b.ibd
[root@host52 fullbak
][root@host52 fullbak
]
-rw-r--r--. 1 mysql mysql 372 2月 19 18:16 /var/lib/mysql/gamedb/b.cfg
-rw-r-----. 1 mysql mysql 16384 2月 19 18:16 /var/lib/mysql/gamedb/b.exp
-rw-r-----. 1 mysql mysql 8560 2月 19 17:24 /var/lib/mysql/gamedb/b.frm
-rw-r-----. 1 mysql mysql 98304 2月 19 18:16 /var/lib/mysql/gamedb/b.ibd
[root@host52 ~
]
mysql
> select * from gamedb.b
;
ERROR 1814
(HY000
): Tablespace has been discarded
for table
'b'mysql
> alter table gamedb.b
import tablespace
;
Query OK, 0 rows affected
(0.11 sec
)mysql
> select * from gamedb.b
;
+--------+
| name
|
+--------+
| tian
|
| bob
|
| aaa
|
| bbb
|
| ccc
|
| sss
|
| ddd
|
| eee
|
| ffff
|
| gjkgjk
|
| fffghh
|
+--------+
11 rows
in set (0.00 sec
)[root@host52 fullbak
]
[root@host52 fullbak
]
数据库目录下有.cfg、.frm、.ibd、
.ibd 记录数据的文件,存储表记录
.frm 存储表结构
.exp、.cfg 存储数据的备份信息,是二进制文件,是执行innobackupex生成的文件
每张表都一定会有表结构以及表记录文件
增量备份与恢复
- 1.如何判断所有的数据里,哪些是新产生的数据?
- 2.从哪里开始备份新产生的数据?
- 原理:
- 每一个备份目录下都会有一个xtrabackup_checkpoints记录备份的类型和范围,innobackupex在执行备份时,会对比完全备份后备份目录中的last_lsn和当前的last_lsn进行对比,如果数据变大,则是新产生的数据
假如我们每天都会产生新的数据,可以在周一的时候做完全备份,周二至周日可以用mysqldump做增量备份或者差异备份,但mysqldump备份时会锁表,不建议进行此操作,我们可以用innobackupex做增量备份,不会锁表,但如果数据丢失,在进行恢复时一定要确保数据库目录是空的
模拟实验环境,在host51上面做完全备份以及增量备份,在host54(192.168.4.54)上面做数据恢复做完全备份:
[root@host51 ~
][root@host51 ~
]
backup-my.cnf ibdata1 sys xtrabackup_info
gamedb mysql xtrabackup_binlog_info xtrabackup_logfile
ib_buffer_pool performance_schema xtrabackup_checkpoints
[root@host51 ~
]
backup_type
= full-backuped
from_lsn
= 0
to_lsn
= 3013326
last_lsn
= 3013335
compact
= 0
recover_binlog_info
= 0
在host51上多写入些记录
mysql
> select count
(*
) from gamedb.b
;
+----------+
| count
(*
) |
+----------+
| 11
|
+----------+
1 row
in set (0.00 sec
)mysql
> select count
(*
) from gamedb.a
;
+----------+
| count
(*
) |
+----------+
| 10
|
+----------+
1 row
in set (0.00 sec
)mysql
> insert into gamedb.a values
(113
);
Query OK, 1 row affected
(0.00 sec
)
mysql
> insert into gamedb.b values
("xxxx");
Query OK, 1 row affected
(0.00 sec
)
mysql
> select count
(*
) from gamedb.a
;
+----------+
| count
(*
) |
+----------+
| 20
|
+----------+
1 row
in set (0.00 sec
)mysql
> select count
(*
) from gamedb.b
;
+----------+
| count
(*
) |
+----------+
| 22
|
+----------+
1 row
in set (0.00 sec
)mysql
> show create table gamedb.b \G
*************************** 1. row ***************************Table: b
Create Table: CREATE TABLE
`b` (`name` char
(10
) DEFAULT NULL
) ENGINE
=InnoDB DEFAULT CHARSET
=latin1
1 row
in set (0.00 sec
)在host51上开始做增量备份:
[root@host51 ~
]
[root@host51 ~
]
backup-my.cnf ibdata1 sys xtrabackup_info
gamedb mysql xtrabackup_binlog_info xtrabackup_logfile
ib_buffer_pool performance_schema xtrabackup_checkpoints
[root@host51 ~
]
backup-my.cnf ibdata1.delta performance_schema xtrabackup_checkpoints
gamedb ibdata1.meta sys xtrabackup_info
ib_buffer_pool mysql xtrabackup_binlog_info xtrabackup_logfile
[root@host51 ~
]
backup_type
= full-backuped
from_lsn
= 0
to_lsn
= 3013326
last_lsn
= 3013335
compact
= 0
recover_binlog_info
= 0
[root@host51 ~
]
backup_type
= incremental
from_lsn
= 3013326
to_lsn
= 3025984
last_lsn
= 3025993
compact
= 0
recover_binlog_info
= 0
[root@host51 ~
]
mysql
> select count
(*
) from gamedb.a
;
+----------+
| count
(*
) |
+----------+
| 30
|
+----------+
1 row
in set (0.00 sec
)mysql
> select count
(*
) from gamedb.b
;
+----------+
| count
(*
) |
+----------+
| 33
|
+----------+
1 row
in set (0.00 sec
)[root@host51 ~
]
backup_type
= incremental
from_lsn
= 3013326
to_lsn
= 3025984
last_lsn
= 3025993
compact
= 0
recover_binlog_info
= 0
[root@host51 ~
]
backup_type
= incremental
from_lsn
= 3025984
to_lsn
= 3038542
last_lsn
= 3038551
compact
= 0
recover_binlog_info
= 0增量恢复,在host54上做恢复
此时host54主机拥有allback+onedir+twodir首先停止数据库服务
清空数据库目录
准备恢复数据
合并数据
把数据拷贝到数据库目录下
修改文件所有者用户为mysql
启动服务
管理员登录查看数据
[root@host51 ~
]
[root@host51 ~
]
[root@host51 ~
]
[root@host54 ~
]
allbak onedir twodir
[root@host54 ~
]
tcp LISTEN 0 80 :::3306 :::* users:
(("mysqld",pid
=1095,fd
=30
))
[root@host54 ~
][root@host54 ~
][root@host54 ~
][root@host54 ~
][root@host54 ~
]
backup_type
= log-applied
from_lsn
= 0
to_lsn
= 3013326
last_lsn
= 3013335
compact
= 0
recover_binlog_info
= 0
[root@host54 ~
][root@host54 ~
]
backup_type
= log-applied
from_lsn
= 0
to_lsn
= 3025984
last_lsn
= 3025993
compact
= 0
recover_binlog_info
= 0
[root@host54 ~
]
backup_type
= incremental
from_lsn
= 3013326
to_lsn
= 3025984
last_lsn
= 3025993
compact
= 0
recover_binlog_info
= 0
[root@host54 ~
][root@host54 ~
]
backup_type
= log-applied
from_lsn
= 0
to_lsn
= 3038542
last_lsn
= 3038551
compact
= 0
recover_binlog_info
= 0
[root@host54 ~
]
backup_type
= incremental
from_lsn
= 3025984
to_lsn
= 3038542
last_lsn
= 3038551
compact
= 0
recover_binlog_info
= 0
[root@host54 ~
][root@host54 ~
]
gamedb ib_logfile0 performance_schema xtrabackup_info
ib_buffer_pool ib_logfile1 sys
ibdata1 mysql xtrabackup_binlog_pos_innodb
[root@host54 ~
]
总用量 110632
drwxr-x---. 2 root root 72 2月 19 21:33 gamedb
-rw-r-----. 1 root root 587 2月 19 21:33 ib_buffer_pool
-rw-r-----. 1 root root 12582912 2月 19 21:33 ibdata1
-rw-r-----. 1 root root 50331648 2月 19 21:33 ib_logfile0
-rw-r-----. 1 root root 50331648 2月 19 21:33 ib_logfile1
drwxr-x---. 2 root root 4096 2月 19 21:33 mysql
drwxr-x---. 2 root root 8192 2月 19 21:33 performance_schema
drwxr-x---. 2 root root 8192 2月 19 21:33 sys
-rw-r-----. 1 root root 18 2月 19 21:33 xtrabackup_binlog_pos_innodb
-rw-r-----. 1 root root 532 2月 19 21:33 xtrabackup_info
[root@host54 ~
][root@host54 ~
]
总用量 110632
drwxr-x---. 2 mysql mysql 72 2月 19 21:33 gamedb
-rw-r-----. 1 mysql mysql 587 2月 19 21:33 ib_buffer_pool
-rw-r-----. 1 mysql mysql 12582912 2月 19 21:33 ibdata1
-rw-r-----. 1 mysql mysql 50331648 2月 19 21:33 ib_logfile0
-rw-r-----. 1 mysql mysql 50331648 2月 19 21:33 ib_logfile1
drwxr-x---. 2 mysql mysql 4096 2月 19 21:33 mysql
drwxr-x---. 2 mysql mysql 8192 2月 19 21:33 performance_schema
drwxr-x---. 2 mysql mysql 8192 2月 19 21:33 sys
-rw-r-----. 1 mysql mysql 18 2月 19 21:33 xtrabackup_binlog_pos_innodb
-rw-r-----. 1 mysql mysql 532 2月 19 21:33 xtrabackup_info
[root@host54 ~
]
[root@host54 ~
]
mysql
> select count
(*
) from gamedb.a
;
+----------+
| count
(*
) |
+----------+
| 30
|
+----------+
1 row
in set (0.02 sec
)mysql
> select count
(*
) from gamedb.b
;
+----------+
| count
(*
) |
+----------+
| 33
|
+----------+
1 row
in set (0.00 sec
)
总结
以上是生活随笔为你收集整理的DBA(二):percona软件、innobackupex备份与恢复的全部内容,希望文章能够帮你解决所遇到的问题。
如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。