ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

Mysql 备份与恢复

2021-06-28 16:33:58  阅读:138  来源: 互联网

标签:-- 恢复 备份 Mysql sql mysql test 日志


文章目录

1. Mysql日志

mysql日志默认存储位置: /usr/local/mysql/data
常规日志设置
vim /etc/my.cnf
[mysqld]
##错误日志,用来记录当MysQL启动、停止或运行时发生的错误信息,默认已开启
log-error=/usr/local/mysql/data/mysql_error.log		#指定日志的保存位置和文件名
##通用查询日志,用来记录MySQL的所有连接和语句,默认是关闭的
general_log=ON
general_log_file=/usr/local/mysql/data/mysql_general.log
##二进制日志(binlog),用来记录所有更新了数据或者已经潜在更新了数据的语句,记录了数据的更改,可用于数据恢复,默认已开启
log-bin=mysql-bin			#或者 log_bin=mysql-bin
binlog_format = MIXED
#慢查询日志,用来记录所有执行时间超过long_guery_time秒的语句,可以找到哪些查询语句执行时间长,以便于优化,默认是关闭的
slow_query_log=ON
slow_query_log_file=/usr/local/mysql/data/mysql_slow_query.log
long_query_time=4		#设置差后果4秒的执行语句被记录,缺省10秒

在这里插入图片描述

#查看通用查询日志是否开启
show variables like 'general%';
#查看二进制日志是否开启
show variables like 'log_bin%';
查看慢查询日志是否开启
show variables like '%slow%';
查看慢查询时间设置
show variables like 'long_query_time';
在数据库中设置开启慢查询的方法
set global slow_query_log=ON;

在这里插入图片描述
在这里插入图片描述

2. 数据备份

在生产环境中,数据安全性直观重要,任何数据丢失都可能产生严重后果。程序错误,人为操作失误,运算错误,磁盘故障,和自然灾害等都会导致数据丢失;备份主要目的就是数据的灾难恢复。

数据备份分类:(物理与逻辑角度)

  1. 物理备份:对数据操作系统的物理文件(数据文件,日志文件)的备份(物理备份方法:冷备份,热备份,温备份)
  2. 逻辑备份:对数据库逻辑组件(表等数据库对象)的备份

数据备份分类:(备份策略角度)

  1. 完全备份:每次对数据库进行完整的备份
  2. 差异备份:备份子从上次完成备份之后被修改的文件
  3. 增量备份:只有在上次完全备份或者增量备份后被修改的文件才会被备份

常见备份方法:
物理冷备:

  • 备份时数据库处于关闭状态,直接打包数据库文件
  • 备份速度快,恢复时最简单

专用备份工具mysqldump或mysqlhotcopy:

  • mysqldump常用的逻辑备份工具
  • mysqlhotcopy仅备份myisam和archive表

启用二进制日志增量备份

  • 进行增量备份,需要刷新二进制文件
完全备份:
是对整个数据库,数据库结构和文件结构的备份;
保存的是备份完成时刻的数据库
是差异备份与增量备份的基础

优点:
备份与恢复操作简单
缺点:
数据存在大量的重复
占用大量的备份空间
备份和恢复时间较长
Mysql完全备份与恢复
InnoDB存储引擎的数据库在磁盘上存储成三个文件: db.opt (表属性文件)、表名.frm(表结构文件)、表名.ibd(表数据文件)

1.物理冷备份与恢复
tar zcvf  /opt/mysql_all_$(date +%F).tar.gz    /usr/loacl/mysql/data
需要恢复时,可直接解压至对应目录即可

在这里插入图片描述
在这里插入图片描述

