写这边博客心情不是太美好(博客已经停更2个多月了,实在是没心情学习新东西。2018我的黑暗年,呵呵),总觉得人这辈子充斥着不完美。得到多少,失去多少。得到的总是觉得微不足道,失去的却感觉心如刀绞。如果你觉得我是在向你传递负能量,真的对不起了。现在我的身上没有一点正能量。这2个月浑浑噩噩,也许当我写在这的时候,我也已经看开了。好了,不废话了,本文没有任何原理的部分,我也是刚开始接触xtrabackup这个工具。本文应该是一个系列,包括测试环境安装,配置,测试步骤,形成脚本等等,如果我还有激情,可能会找一些原理的部分好好理解一下。这个工具确实很强大。
[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
# 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种场景,备份全库和还原全库、备份全库和还原指定库、备份指定库还原指定库、备份全库还原指定表、备份指定库还原指定表、增量备份的一些测试与脚本思考
# 创建测试数据 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. 准备测试数据 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
可能会觉得这个和2有些重复,但是我们想如果我们有一个主数据库(里面有2个库)是1T的数据文件,三个从库分别只有主数据库的一个库。且三个库大小不一致,比如一个1G,一个2G,一个998G,这个很夸张,但是确实有可能存在。这个时候我们只想还原其中一个从数据库的库。就用到这种场景了。
原文:https://www.cnblogs.com/wanstack/p/9507068.html