目录
一、mysql常用日志
1、概述
①、错误日志
②、二进制日志
③、中继日志
④、慢查询日志
⑤、通用查询日志,用来记录MySQL的所有连接和语句,默认是关闭的
2、数据库中查询日志状态
①、查看二进制日志开启状态
②、查看慢查询日志功能是否开启
③、查看慢查询时间设置
④、在数据库中设置开启慢查询的办法(临时)
二、备份
1、概述
2、备份的重要性
3、备份类型
①、从物理与逻辑的角度分类(逻辑备份、物理备份)
②、从数据库的备份策略角度分类(完全备份、差异备份、增量备份)
4、备份方法
5、备份实验
6、增量备份和恢复
增量备份需要开启二进制日志功能
查看二进制日志文件的内容
可每天进行增量备份操作,生成新的二进制文件
进行简单的数据插入,并增量备份
总结:
慢查询日志,用来记录所有执行时间超过long_query_time秒的语句,可以找到哪些查询语句执行时间长,以便于优化
开启方式:
general_log=ON
general_log_file=/usr/local/mysql/data/mysql_general.log
vim /etc/my.cnf
log-error=/usr/local/mysql/data/mysql_error.log
log-bin=mysql-bin
slow_query_log=ON
slow_query_log_file=/usr/local/mysql/data/mysql_slow_query.log
long_query_time=5
general_log=ON
general_log_file=/usr/local/mysql/data/mysql_general.log
systemctl restart mysqld
#二进制日志开启后,重启mysql 会在目录中查看到二进制日志
cd /usr/local/mysql/data
ls
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; #在数据库中设置开启慢查询的方法
PS:variables 表示变量 like 表示模糊查询
#xxx(字段)
xxx% 以xxx为开头的字段
%xxx 以xxx为结尾的字段
%xxx% 只要出现xxx字段的都会显示出来
xxx 精准查询
show variables like '%log_bin%';
show variables like '%slow%';
show variables like 'long_query_time';
set global slow_query_log=ON;
数据库备份可以分为物理备份和逻辑备份。
逻辑备份是对数据库逻辑组件(如表等数据库对象)的备份,表辑数据库结构(CREATE DATABASE, CREATETABLEia)和内容(INSERT语句或分隔文本文件)的信息。
逻辑备份适用于可以编辑数据值或表结构较小的数据量,或者在不同的机器体系结构上重新创建数据
物理备份是对数据库操作系统的物理文件(如数据文件、日志文件等)的备份。
物理备份适用于在出现问题时需要快速恢复的大型重要数据库。
物理备份又可以分为冷备份(脱机备份)、热备份(联机备份)和温备份。
从数据库的备份策略角度,数据库的备份可分为完全备份、差异备份和增量备份(面试点)。
①、物理冷备份
②、专用备份工具 mysqldump 或 mysqlhotcopy
③、通过启用二进制日志进行增量备份
④、通过第三方工具备份
第三方工具Percona xtraBackup是一个免费的MysQL热备份软件,支持在线热备份Innodb和xtraDB,也可以支持MySQL表备份,不过MyISAM表的备份要在表锁的情况下进行。
①、创建表结构、表数据
mysql -u root -p
create database meeting;
use meeting;
create table if not exists working (
id int(4) not null auto_increment,
name varchar(10) not null,
primary key (id));
insert into working values(1,'张三');
insert into working values(2,'李四');
②、完全备份
InnoDB存储引擎的数据库在磁盘上存储成三个文件:
db.opt(表属性文件)、表名.frm(表结构文件)、表名.ibd(表数据文件)。
1)物理冷备份与恢复
systemctl stop mysqld
yum -y install xz # xz 为一种压缩工具
压缩备份
tar Jcvf /opt/mysql_all_$(date +%F).tar.xz /usr/local/mysql/data/
解压恢复
tar Jxvf /opt/mysql_all_2022-04-14.tar.xz -C /usr/local/mysql/data/
重启服务就可以解决
2)完全备份一个或多个完整的库(包括其中所有的表)
mysqldump -uroot -p[密码] --databases 库名 > /备份路径/备份文件名.sql
导出的就是数据库脚本文件
如:
mysqldump -uroot -p123456 --databases meeting> /opt/meeting.sql
完全备份指定库中的部分表
mysqldump -u root -p[密码] 库名 [表名1] [表名2] ... > /备份路径/备份文件名.sql
例:
mysqldump -u root -p123456 meeting working > /opt/meeting_working.sql
#使用“-d”选项,说明只保存数据库的表结构
#不使用“-d"选项,说明表数据也进行备份
#做为一个表结构模板
mysqldump -u root -p[密码] --all-databases > /备份路径/备份文件名.sql
例:
mysqldump -u root -p --all-databases > /opt/all.sql
grep -v "^--" /opt/meeting.sql | grep -v "^/" | grep -v "^$"
3)、恢复数据库
使用mysqldump导出的文件,可使用mysql导入的方法
mysql -uroot -p123456 -e 'drop database meeting;'
#“-e”选项,用于指定连接 MySQL 后执行的命令,命令执行完后自动退出
查看库
mysql -uroot -p123456 -e 'show databases;'
进行恢复操作
mysql -uroot -p123456 < /opt/meeting.sql
mysql -uroot -p123456 -e 'show databases;'
使用mysqldump导出的文件, 还可以使用source 导入
mysql -uroot -p123456 -e 'show databases;'
模拟数据库损坏
mysql -uroot -p123456 -e 'drop database meeting;'
mysql -uroot -p123456 -e 'show databases;'
mysql -uroot -p123456 登入数据库内
source /opt/meeting.sql
show databases;
PS:mysqldump 严格来说属于温备份,会需要对表进行写入的锁定,加
--databases meeting 不管导出还是写入都是针对meeting的表
在生产环境中,可以使用Shell脚本自动实现定时备份(时间频率需要确认)
0 1* * 6 /usr/local/mysql/bin/mysqldump -uroot -pabc123 kgc info1 > ./kgc_infol_$(date +%Y%m%d).sql ;/usr/local/mysql/bin/mysqladmin -u root -p flush-logs
MySQL数据库增量恢复
1.一般恢复
2.基于位置恢复
3.基于时间点恢复
增备实验
vim /etc/my.cnf
[mysqld]
log-bin=mysql-bin
binlog_format = MIXED (可选项)
server-id = 1
① STATEMENT(基于SQL语句):
总结:增删改查通过sql语句来实现记录,如果用高并发可能会出错,可能时间差异或者延迟,可能不是我们想想的恢复可能你先删除或者在修改,可能会倒过来。准确率底
② ROW(基于行)
总结:update、delete以多行数据起作用,来用行记录下来,
只记录变动的记录,不记录sql的上下文环境,
比如sql语句记录一行,但是ROW就可能记录10行,但是准确性高,高并发的时候由于操作量,性能变低 比较大所以记录都记下来,
③ MIXED 推荐使用
cp /usr/local/mysql/data/mysql-bin.00000x /opt/
mysqlbinlog --no-defaults /opt/mysql-bin.000002x
mysqlbinlog --no-defaults --base64-output=decode-rows -v /opt/mysql-bin.00000x
#--base64-output=decode-rows:使用64位编码机制去解码(decode)并按行读取(rows)
#-v: 显示详细内容
#--no-defaults : 默认字符集(不加会报UTF-8的错误)
PS: 可以将解码后的文件导出为txt格式,方便查阅
mysqlbinlog --no-defaults --base64-output=decode-rows -v /opt/mysql-bin.00000x > /opt/mysql-bin.00000x
先完成完全备份(在创建好表和库的基础上)
systemctl restart mysqld.service
mysqldump -uroot -p123456 meeting working > /opt/meeting_working_$(date +%F).sql
mysqldump -uroot -p123456 meeting > /opt/meeting_$(date +%F).sql
生成新的二进制文件(可每天进行增量备份操作)
mysqladmin -uroot -p123456 flush-logs
⑤、模拟误操作,并进行恢复
mysql -uroot -p
use meeting;
insert into working values(5,'王浩');
insert into working values(6,'陈俊');
delete from working where id=1;
delete from working where id=2;
select * from working;
quit
mysqladmin -uroot -p flush-logs
mysqlbinlog --no-defaults /usr/local/mysql/data/mysql-bin.000003 | grep -v '^/'
mysql -uroot -p010230 -e "select * from meeting.working;"
1)方法一:按位置恢复
先删除表
drop table working;
清空表内容
truncate table meeting.working;
恢复结束点为删除命令前和插入命令后
mysqlbinlog --no-defaults --stop-position='902' usr/local/mysql/data/mysql-bin.000003 |
mysql -uroot -p
2)方法二:按时间恢复
先清空表CLASS1,方便实验
mysql -uroot -p -e "truncate table meeting.working;"
mysql -uroot -p -e "select * from meeting.woring;"
mysqlbinlog --no-defaults --stop-datetime='2021-04-15 15:39:23' /opt/mysql-bin.000003 |mysql -uroot -p
mysql -uroot -p -e "select * from meeting.woring;"
备份的类型:
1、从物理与逻辑的角度分类
①、物理备份:
对数据库操作系统的物理文件(如数据文件、日志文件等)的备份
冷备份(脱机备份): 是在关闭数据库的时候进行的(tar)
热备份(联机备份): 数据库处于运行状态,依赖于数据库的日志文件(mysqldump)
温备份: 数据库锁定表格(不可写入但可读)的状态下进行备份操作
②、逻辑备份: 对数据库逻辑组件(如:表等数据库对象)的备份
2、从数据库的备份策略角度分类
①、完全备份: 每次对数据库进行完整的备份(尽量时间间隔在合适的范围内,如一周)
优点:备份与恢复操作简单方便
缺点:数据存在大量的重复,并且会占用大量的磁盘空间,备份的时间也很长。
②、差异备份: 备份自从上次完全备份之后被修改过的文件()
优点:恢复数据时,只需恢复上次的完全备份与最近的一次差异备份。
缺点:备份的时间节点是从上次完整备份起,备份数据量会越来越大。
③、增量备份: 只有在上次完全备份或者增量备份后被修改的文件才会被备份
优点:以上次完整/增量备份为时间点,仅备份这之间的数据变化,备份的数据量小,占用空间小,备份速度快
缺点:恢复时,需要所有增量备份从头依次恢复,如中间某次的备份数据损坏,将导致数据的丢失。
备份方法:
1、物理冷备份
特点:
服务关闭,保证数据库的完整性。
适用于非核心业务
备份速度快,tar 打包 /usr/loc.al/mysql/data即可
恢复即为解压覆盖 /usr/loc.al/mysql/data 目录
2、专用备份工具 mysqldump 或 mysqlhotcopy
特点:
mysqldump是客户端自带的备份工具,更为通用,因为它可以备份各种表。
mysqlhotcopy仅适用于某些存储引擎(MyISAM和ARCHIVE)。
3、通过启用二进制日志进行增量备份
特点:
二进制日志文件为用户提供复制,对执行备份点后进行的数据库更改所需的信息进行恢复。
如果进行增量备份,需要刷新二进制日志。
4、第三方工具备份
特点:
Percona xtraBackup是一个免费的MysQL热备份软件,支持在线热备份Innodb和xtraDB,也可以支持MySQL表备份,不过MyISAM表的备份要在表锁的情况下进行。
————————————————
版权声明:本文为CSDN博主「小白的成功进阶之路」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/Lucien010230/article/details/115696395