第 23 课 开源数据库MySQL DBA运维实战 第5章 备份

关于备份

备份的原因

防止因为系统或者人为的错误操作删除或损坏数据

备份的目标

1.数据的一致性
2.数据的可用性

备份技术

1.逻辑备份/热备份
备份的是建表、建库、插入等操作所执行SQL语句(DDL DML DCL),适用于中小型数据库。
mysqldump,mydumper
效率相对较低

2.物理备份/冷备份
直接复制数据库文件,适用于大型数据库环境,不受存储引擎的限制,但不能恢复到不同的MySQL版本。
tar,cp,scp跨设备复制文件
拷贝数据, 优点快,缺点服务停止。

备份方式

完全备份
基础
增量备份
连续回复
特点:因每次仅备份自上一次备份(注意是上一次,不是第一次)以来有变化的文件,所 以备份体积小,备份速度快,但是恢复的时候,需要按备份时间顺序,逐个备份版本进行恢复,恢复时间长。
第 23 课 开源数据库MySQL DBA运维实战 第5章 备份_第1张图片

差异备份
跳跃恢复
特点:占用空间比增量备份大,比完整备份小,恢复时仅需要恢复第一个完整版本和最后 一次的差异版本(包含所有的差异),恢复速度介于完整备份和增量备份之间。
第 23 课 开源数据库MySQL DBA运维实战 第5章 备份_第2张图片

实战案例1

percona-xtrabackup

Percona XtraBackup公司是一个开源的热备份实用程序,用于MySQL数据库-基于服务器,在备份期间不会锁定数据库。

安装环境

安装YUM仓库
安装percona需要的mysql包
mysql官方源
yum install -y https://repo.mysql.com//mysql80-community-release-el7-3.noarch.rpm
第 23 课 开源数据库MySQL DBA运维实战 第5章 备份_第3张图片

yum工具
yum install -y yum-utils
第 23 课 开源数据库MySQL DBA运维实战 第5章 备份_第4张图片

查看mysql可用版本
yum repolist all | grep mysql
禁用80
yum-config-manager --disable mysql80-community
启用57
yum-config-manager --enable mysql57-community
第 23 课 开源数据库MySQL DBA运维实战 第5章 备份_第5张图片
第 23 课 开源数据库MySQL DBA运维实战 第5章 备份_第6张图片

yum install mysql-community-libs-compat -y
yum install https://repo.percona.com/yum/percona-release-latest.noarch.rpm

第 23 课 开源数据库MySQL DBA运维实战 第5章 备份_第7张图片
第 23 课 开源数据库MySQL DBA运维实战 第5章 备份_第8张图片

YUM安装percona-xtrabackup


第 23 课 开源数据库MySQL DBA运维实战 第5章 备份_第9张图片
第 23 课 开源数据库MySQL DBA运维实战 第5章 备份_第10张图片
第 23 课 开源数据库MySQL DBA运维实战 第5章 备份_第11张图片
rpm -ql percona-xtrabackup-24
第 23 课 开源数据库MySQL DBA运维实战 第5章 备份_第12张图片

完全备份流程

innobackupex --user=root --password=‘QianFeng@123’ /xtrabackup/full
连接数据库,开始备份。
请注意备份结果是否完成第 23 课 开源数据库MySQL DBA运维实战 第5章 备份_第13张图片

观看二进制日志位置
ls /xtrabackup/full/2020-08-28_19-22-06/xtrabackup_binlog_info
在这里插入图片描述
这里没有的原因是二进制文件默认未开启
添加命令手动开启
vim /etc/my.cnf
log_bin
添加该字段。指启动二进制日志
server-id=2
群集问题,必须指定该主机的序号。数字随意
重启服务后重新备份文件
|
在这里插入图片描述

完全恢复流程