2.mysqldump 备份与恢复
(1)完全备份一个或多个库
mysqldump -u root -p[密码] --databases 库名1[库名2].>/备份路径/备份文件名.sql 	#导出的就是数据库脚本文件
mysqldump -u root -p --databases test > /opt/test.sql
(2)完全备份mysql服务器中所有的库
mysqldump -u root -p --all-databases > /opt/all.sql
(3)完全备份指定库中的表
msyqldump -u root -p [-d] 库名 表名1 [表名2] > xx.sql
# -d 只保存数据库的表结构,缺省,则是表数据也进行备份

grep -v " --" /opt/test.sql | grep -v "^/" | grep -v "^$"		#查看生成的sql文件,清除不友好的显示内容,只显示命令

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3. 数据恢复

mysql -u root -p -e'drop database test;'		#删除数据库test
mysql -u root -p < /opt/test/sql			#导入备份文件,恢复数据

在这里插入图片描述
在这里插入图片描述

恢复数据表
当备份文件中只包含表的备份,而不包含创建的库的语句时,执行导入操作时必须指定库名,且目标库必须存在
mysqldump -u root -p test students >/opt/test_students.sql;
mysql -uroot -p123456 -e 'drop table test.students;'
mysql -uroot -p123456 test < /opt/test_students.sql

在这里插入图片描述
在这里插入图片描述

#二进制日志(binlog)有3种不同的记录格式:STATEMENT (基于SQL语句)、ROW(基于行)、MIXED(混合模式),默认格式时STATEMENT

ll /usr/local/mysql/data/mysql-bin.*
#mysql-bin.index文件内记录的是mysql-bin的序号,这个序号在重启mysql服务时会自增
#mysql-bin.00000x文件记录的是上次服务启动至当前

#可定期对数据库或表进行完全备份
mysqladmin -uroot -p 库名 表名 > /opt/库名_表名_$(date +%F).sql
mysqladmin -uroot -p --all-databases 库名  > /opt/库名_$(date +%F).sql

#每天进行增量备份,生成新的二进制日志文件
mysqladmin -uroot -p  flush-logs 
#查看二进制日志文件
mysqlbinlog --no-defaults --base64-output=decode-rows -v /usr/local/mysql/data/mysql-bin.000002
#--base64-output=decode-rows:使用64位编码机制去解码并按行读取
表中插入数据,并查看二进制日志文件
insert into test.students values(5,'chh1','男','北京',2);

在这里插入图片描述
在这里插入图片描述

#增量恢复
新增表ma
create table ma (id int,id_name char(10));
insert into ma value (1,'a');
insert into ma value (2,'b');
insert into ma value (3,'c');
#删除表,模拟数据丢失
drop table ma;

#通过二进制日志文件恢复删除的表
mysqlbinlog --no-defaults mysql-bin.000002 |mysql -uroot -p
mysql -uroot -p ma < /opt/schools_ma.2021-06-28.sql
#断点恢复
mysqlbinlog --no-defaults --base64-output=decode-rows -v /usr/local/mysql/data/mysql-bin.000003
显示部分内容如下:
# at 9831			#可用于位置恢复的点
#210628 14:19:40 	#可用于时间恢复

1.基于位置恢复
mysqlbinlog --no-defaults --stop-position='1342' mysql-bin.000003 |mysql -uroot -p
#恢复删除的表,不包含表数据;恢复的数据不包含334位置的操作
mysqlbinlog --no-defaults --start-position='4' --stop-position='574' mysql-bin.000002 |mysql -uroot -p

2.基于时间恢复
mysqlbinlog --no-defaults --stop-datetime='21-06-28 15:13:29' mysql-bin.000002 |mysql -uroot -p		#恢复到21-06-28 15:13:29之前的数据

mysqlbinlog --no-defaults --start-datetime='21-06-28 15:13:29' --stop-datetime='21-06-28 15:15:54'
mysql-bin.000002 |mysql -uroot -p	
#仅恢复两个时间之间的数据

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

标签:--,恢复,备份,Mysql,sql,mysql,test,日志
来源: https://blog.csdn.net/Forgive_chh/article/details/118220038

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有