首页 > 其他 > 详细

xtrabackup三种备份和还原(一)

时间:2018-08-20 18:24:48      阅读:266      评论:0      收藏:0      [点我收藏+]

写这边博客心情不是太美好(博客已经停更2个多月了,实在是没心情学习新东西。2018我的黑暗年,呵呵),总觉得人这辈子充斥着不完美。得到多少,失去多少。得到的总是觉得微不足道,失去的却感觉心如刀绞。如果你觉得我是在向你传递负能量,真的对不起了。现在我的身上没有一点正能量。这2个月浑浑噩噩,也许当我写在这的时候,我也已经看开了。好了,不废话了,本文没有任何原理的部分,我也是刚开始接触xtrabackup这个工具。本文应该是一个系列,包括测试环境安装,配置,测试步骤,形成脚本等等,如果我还有激情,可能会找一些原理的部分好好理解一下。这个工具确实很强大。

 

一、安装测试环境

1 环境准备

[root@mysql test01]# cat /etc/redhat-release 
CentOS Linux release 7.5.1804 (Core)

[root@mysql test01]# mysql --version
mysql  Ver 14.14 Distrib 5.7.23, for Linux (x86_64) using  EditLine wrapper
# 你没看错,是mysql,不是mariadb

  

2 安装配置

# 1、安装测试mysql-server 5.7

# clean mariadb env
yum remove mariadb-* -y

# install mysql-5.7
cd /root/mysql/resource
yum install *.rpm


# edit config
echo ‘yes‘ | cp /etc/my.cnf /etc/my.cnf.bak
cat >/etc/my.cnf <<EOF
[mysqld]
#skip-grant-tables
innodb_file_per_table=1
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
user=mysql
binlog_format=ROW
max_connections = 4096
bind-address= 0.0.0.0

default_storage_engine=innodb
innodb_autoinc_lock_mode=2
innodb_flush_log_at_trx_commit=0
innodb_buffer_pool_size=122M

log-bin=mysql-bin
server-id=1
slow_query_log = ON
slow_query_log_file = /var/log/slow.log
long_query_time = 1

EOF


systemctl start mysqld
systemctl enable mysqld

# 2、安装配置xtrabackup工具
yum install percona-xtrabackup-24-2.4.6-2.el7.x86_64.rpm -y

  

下载mysql-5.7.23

mkdir /opt/mysql-5.7.23/ -p
wget -P /opt/mysql-5.7.23/ https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-community-server-5.7.23-1.el7.x86_64.rpm
wget -P /opt/mysql-5.7.23/ https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-community-client-5.7.23-1.el7.x86_64.rpm
wget -P /opt/mysql-5.7.23/ https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-community-devel-5.7.23-1.el7.x86_64.rpm
wget -P /opt/mysql-5.7.23/ https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-community-libs-5.7.23-1.el7.x86_64.rpm
wget -P /opt/mysql-5.7.23/ https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-community-libs-compat-5.7.23-1.el7.x86_64.rpm
wget -P /opt/mysql-5.7.23/ https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-community-common-5.7.23-1.el7.x86_64.rpm

  

下载xtrabackup工具

mkdir -p /opt/xtrabackup/
wget -P /opt/xtrabackup/ https://www.percona.com/downloads/XtraBackup/Percona-XtraBackup-2.4.6/binary/redhat/7/x86_64/percona-xtrabackup-24-2.4.6-2.el7.x86_64.rpm

 

安装测试 so easy

二、备份和还原吧

我们这里测试6种场景,当然应该不止这6种场景,备份全库和还原全库、备份全库和还原指定库、备份指定库还原指定库、备份全库还原指定表、备份指定库还原指定表、增量备份的一些测试与脚本思考

 

1 备份全库和还原全库

# 创建测试数据
create database test01 default charset utf8;
use test01;
create table A(id int,name varchar(10))engine=innodb;
insert into A values(11,‘A‘),(22,‘B‘),(33,‘C‘),(44,‘D‘),(55,‘E‘);
create table B(id int,name varchar(10))engine=innodb;
insert into B values(11,‘A‘),(22,‘B‘),(33,‘C‘),(44,‘D‘),(55,‘E‘);

create database test02 default charset utf8;
use test02;
create table A(id int,name varchar(10))engine=innodb;
insert into A values(11,‘A‘),(22,‘B‘),(33,‘C‘),(44,‘D‘),(55,‘E‘);
create table B(id int,name varchar(10))engine=innodb;
insert into B values(11,‘A‘),(22,‘B‘),(33,‘C‘),(44,‘D‘),(55,‘E‘);

# 1. 完全备份

# 创建存放目录
mkdir -pv /opt/test01

# 进行数据库全备
innobackupex --defaults-file=/etc/my.cnf --user=root --password=root1234  /opt/test01

# 2. 数据被破坏了
drop database test01;
drop database test02;

# 3. 还原数据
# 停止数据库
systemctl stop mysqld

# prepare
innobackupex --apply-log /opt/test01/2018-08-20_18-15-18/

# 保证mysql数据目录为空
mkdir -p /opt/mysql_data
mv /var/lib/mysql/* /opt/mysql_data

# 还原
innobackupex  --defaults-file=/etc/my.cnf --copy-back --rsync /opt/test01/2018-08-20_18-15-18/

chown -R mysql.mysql /var/lib/mysql

systemctl start mysqld

  

1.2 增量备份来一波

 

2 备份全库和还原指定库

# 1. 准备测试数据
create database test01 default charset utf8;
use test01;
create table A(id int,name varchar(10))engine=innodb;
insert into A values(11,‘A‘),(22,‘B‘),(33,‘C‘),(44,‘D‘),(55,‘E‘);
create table B(id int,name varchar(10))engine=innodb;
insert into B values(11,‘A‘),(22,‘B‘),(33,‘C‘),(44,‘D‘),(55,‘E‘);

create database test02 default charset utf8;
use test02;
create table A(id int,name varchar(10))engine=innodb;
insert into A values(11,‘A‘),(22,‘B‘),(33,‘C‘),(44,‘D‘),(55,‘E‘);
create table B(id int,name varchar(10))engine=innodb;
insert into B values(11,‘A‘),(22,‘B‘),(33,‘C‘),(44,‘D‘),(55,‘E‘);

# 1、备份全库
innobackupex --defaults-file=/etc/my.cnf --user=root --password=root1234 --no-timestamp  /opt/test01/test_full

# 2、破坏数据
drop database test01;
drop database test02;

# 3. 只还原test01库
innobackupex --apply-log /opt/test01/test_full


# 手工删除
systemctl stop mysqld
cd /var/lib/mysql
# 这里最好不好删除,而是备份。防止出问题
rm -rf test01 test02 ibdata1
# 2).copy,因为是部分备份,不能直接用--copy-back,只能手动来复制需要的库,也要复制ibdata(数据字典)
cd /opt/test01/test_full
cp -r test01 /var/lib/mysql
cp ibdata1 /var/lib/mysql
# 3).改权限
chown -R mysql.mysql /var/lib/mysql

systemctl start mysqld

  

3 备份指定库和还原指定库

可能会觉得这个和2有些重复,但是我们想如果我们有一个主数据库(里面有2个库)是1T的数据文件,三个从库分别只有主数据库的一个库。且三个库大小不一致,比如一个1G,一个2G,一个998G,这个很夸张,但是确实有可能存在。这个时候我们只想还原其中一个从数据库的库。就用到这种场景了。

 

xtrabackup三种备份和还原(一)

原文:https://www.cnblogs.com/wanstack/p/9507068.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!