Xtrabackup备份MySQL

一、安装Xtrabackup

# wget --no-check-certificate http://www.percona.com/downloads/percona-release/redhat/0.1-4/percona-release-0.1-4.noarch.rpm
# rpm -ivh percona-release-0.1-4.noarch.rpm
# yum list | grep percona
# yum -y install percona-xtrabackup-24

二、安装MySQL

1.安装MySQL

# yum -y install http://repo.mysql.com//mysql57-community-release-el7-9.noarch.rpm
# yum list |grep mysql-community
# yum -y install mysql mysql-server mysql-devel

2.更改时间戳设置

# cat /var/log/mysqld.log |grep "timestamp"
[Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).
# vi /etc/my.cnf
explicit_defaults_for_timestamp=true  ##显示指定默认值为timestamp类型的字段

3.启动MySQL

# systemctl start mysqld
# systemctl status mysqld

4.配置MySQL密码

# mysql 
Enter password: 
ERROR 1045 (28000): Access denied for user ‘root‘@‘localhost‘ (using password: NO)

a.新版本MySQL安装完成后会生成临时的初始密码

# grep ‘temporary password‘ /var/log/mysqld.log
[Note] A temporary password is generated for [email protected]: qhAnfco2o)HB

修改MySQL密码

注意:MySQL 5.7默认安装了密码安全检查插件(validate_password),默认密码检查策略要求密码必须包含:大小写字母、数字和特殊符号,并且长度不能少于8位。

MySQL官网MySQL 5.7密码策略详细说明:

http://dev.mysql.com/doc/refman/5.7/en/validate-password-options-variables.html#sysvar_validate_password_policy

b.修改密码策略

# vi /etc/my.cnf
validate_password_policy = LOW              ##密码长度不少于8位即可
# systemctl restart mysqld
# mysql -u root -p
mysql> set password for ‘root‘@‘localhost‘=password(‘12345678‘);

c.官方数据库示例

# wget http://downloads.mysql.com/docs/sakila-db.tar.gz
# tar -zxvf sakila-db.tar.gz 
sakila-db/
sakila-db/sakila-data.sql
sakila-db/sakila-schema.sql
sakila-db/sakila.mwb
[[email protected] ~]# pwd
/root
# mysql -u root -p
mysql> source /root/sakila-db/sakila-schema.sql   ##还原数据库结构
mysql> source /root/sakila-db/sakila-data.sql    ##将数据写入数据库

三、innobackupex常用命令

--backup     默认选项

--defaults-file 指定要备份的mysql实例的my.cnf文件,必须为第一个选项

--port         端口

--socket  连接套字节的位置,默认为/var/lib/mysql/mysql.sock

--host         主机

--no-timestamp 指定了这个选项备份会直接备份在BACKUP-DIR,不再创建时间戳文件夹

--target-dir 指定了这个选项备份会直接备份在BACKUP-DIR,不再创建时间戳文件夹

--use-memory     指定备份所用内存大小,默认为100M,与--apply-log同用

--apply-log      从备份恢复

--apply-log-only 在恢复时,停止恢复进程不进行LSN,只使用log

--copy-back      复制备份文件

--incremental    建立增量备份

--incremental-basedir=DIRECTORY

指定一个全库备份的目录作为增量备份的基础数据库

--incremental-dir=DIRECTORY

指定增量备份与全库备份合并建立一个新的全备目录

--prepare        从backup恢复

--compress       压缩选项

四、xtrabackup备份后的主要文件

