Mysql数据备份和还原

Mysql数据备份和还原
一、Mysql完整备份和恢复
1、备份的作用和mysql产生故障的原因
1)备份的作用
防止发生故障损失降到最低
故障后能够快速恢复丢失数据保证数据库系统或者数据稳定运行
2)mysql故障的类型
程序错误:MySQL程序故障导致数据无法使用
人为误操作:数据库管理员误删除数据
运算错误:数据库程序逻辑故障
磁盘故障:硬盘坏道导致数据丢失
灾难不可抗力的自然灾害:地震海啸使用异地备份缓解
2、数据库备份的类型
1)冷备份
关闭数据库服务
直接复制mysql数据目录进行数据备份
2)热备份
不停止数据库服务实时动态备份数据
3)温备份
备份数据设置数据库允许读取不允许写入数据备份成为温和备份
3、备份策略
1)完整备份
一般第一次备份使用完整备份
完整备份对数据库和数据库逻辑文件以及日志统一备份
备份时间长占用磁盘空间大
2)差异备份
完整备份后执行差异备份
差异备份只备份完整备份后修改的数据
3)增量备份
做完完整备份和差异备份使用后使用
增量备份备份差异备份修改的数据
备份速度快
占用磁盘空间小
方便数据恢复
4、常见的备份工具
1)冷备份工具
tar
cp
2)专用备份工具备份
mysqldump:MySQL系统自带备份工具
mysqlhotcopy:对数据库引擎进行备份,工具使用perl语言
3)二进制日志
通过二进制日志备份工具备份数据
数据故障从二进制日志中恢复
一般增量备份使用
4)第三工具
xtrbackup:是一个二进制文件工具,只能备份innodb/xtradb数据文件
innodbackupex:使用perl语言编写的备份脚本,可以备份innodb/xtradb以及mysiam引擎
xbstream:允许将文件转换为xbstream格式进行数据备份
二、数据库的完全备份和恢复
1、冷备份
1)停止mysql服务
[[email protected] ~]# systemctl stop mysql
Mysql数据备份和还原
2)备份mysql数据
[[email protected] ~]# mkdir /backup
[[email protected] ~]# tar zcf /backup/mysql_backup-$(date +%F).tar.gz /usr/local/mysql/data/
Mysql数据备份和还原
3)模拟数据丢失
[[email protected] ~]# mv /usr/local/mysql/data/ /opt/
Mysql数据备份和还原
4)恢复丢失数据
[[email protected] ~]# mkdir restore
[[email protected] ~]# tar zxf /backup/mysql_backup-2020-06-22.tar.gz -C ./restore/
[[email protected] ~]# mv ./restore/usr/local/mysql/data/ /usr/local/mysql/
Mysql数据备份和还原
Mysql数据备份和还原
Mysql数据备份和还原
5)启动mysql服务
[[email protected] ~]# systemctl start mysqld
Mysql数据备份和还原
2、使用mysqldump备份数据
1)备份benet数据库中的student表
[[email protected] ~]# mysqldump -uroot -p benet student > benet_student_table.sql
mysql> mysql> create table benet.student (姓名 char(6),性别 char(3),电话 char(11),primary key(电话));
[[email protected] ~]# cat benet_student_table.sql
Mysql数据备份和还原
Mysql数据备份和还原