停止数据库
systemctl stop mysqld
清理环境(模拟损坏)
rm -rf /var/lib/mysql/*
rm -rf /var/log/mysqld.log
生成回滚日志
innobackupex --apply-log /xtrabackup/full/2017-08-01_00-00-18/
第 23 课 开源数据库MySQL DBA运维实战 第5章 备份_第14张图片

指定备份点
恢复文件
innobackupex --copy-back /xtrabackup/full/2017-08-01_00-00-18/
第 23 课 开源数据库MySQL DBA运维实战 第5章 备份_第15张图片

登陆验证
ls /var/lib/mysql
在这里插入图片描述

chown -R mysql.mysql /var/lib/mysql
第 23 课 开源数据库MySQL DBA运维实战 第5章 备份_第16张图片

systemctl start mysqld
mysql -uroot -p’QianFeng@123’
第 23 课 开源数据库MySQL DBA运维实战 第5章 备份_第17张图片

增量备份流程

准备工作

使用指定的数据库
create database testdb;
use testdb;
第 23 课 开源数据库MySQL DBA运维实战 第5章 备份_第18张图片

create table test(id int);
insert into test values (1);
select * from test;
mysql> select * from test;
第 23 课 开源数据库MySQL DBA运维实战 第5章 备份_第19张图片

完整备份:周一

rm -rf /xtrabackup/*
date 09010000
时间建议靠后设置。
innobackupex --user=root --password=‘QianFeng@123’ /xtrabackup
ll /xtrabackup/
2017-09-01_00-00-04
请问数据库中的记录是多少?
1
第 23 课 开源数据库MySQL DBA运维实战 第5章 备份_第20张图片
第 23 课 开源数据库MySQL DBA运维实战 第5章 备份_第21张图片

增量备份:周二

date 09020000
更新时间
mysql -uroot -p’QianFeng@123’ -e ‘insert into testdb.test values (2)’
插入数据,区别周一
mysql -uroot -p’QianFeng@123’ -e ‘select * from testdb.test’
不进入数据库查看结构
第 23 课 开源数据库MySQL DBA运维实战 第5章 备份_第22张图片

innobackupex --user=root --password=‘QianFeng@123’
–incremental /xtrabackup/
–incremental-basedir=/xtrabackup/2017-09-01_00-00-04

basedir基于周一的备份。
会生成一个今天的。
ls /xtrabackup/
第 23 课 开源数据库MySQL DBA运维实战 第5章 备份_第23张图片

增量备份:周三

date 09030000

mysql -uroot -p’QianFeng@123’ -e ‘insert into testdb.test values (3)’
第 23 课 开源数据库MySQL DBA运维实战 第5章 备份_第24张图片

innobackupex --user=root --password=‘QianFeng@123’
–incremental /xtrabackup/
–incremental-basedir=/xtrabackup/2017-09-02_00-00-26


basedir基于周2的备份。
会生成一个今天的。
第 23 课 开源数据库MySQL DBA运维实战 第5章 备份_第25张图片

增量恢复流程

停止数据库
systemctl stop mysqld

清理环境
rm -rf /var/lib/mysql/*

周一
innobackupex --apply-log --redo-only /xtrabackup/2017-09-01_00-00-04
回滚合并
在这里插入图片描述

周二
innobackupex --apply-log --redo-only /xtrabackup/2017-09-01_00-00-04
–incremental-dir=/xtrabackup/2017-09-02_00-00-26

将周二的增量备份数据添加到完整备份中
第 23 课 开源数据库MySQL DBA运维实战 第5章 备份_第26张图片

此时恢复的数据只是周二的数据,周三的数据还未复制到完整备份中
innobackupex --copy-back /xtrabackup/2017-09-01_00-00-06
第 23 课 开源数据库MySQL DBA运维实战 第5章 备份_第27张图片

chown -R mysql.mysql /var/lib/mysql
systemctl start mysqld
mysql -uroot -p’QianFeng@123’ -e ‘select * from testdb.test’
第 23 课 开源数据库MySQL DBA运维实战 第5章 备份_第28张图片

想回复3,怎么办
systemctl stop mysqld
innobackupex --apply-log --redo-only /xtrabackup/2017-09-01_00-00-04
–incremental-dir=/xtrabackup/2017-09-03_00-00-27
# rm -rf /var/lib/mysql/*
innobackupex --copy-back /xtrabackup/2017-09-01_00-00-04
chown -R mysql.mysql /var/lib/mysql
systemctl start mysqld
mysql -uroot -p’QianFeng@123’ -e ‘select * from testdb.test’
第 23 课 开源数据库MySQL DBA运维实战 第5章 备份_第29张图片

mysqldump + binlog

优势

1 自动记录日志position位置。
	(show master  status\G;)
2 可用性,一致性
	锁表机制。

语法

mysqldump -h 服务器 -u用户名 -p密码 数据库名 > 备份文件.sql
参数说明
库的范围
-A, --all-databases 所有库
school 数据库名
school stu_info t1 是指school数据库的表stu_info、t1
-B, --databases bbs test mysql 多个数据库
–single-transaction #InnoDB 一致性 服务可用性
–master-data=1|2 #该选项将会记录binlog的日志位置与文件名并追加到文件中,或添加注释

备份实战

请准备两套root密码
密码1
QianFeng@123
配置到当前数据库中。
密码2
QianFeng@1234
备用

准备库1
注意
请清理掉之前的test库。实验后半部分,需要继续创建test库,避免混淆。
testdb1.t1
create database testdb1;
use testdb1;
create table t1 (id int);
insert into t1 values(1);

mysql> select * from testdb1.t1;
第 23 课 开源数据库MySQL DBA运维实战 第5章 备份_第30张图片
mkdir /backup
备份数据
mysqldump -p’QianFeng@123’ --all-databases --single-transaction --master-data=2 --flush-logs > /backup/date +%F-%H-mysql-all.sql
在这里插入图片描述

观察备份细节
vim /backup/2016-11-25-14-mysql-all.sql
LOCK TABLES user WRITE;
观察各种锁机制,用来保证数据一致性
22 CHANGE MASTER TO MASTER_LOG_FILE=‘localhost-bin.000004’, MASTER_LOG_POS=154;
二进制日志截断位置。第22行
业务正常推进…
第 23 课 开源数据库MySQL DBA运维实战 第5章 备份_第31张图片第 23 课 开源数据库MySQL DBA运维实战 第5章 备份_第32张图片

\

备份后的,数据变更行为
在testdb2.t2 中插入数据1,2,3;
创testdb3库
切断二进制日志(重启数据库)

在testdb2.t2 中插入数据4;
删testdb3库
在testdb2.t2 中插入数据5;
mysql> select * from testdb2.t2;
±-----+
| id |
±-----+
| 1 |
| 2 |
| 3 |
±-----+

mysql> show databases;
±-------------------+
| Database |
±-------------------+
| testdb1 |
| testdb2 |
±-------------------+
12 rows in set (0.00 sec)

1 备份二进制日志文件
cp /var/lib/mysql/bin ~
2. 停止数据库
systemctl stop mysqld
3. 清理环境
rm -rf /var/lib/mysql/*
4.启动数据库
systemctl start mysqld
5.查看密码
grep ‘password’ /var/log/mysqld.log
6.更改密码2
mysqladmin -uroot -p’Kyzw;u2dq
7.mysql恢复数据
mysql -p’QianFeng@1234’ < /backup/2020-09-02-14-mysql-all.sql
8.刷新权限
mysql -p’QianFeng@1234’ -e 'flush privileges’
密码1生效,密码2失效
第 23 课 开源数据库MySQL DBA运维实战 第5章 备份_第33张图片

9.二进制文件恢复
mysqlbinlog localhost-bin.000002 localhost-bin.000003
–start-position=154 | mysql -p’QianFeng@123’

注意后续有多少日志,要跟多少日志名字。
第 23 课 开源数据库MySQL DBA运维实战 第5章 备份_第34张图片


如何保留testdb3库
[root@localhost ~]#mysqlbinlog  localhost-bin.00004 
     ......005.....006...... > 1.txt
删除1.txt中不需要的at(比如test3库是误操作)
cat  1.txt | mysql -p'QianFeng@123'
cat  1.txt | mysql -p'QianFeng@123'

你可能感兴趣的:(linux,mysql)