(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备份

1.创建全备

# innobackupex --defaults-file=/etc/my.cnf  --user=root --password=12345678 /backup/
......
completed OK!

2.应用全备日志

# innobackupex --apply-log /backup/2017-04-03_12-45-44/
......
completed OK!

3.查看备份状态

# cat /backup/2017-04-03_12-45-44/xtrabackup_checkpoints 
backup_type = full-prepared           ##全备
from_lsn = 0                       ##备份开始点
to_lsn = 9692219                   ##备份结束点
last_lsn = 9692228
compact = 0
recover_binlog_info = 0

4.查看二进制日志事件信息

# cat /backup/2017-04-03_12-45-44/xtrabackup_info 
uuid = 694e5590-1828-11e7-81d2-000c291bd2a1
name = 
tool_name = innobackupex
tool_command = --defaults-file=/etc/my.cnf --user=root --password=... /backup/
tool_version = 2.4.6
ibbackup_version = 2.4.6
server_version = 5.7.17
start_time = 2017-04-03 21:34:09
end_time = 2017-04-03 21:34:13
lock_time = 0
binlog_pos = 
innodb_from_lsn = 0
innodb_to_lsn = 9692219
partial = N
incremental = N
format = file
compact = N
compressed = N
encrypted = N

5.进行全备恢复

a.删除数据库、停止并破坏MySQL

# mysql -u root -p
mysql> show databases;
mysql> drop database sakila;
Query OK, 30 rows affected (0.59 sec)
# systemctl stop mysqld
# cp -R /var/lib/mysql /root
# rm -rf /var/lib/mysql

b.恢复全备

# innobackupex --copy-back /backup/2017-04-03_21-34-08/
......
completed OK!
# chown -R mysql.mysql /var/lib/mysql
# systemctl start mysqld
# mysql -u root -p
mysql> show databases;

注:如无法启动SQL,可能是SELINUX的问题

# vim /etc/selinux/config
SELINUX=disabled

六、Innobackupex增量备份

1.创建数据库和表

# mysql -u root -p
mysql> create database abc;
mysql> use abc;
mysql> create table plus (id int(10),name varchar(20),phone char(11),birth date);
mysql> show tables;
mysql> insert into plus values(1,‘tom‘,12345678901,‘2001-01-01‘);
mysql> insert into plus values(2,‘jack‘,12345678911,‘2011-11-11‘);
mysql> select * from plus;
+------+------+-------------+------------+
| id   | name | phone       | birth      |
+------+------+-------------+------------+
|    1 | tom  | 12345678901 | 2001-01-01 |
|    2 | jack | 12345678911 | 2011-11-11 |
+------+------+-------------+------------+
2 rows in set (0.00 sec)

2.基于全备进行增量备份

# innobackupex --defaults-file=/etc/my.cnf  --user=root --password=12345678 --incremental --incremental-basedir=/backup/2017-04-03_21-34-08/ /backup/001/
......
completed OK!
# cat /backup/001/2017-04-03_21-41-27/xtrabackup_checkpoints 
backup_type = incremental            ##增量备份
from_lsn = 9692219                  ##备份开始点
to_lsn = 9699700                    ##备份结束点
last_lsn = 9699709
compact = 0
recover_binlog_info = 0

3.应用全备日志

# innobackupex --defaults-file=/etc/my.cnf  --user=root --password=12345678 --apply-log-only /backup/2017-04-03_21-34-08/
......
completed OK!

4.应用第一次增量备份日志

# innobackupex --defaults-file=/etc/my.cnf  --user=root --password=12345678 --apply-log-only /backup/2017-04-03_21-34-08/ --incremental-dir=/backup/001/
......
completed OK!

5.基于全备进行第一次增量备份恢复

# systemctl stop mysqld
# rm -rf /var/lib/mysql
# innobackupex --copy-back /backup/2017-04-03_21-34-08/2017-04-03_21-44-08/
......
completed OK!
# chown -R mysql.mysql /var/lib/mysql
# systemctl start mysqld
# mysql -u root -p
mysql> show databases;
mysql> use abc;
mysql> select * from plus;
+------+------+-------------+------------+
| id   | name | phone       | birth      |
+------+------+-------------+------------+
|    1 | tom  | 12345678901 | 2001-01-01 |
|    2 | jack | 12345678911 | 2011-11-11 |
+------+------+-------------+------------+
2 rows in set (0.00 sec)

6.基于第一次增量备份进行备份

a.向表中添加数据

# mysql -u root -p
mysql> use abc;
mysql> insert into plus values(3,‘rose‘,12345678912,‘2012-12-12‘);
mysql> insert into plus values(4,‘jordan‘,12345678923,‘2012-12-23‘);

b.应用第二次增量备份日志

# innobackupex --defaults-file=/etc/my.cnf  --user=root --password=12345678 --apply-log-only /backup/2017-04-03_21-34-08/ --incremental-dir=/backup/002/
......
completed OK!

c.查看备份状态

# cat /backup/002/2017-04-03_21-48-54/xtrabackup_checkpoints 
backup_type = incremental
from_lsn = 9699700
to_lsn = 9696137
last_lsn = 9696146
compact = 0
recover_binlog_info = 0

d.基于全备份和第一次增量备份,恢复第二次增量备份

# systemctl stop mysqld
# rm -rf /var/lib/mysql
# innobackupex --copy-back /backup/2017-04-03_21-34-08/2017-04-03_21-50-11/
......
completed OK!
# chown -R mysql.mysql /var/lib/mysql
# systemctl start mysqld
# mysql -u root -p
mysql> show databases;
mysql> use abc;
mysql> select * from plus;
+------+--------+-------------+------------+
| id   | name   | phone       | birth      |
+------+--------+-------------+------------+
|    1 | tom    | 12345678901 | 2001-01-01 |
|    2 | jack   | 12345678911 | 2011-11-11 |
|    3 | rose   | 12345678912 | 2012-12-12 |
|    4 | jordan | 12345678923 | 2012-12-23 |
+------+--------+-------------+------------+
4 rows in set (0.00 sec)

七、Xtrabackup备份

1.创建全备

# xtrabackup --defaults-file=/etc/my.cnf --user=root --password=12345678 --backup --target-dir=/backup/full
......
completed OK!

2.应用全备日志

# xtrabackup --defaults-file=/etc/my.cnf --prepare --user=root --password=12345678 --apply-log-only --target-dir=/backup/full
......
completed OK!

3.查看备份状态

# cat /backup/full/xtrabackup_checkpoints 
backup_type = log-applied
from_lsn = 0
to_lsn = 9692712
last_lsn = 9692721
compact = 0
recover_binlog_info = 0

4.恢复备份

# systemctl stop mysqld
# rm -rf /var/lib/mysql
# cd /backup/full/
# rsync -rvt --exclude ‘xtrabackup_checkpoints‘ --exclude ‘xtrabackup_logfile‘ ./ /var/lib/mysql
sent 151722380 bytes  received 6476 bytes  15971458.53 bytes/sec
total size is 151681109  speedup is 1.00
# chown -R mysql.mysql /var/lib/mysql
# systemctl start mysqld
# mysql -u root -p
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| abc                |
| mysql              |
| performance_schema |
| sakila             |
| sys                |
+--------------------+
6 rows in set (0.09 sec)

八、Xtrabackup增量备份

1.第一次增量备份

# mysql -u root -p
mysql> create database ball;
mysql> use ball;
mysql> create table superstar (id int(5),name varchar(20),number int(2),city varchar(20),team varchar(10));
mysql> insert into superstar values(1,‘Jordan‘,23,‘Chicago‘,‘Bulls‘);
mysql> insert into superstar values(2,‘Yao‘,11,‘Houston‘,‘Rockets‘);

2.应用第一次增量备份日志

# xtrabackup --defaults-file=/etc/my.cnf --user=root --password=12345678 --backup --target-dir=/backup/inc1 --incremental-basedir=/backup/full
......
completed OK!

3.查看备份状态

# cat /backup/inc1/xtrabackup_checkpoints 
backup_type = incremental
from_lsn = 9692712
to_lsn = 9763373
last_lsn = 9763382
compact = 0
recover_binlog_info = 0

4.第二次增量备份

# mysql -u root -p
mysql> use ball;
mysql> insert into superstar values(3,‘Russell‘,6,‘Boston‘,‘Celtics‘);
mysql> insert into superstar values(4,‘Pierce‘,34,‘Boston‘,‘Celtics‘);

5.应用第二次增量备份日志

# xtrabackup --defaults-file=/etc/my.cnf --user=root --password=12345678 --backup --target-dir=/backup/inc2 --incremental-basedir=/backup/inc1/

6.查看备份状态

# cat /backup/inc2/xtrabackup_checkpoints 
backup_type = incremental
from_lsn = 9763373
to_lsn = 9766964
last_lsn = 9766973
compact = 0
recover_binlog_info = 0

7.准备第一次增量备份

# xtrabackup --defaults-file=/etc/my.cnf  --user=root --password=12345678 --prepare --apply-log-only --target-dir=/backup/full --incremental-dir=/backup/inc1
......
completed OK!

8.准备第二次增量备份

# xtrabackup --defaults-file=/etc/my.cnf  --user=root --password=12345678 --prepare --target-dir=/backup/full --incremental-dir=/backup/inc2
......
completed OK!

9.合并恢复备份

# systemctl stop mysqld
# rm -rf /var/lib/mysql
# xtrabackup --defaults-file=/etc/my.cnf  --user=root --password=12345678 --copy-back --target-dir=/backup/full
......
completed OK!
# chown -R mysql.mysql /var/lib/mysql
# systemctl start mysqld
# mysql -u root -p
mysql> use ball;
mysql> select * from superstar;
+------+---------+--------+---------+---------+
| id   | name    | number | city    | team    |
+------+---------+--------+---------+---------+
|    1 | Jordan  |     23 | Chicago | Bulls   |
|    2 | Yao     |     11 | Houston | Rockets |
|    3 | Russell |      6 | Boston  | Celtics |
|    4 | Pierce  |     34 | Boston  | Celtics |
+------+---------+--------+---------+---------+
4 rows in set (0.00 sec)

注:官方文档地址:https://www.percona.com/doc/percona-xtrabackup/LATEST/index.html

时间: 2024-10-28 11:44:55

Xtrabackup备份MySQL的相关文章

Percona Xtrabackup备份mysql大数据库(完整备份与增量备份)

Percona Xtrabackup备份mysql大数据库(完整备份与增量备份) 文章目录 [隐藏] Xtrabackup简介 Xtrabackup安装 Xtrabackup工具介绍 innobackupex使用方法 完整备份及还原 增量备份及还原 Xtrabackup简介 Percona XtraBackup是开源免费的MySQL数据库热备份软件,它能对InnoDB和XtraDB存储引擎的数据库非阻塞地备份(对于MyISAM的备份同样需要加表锁).XtraBackup支持所有的Percona

使用XtraBackup 备份MySQL数据库

本次测试使用XtraBackup备份MySQL数据库 版本:XtraBackup2.4.5+MySQL5.7.16 下载地址:https://www.percona.com/downloads/XtraBackup/ 1.安装XtraBackup 本次为了方便,使用解压版本进行安装,直接解压就可以用了. 使用过程中可能会遇到缺少perl依赖包的问题,我的方法是直接操作把镜像包里的perl都安装了,yum install -y perl* 2.简介 XtraBackup主要包括两个备份工具xtra

xtrabackup 备份mysql数据库三: innobackupex 测试一个全量和两个增量的备份恢复测试

## 查看当前库中表的数据 ([email protected]) [test]>select count(*) from t_innodb; +----------+ | count(*) | +----------+ |        0 | +----------+ 1 row in set (0.00 sec) ## 执行插入数据操作,该操作在全备之后执行完成 ([email protected]) [test]>call addTest(100000,0); ## 执行全库备份 #

xtrabackup备份MySQL报错:InnoDB: Error number 24 means 'Too many open files'

xtrabackup备份MySQL报错:InnoDB: Error number 24 means 'Too many open files' 1.使用xtrabackup备份MySQL时出现如下报错: 190228 00:30:01 >> log scanned up to (88343615848) xtrabackup: Generating a list of tablespaces InnoDB: Allocated tablespace ID 2 for mysql/plugin,

Percona Xtrabackup备份mysql (完整备份与增量备份)

Xtrabackup简介 Percona XtraBackup是开源免费的MySQL数据库热备份软件,它能对InnoDB和XtraDB存储引擎的数据库非阻塞地备份(对于MyISAM 的备份同样需要加表锁).XtraBackup支持所有的Percona Server.MySQL.MariaDB和Drizzle. XtraBackup优势 : 1.无需停止数据库进行InnoDB热备 2.增量备份MySQL 3.流压缩到传输到其它服务器 4.能比较容易地创建主从同步 5.备份MySQL时不会增大服务器

Percona Xtrabackup备份mysql全库及指定数据库(完整备份与增量备份)

原文地址:http://www.tuicool.com/articles/RZRnq2 Xtrabackup简介 Percona XtraBackup是开源免费的MySQL数据库热备份软件,它能对InnoDB和XtraDB存储引擎的数据库非阻塞地备份(对于MyISAM的备份 同样需要加表锁).XtraBackup支持所有的Percona Server.MySQL.MariaDB和Drizzle. XtraBackup优势 : 1.无需停止数据库进行InnoDB热备 2.增量备份MySQL 3.流

Percona Xtrabackup备份mysql(转)

原文:http://www.drupal001.com/2014/02/percona-xtrabackup-mysql/ Xtrabackup简介 Percona XtraBackup是开源免费的MySQL数据库热备份软件,它能对InnoDB和XtraDB存储引擎的数据库非阻塞地备份(对于MyISAM的备份同样需要加表锁).XtraBackup支持所有的Percona Server.MySQL.MariaDB和Drizzle. XtraBackup优势 : 1.无需停止数据库进行InnoDB热

Percona Xtrabackup备份mysql全库及指定数据库(转)

原文:http://www.drupal001.com/2014/02/percona-xtrabackup-mysql/ Xtrabackup简介 Percona XtraBackup是开源免费的MySQL数据库热备份软件,它能对InnoDB和XtraDB存储引擎的数据库非阻塞地备份(对于MyISAM的备份同样需要加表锁).XtraBackup支持所有的Percona Server.MySQL.MariaDB和Drizzle. XtraBackup优势 : 1.无需停止数据库进行InnoDB热

Xtrabackup备份mysql数据库

Xtrabackup由percona提供 percona Xtrabackup是一个自由.开源的完整的在线备份工具,支持mysql.perconna server.mariadb 到官网https://www.percona.com/下载安装包,并配置好epel源安装需要依赖libev这个包 [[email protected] ~]# wget   [[email protected] ~]# vim /etc/yum.repos.d/ali-epel.repo  [epel] name=al