2)备份数据库中的数据,备份benet数据库
[[email protected] ~]# mysqldump -uroot -p --database benet > benet_database.sql
Mysql数据备份和还原
3)备份所有的数据库
[[email protected] ~]# mysqldump -uroot -p --opt --all-databases > all_databases
Mysql数据备份和还原
3、恢复备份的数据
1)恢复benet数据库中的student表到accp数据库中
[[email protected] ~]# mysql -uroot [email protected]
mysql> create database accp;
[[email protected] ~]# mysql -uroot -p accp < ./benet_student_table.sql
[[email protected] ~]# mysql -uroot [email protected] -e ‘select * from accp.student;’
2)恢复备份的数据库
[[email protected] ~]# mysql -uroot [email protected] -e ‘create database benet;’
[[email protected] ~]# mysql -uroot -p benet < ./benet_database.sql
三、配置增量备份恢复
1、增量备份的作用和优势
1)增量备份的作用
方便进行数据备份和恢复
2)增量备份的优势
备份和恢复数据速度快
恢复数据可靠性强
恢复数据不容易旧数据覆盖新数据
2、配置二进制日志
1)开启mysql二进制日志功能
[[email protected] ~]# vim /etc/my.cnf
49 log-bin=mysql-bin
2)二进制日志保存的默认位置
/usr/local/mysql/data/
3)查看二进制日志
[[email protected] ~]# mysqlbinlog /usr/local/mysql/data/mysql-bin.000005
4)二进制日志切割,生成新的二进制日志
[[email protected] ~]# mysqladmin -uroot [email protected] flush-logs
3、使用二进制日志恢复误删除数据
1)备份二进制日志
[[email protected] ~]# cp /usr/local/mysql/data/mysql-bin.000005 ./
2)模拟删除benet数据库所有数据丢失
[[email protected] ~]# mysql -uroot [email protected] -e ‘drop database benet;’
3)从备份的二进制日志中恢复误删除的数据
[[email protected] ~]# mysqlbinlog --no-defaults mysql-bin.000004 | mysql -uroot [email protected]
4)查看恢复的数据
[[email protected] ~]# mysql -uroot [email protected] -e ‘select * from benet.student;’
4、使用二进制日志基于位置的恢复
1)模拟数据丢失
[[email protected] ~]# mysql -uroot [email protected] -e ‘drop database benet;’
2)恢复到备份二benet数据库状态
[[email protected] ~]# mysql -uroot [email protected] -e ‘create database benet;’
[[email protected] ~]# mysql -uroot -p benet < ./benet_database.sql
3)通过备份的二进制日志恢复最新的数据
[[email protected] ~]# mysqlbinlog --stop-position=‘1289’ ./mysql-bin.000004 | mysql -uroot [email protected]
4)查看恢复的数据
[[email protected] ~]# mysql -uroot [email protected] -e ‘select * from benet.student;’
5)从特定的二进制日志开始恢复
[[email protected] ~]# mysqlbinlog --start-position=‘1176’ ./mysql-bin.000004 | mysql -uroot [email protected]
首次插入数据
创建benet数据库student表
Mysql数据备份和还原
录入数据
Mysql数据备份和还原
首次录入数据进行完全备份
Mysql数据备份和还原
录入新的数据并进行增量备份
Mysql数据备份和还原
切割日志,生成新的二进制日志
Mysql数据备份和还原
Mysql数据备份和还原
备份二进制日志到root
Mysql数据备份和还原
模拟删除benet数据库所有数据丢失
Mysql数据备份和还原
先恢复完全备份
Mysql数据备份和还原
Mysql数据备份和还原
恢复增量备份
Mysql数据备份和还原
查看恢复的数据
Mysql数据备份和还原
使用二进制日志基于位置的恢复
模拟数据丢失
Mysql数据备份和还原
恢复到备份二benet数据库状态
Mysql数据备份和还原
Mysql数据备份和还原
通过备份的二进制日志恢复最新的数据
Mysql数据备份和还原
Mysql数据备份和还原
查看恢复的数据
Mysql数据备份和还原
从特定的二进制日志开始恢复
[[email protected] ~]# mysqlbinlog --start-position=‘1176’ ./mysql-bin.000004 | mysql -uroot [email protected]
Mysql数据备份和还原
5、基于时间点恢复数据
1)基于开始恢复到日志结束时间
[[email protected] ~]# mysqlbinlog --start-datetime=‘2020-06-23 15:38:21’ ./mysql-bin.000004 | mysql -uroot [email protected]
Mysql数据备份和还原
2)基于结束时间点恢复
[[email protected] ~]# mysqlbinlog --stop-datetime=‘2020-06-23 15:38:35’ ./mysql-bin.000004 | mysql -uroot [email protected]
Mysql数据备份和还原
3)基于开始时间和结束时间之间的数据进行恢复
[[email protected] ~]# mysqlbinlog --start-datetime=‘2020-06-23 15:38:21’ --stop-datetime=‘2020-06-23 15:38:35’ ./mysql-bin.000004 | mysql -uroot [email protected]
Mysql数据备份和还原