备份
一、关于备份:
备份的原因:丢,删
备份目标:数据的一致性,服务的可用性
备份技术:
- 物理备份/冷备
不能恢复不同的mysql版本
优点拷贝数据快,缺点是服务需要停止
2. 逻辑备份/热备
备份是建库建表插入等操作
速率较低
备份种类:
- 完全备份:完整性
- 增量备份:上一次的增量
- 差异备份:完全备份的增量
备份准备:安装percona需要的mysql包
- 若已经安装数据库5.7
防止与percona包冲突,安装插件
#yum -y install mysql-community-lib-compat
进入percona官网下载percona包
YUM安装percona-xtrabackup:yum -y install percona-xtrabackup-24.x86_64
查询安装结果:rpm -ql percona-xtrabackup-24
若是上传percona压缩包,解压压缩包,进入解压文件中,#yum -y install *
- 未安装数据库或者安装是8.0版本数据库
mysql官方源:yum install -y https://repo.mysql.com//mysql80-community-release-el7-3.noarch.rpm
yum工具:yum install -y yum-utils
查看mysql可用版本:yum repolist all | grep mysql
禁用80:yum-config-manager --disable mysql80-community
启用57:yum-config-manager --enable mysql57-community
安装数据库包:yum install mysql-community-libs-compat -y(避免安装percona包出错)
同上安装percona包
打开二进制日志 vim /etc/my.cnf
Log_bin
Server-id=2
完全备份:
1.连接数据库开始备份
#innobackupex --user=root --password=’[email protected]’ /xtrabackup/full
#ls /xtrabackup/full 查看备份目录
保证数据库中有数据
2.停止数据库systemctl stop mysqld
模拟破坏:rm -rf /var/lib/mysql/*
#rm -rf /var/log/mysqld.log
查看:ls /var/lib/mysql
3.还原:
生成回滚文件:innobackupex --apply-log /xtrabackup/full/生成的文件
恢复文件:innobackupex --copy-back /xtrabackup/full/生成的文件
4.登录验证
#ls /var/lib/mysql 查看会有内容
#chown -R mysql.mysql /var/lib/mysql
#systemctl restart mysqld
#mysql -uroot -p‘[email protected]’
增量备份
准备工作:使用指定数据库
#create database testdb
#use testdb
#create table test (id int)
#insert into testdb.test values(1)
- 首先进行完整备份(备份周一)
删除之前的备份文件,避免混淆
#rm -rf /xtrabackup/*
#date 09010000
#innobackupex --user=root --password=’[email protected]’ /xtrabackup
- 备份周二
#date 09020000
#mysql -uroot -p’[email protected]’ -e “insert into testdb.test values(2)”
- 备份周三
#date 09030000
#mysql -uroot -p’[email protected]’ -e “insert into testdb.test values(3)”
#innobackupex --user=root --password=’[email protected]’ --incremental /xtrabackup/ --incremental-basedir=/xtrabackup/周二备份的文件
- 查看生成的文件
#ls /xtrabackup
增量恢复流程
- 停止数据库 #systemctl stop mysqld
- 清理环境#rm -rf /var/lib/mysql/*
- 生成回滚日志(一次性恢复周一到周三)
周一:innobackupex --apply-log --redo-only /xtrabackup/周一备份文件
周二:innobackup --apply-log --redo-only /xtrabackup/周一备份文件
--incremental-dir=/xtrabackup/周二备份文件
周三:innobackup --apply-log --redo-only /xrabackup/周一备份的文件
--incremental-dir=/xtrabackup/周三备份的文件
恢复周一即可
#innobackupex --copy-back /xtrabackup/周一的备份文件
查看#ls /var/lib/mysql
#chown -R mysql.mysql /var/lib/mysql
#sysemctl restart mysqld
#mysql -uroot -p’[email protected]’
差异备份
备份:周一:完全备份
周二:基于周一备份
周三:基于周一备份
生成回滚日志:
周一:innobackup --apply-log --redo-only /xtrabackup/周一备份文件
周三:innobackup --apply-log --redo-only /xtrabackup/周一备份文件
--incremental-dir=/xtrabackup/周三文件
恢复周一:
#innobackupex --copy-back /xtrabackup/周一的文件
周三的信息即可恢复
mysqldump和binlog
1、语法格式:mysqldump -h 服务器 -u 用户名 -p密码 数据库名> 备份文件名
备份实战
准备两套root密码:[email protected]
创造新库test,库里创造新表t1,插入数据1,2,3
#create database test;
#create table test.t1 (id int);
#insert into test.t1 values (1),(2),(3) ;
执行备份
#mkdir /backup
#mysqldump -uroot -p’[email protected]’
--all-databases 所有的数据库
--single-transaction innodb 一致性,服务性
--master-data=2 该选项将会记录binlog的日志位置与文件名并追加到文件中,或添加注释
--flush-logs 备份之前刷新日志,截断日志。备份之后新binlog。
>/backup/`date +%F-%H`-mysq-all.sql
锁表机制:1、mysqldump 在备份每个数据的时候先把表的写功能关闭,(加锁),保持读功能 2、mysqldump 快速拷贝数据表以后再把写功能打开
恢复实战
- 备份二进制日志
cp /var/lib/mysql/*bin* ~
- 停止数据库
Systemctl stop mysqld
- 清理环境
rm -rf /var/lib/mysqld
- 启动数据库
#systemctl start mysqld
- 过滤密码
#grep password /var/log/mysqld.log 有临时密码
#mysqladmin -uroot -p’临时的密码’ password ’[email protected]’
- mysql 恢复数据
mysql -uroot -p’[email protected]’ < /backup/备份文件
mysql -uroot -p’[email protected]’ -e ‘flush privileges’
mysql -uroot -p’[email protected]’ 会发现进不去数据库,密码恢复为原密码
- 二进制日志恢复(备份点到灾难点)
观察二进制截取记录(第22行)-------查看开始位置节点
#vim /backup/备份文件
#mysqlbinlog localhost-bin.000002 localhost-bin.000003 ……
--start-position=154 | mysql -p”[email protected]”
思考误删除文件
#mysqlbinlog localhost-bin.000004 localhost-bin.000005 …… >1.txt
#vim 1.txt 删除1.txt中不需要的at
#cat 1.txt | mysql -p”[email protected]”