专业建设网站技术,百度指数分析官网,个人网站怎么做淘宝客,网站制作怎么做语音搜索框Mysql日志管理、备份与恢复 一、Mysql日志管理1.1、日志分类1.1.1、错误日志1.1.2 、通用查询日志1.1.3、 二进制日志1.1.4 、慢查询日志1.1.5 、配置日志 1.2、日志的查询 二、备份与恢复2.1、 数据备份的必要性2.2 、造成数据丢失的原因2.3、 数据库备份的分类2.3.1、 物理备… Mysql日志管理、备份与恢复 一、Mysql日志管理1.1、日志分类1.1.1、错误日志1.1.2 、通用查询日志1.1.3、 二进制日志1.1.4 、慢查询日志1.1.5 、配置日志 1.2、日志的查询 二、备份与恢复2.1、 数据备份的必要性2.2 、造成数据丢失的原因2.3、 数据库备份的分类2.3.1、 物理备份2.3.2、 逻辑备份 2.4、数据库的备份策略2.5 、MySQL 完全备份2.5.1、 物理冷备份与恢复2.5.2、 专用备份工具2.5.3、 MySQL 完全备份使用免交互2.5.4 、MySQL 增量备份与恢复2.5.5、 MySQL 增量恢复 一、Mysql日志管理
MySQL 的日志默认保存位置 /usr/local/mysql/data
1.1、日志分类 事务日志transaction log 事务日志的写入类型为追加因此其操作为顺序IO通常也被称为预写式日志 write ahead logging事务日志文件 ib_logfile0 ib_logfile1 错误日志 error log 通用日志 general log 慢查询日志 slow query log 二进制日志 binary log 中继日志 reley log在主从复制架构中从服务器用于保存从主服务器的二进制日志中读取的事件
1.1.1、错误日志
用来记录当MySQL启动、停止或运行时发生的错误信息默认已开启vim /etc/my.cnf
log-error/usr/local/mysql/data/mysql_error.log 1.1.2 、通用查询日志
用来记录MySQL的所有连接和语句默认是关闭的vim /etc/my.cnf
general_logON
general_log_file/usr/local/mysql/data/mysql_general.log1.1.3、 二进制日志
用来记录所有更新了数据或者已经潜在更新了数据的语句记录了数据的更改可用于数据恢复默认已开启vim /etc/my.cnf
#也可以 log_binmysql-bin
log-binmysql-bin 1.1.4 、慢查询日志
用来记录所有执行时间超过long_query_time秒的语句可以找到哪些查询语句执行时间长以便于优化默认是关闭的vim /etc/my.cnf
slow_query_logON
slow_query_log_file/usr/local/mysql/data/mysql_slow_query.log
long_query_time5 1.1.5 、配置日志
1. #修改my.cnf配置文件#错误日志
log-error/usr/local/mysql/data/mysql_error.log
#通用查询日志
general_logON
general_log_file/usr/local/mysql/data/mysql_general.log
#二进制日志
log-binmysql-bin
#慢查询日志
slow_query_logON
slow_query_log_file/usr/local/mysql/data/mysql_slow_query.log
long_query_time52. #重新mysql服务
systemctl restart mysqld.service修改配置文件 重启服务
1.2、日志的查询
#登入mysql
mysql -u root -p[密码]#查看通用查询日志是否开启
show variables like general%; #查看二进制日志是否开启
show variables like log_bin%;
#查看慢查询日功能是否开启
show variables like %slow%;
#查看慢查询时间设置
show variables like long_query_time;
#在数据库中设置开启慢查询的方法
set global slow_query_logON; 二、备份与恢复
2.1、 数据备份的必要性 备份的主要目的是灾难恢复 在生产环境中数据的安全性至关重要 任何数据的丢失都可能产生严重的后果
2.2 、造成数据丢失的原因 程序错误 人为操作错误. 运算错误 磁盘故障 灾难(如火灾、地震)和盗窃
2.3、 数据库备份的分类
2.3.1、 物理备份
对数据库操作系统的物理文件(如数据文件、日志文件等)的备份。物理备份的方法
冷备份(脱机备份):是在关闭数据库的时候进行的热备份(联机备份):数据库处于运行状态依赖于数据库的日志文件温备份:数据库锁定表格(不可写入但可读)的状态下进行备份操作。
2.3.2、 逻辑备份
对数据库的表或者对象进行备份。2.4、数据库的备份策略 完全备份整个数据集每次都备份完整的数据库。 差异备份仅备份最近一次完全备份后变化的数据备份较慢还原简单 增量备份仅备份最近一次完全备份或增量备份如果存在增量以来变化的数据备份较快还原复杂
1完全备份:每次对数据库进行完整的备份
- 是对整个数据库、数据库结构和文件结构的备份- 保存的是备份完成时刻的数据库- 是差异备份与增量备份的基础优点备份与恢复操作简单方便 缺点数据存在大量的重复、占用大量的备份空间及备份与恢复时间长 2差异备份:备份自从上次完全备份之后被修改过的文件
3增量备份:只有在上次完全备份或者增量备份后被修改的文件才会被备份
2.5 、MySQL 完全备份
InnoDB存储引擎的数据库在磁盘上存储成三个文件 db.opt(表属性文件) 表名.frm(表结构文件) 表名.ibd(表数据文件)
2.5.1、 物理冷备份与恢复 备份时数据库处于关闭状态直接打包数据库文件 备份速度快恢复时也是最简单的
1. #关闭mysql备份data目录
systemctl stop mysqld
yum -y install xz
cd /usr/local/mysql#压缩备份data目录
tar Jcvf /opt/mysql_all_$(date %F).tar.xz data/2. #登录mysql删除NBA库
systemctl start mysqld.service
mysql -u root -p1231233. #解压之前备份的数据库data目录不用删除原目录会自动替换
cd /opt
ls
cd /usr/local/mysql
tar Jxvf /opt/mysql_all_2021-11-28.tar.xz -C ./4. #重启服务查看被删除的库 创建库在库里面创建表 关闭mysql备份data目录 登录mysql删除NBA库 解压之前备份的数据库data目录不用删除原目录会自动替换
2.5.2、 专用备份工具 mysqldump常用的逻辑备份工具 mysqlhotcopy仅拥有备份MyISAM和ARCHIVE表
完全备份一个或多个完整的库包括其中所有的表
#导出的就是数据库脚本文件
mysqldump -u root -p[密码] --databases 库名1 [库名2] … /备份路径/备份文件名.sql 例子备份单个和多个库
mysqldump -uroot -p --databases NBA /opt/mysql_bak/nba.sql
mysqldump -uroot -p --databases NBA info1 /opt/mysql_bak/nba_info1.sql完全备份 MySQL 服务器中所有的库
mysqldump -u root -p[密码] --all-databases /备份路径/备份文件名.sql例子备份所有库
mysqldump -uroot -p --all-databases /opt/mysql_bak/all.sql完全备份指定库中的部分表
mysqldump -u root -p[密码] 库名 [表名1] [表名2] … /备份路径/备份文件名.sql例子 备份NBA库中的两个表
mysqldump -uroot -p NBA [-d] info1 info2 /opt/mysql_bak/school_info1_info2.sql使用“-d”选项说明只保存数据库的表结构 不使用“-d”选项说明表数据也进行备份 查看备份文件 cat school_info1_info2.sql |grep -v ^/|grep -v ^$|grep -v ^-2.5.3、 MySQL 完全备份使用免交互
systemctl start mysqldmysql -u root -p -e drop database NBA;
#“-e”选项用于指定连接 MySQL 后执行的命令命令执行完后自动退出
mysql -u root -p -e show databases;#恢复school数据库
mysql -u root -p /opt/mysql_bak/school.sql
mysql -u root -p -e show databases;恢复数据表
当备份文件中只包含表的备份而不包含创建的库的语句时执行导入操作时必须指定库名且目标库必须存在。mysqldump -uroot -p school info1 info2 /opt/mysql_bak/school_info1_info2.sql1. #删除school中的info1表
mysql -u root -p -e drop table NBA.lilade;
mysql -u root -p -e show tables from school;2. #恢复school库中的表
mysql -u root -p NBA /opt/mysql_bak/school_info1_info2.sql
mysql -u root -p -e show tables from NBA;删除NBAl中的info表 恢复NBA库中的表
2.5.4 、MySQL 增量备份与恢复
vim /etc/my.cnf
[mysqld]
log-binmysql-bin
#指定二进制日志(binlog)的记录格式为 MIXED
binlog_format MIXED
server-id 1二进制日志(binlog)有3种不同的记录格式 STATEMENT(基于SQL语句) ROW(基于行) MIXED(混合模式)默认格式是STATEMENT
#只要重启就会自动生成二进制文件
systemctl start mysqld
ls -l /usr/local/mysql/data/mysql-bin.*可每天进行增量备份操作生成新的二进制日志文件(例如 mysql-bin.000002)
mysqladmin -u root -p flush-logs插入新数据以模拟数据的增加或变更
insert into NBA.info values (6, cj, 33, 男, 打篮球);
insert into NBA.info values (7, lu, 33, 男, 打篮球);再次生成新的二进制日志文件(例如 mysql-bin.000007 )
mysqladmin -u root -p flush-logs查看二进制日志文件的内容
cp /usr/local/mysql/data/mysql-bin.000007 /opt/
mysqlbinlog --no-defaults --base64-outputdecode-rows -v /opt/mysql-bin.000007
#--base64-outputdecode-rows使用64位编码机制去解码并按行读取
#-v显示详细内容2.5.5、 MySQL 增量恢复
1一般恢复 将所有备份的二进制日志内容全部恢复模拟丢失更改的数据的恢复步骤
use nba;
delete from info where id6;
delete from info where id7;mysqlbinlog --no-defaults /usr/local/mysql/data/mysql-bin.000007 | mysql -u root -p删除数据 通过二进制日志进行恢复 模拟丢失所有数据的恢复步骤
use NBA;
drop table info;mysql -u root -p NBA /opt/mysql_bak/NBA_info_info2.sql
mysqlbinlog --no-defaults /usr/local/mysql/data/mysql-bin.000007 | mysql -u root -p删除school库中的info1表
先回复整表然后在恢复二进制日志文件 基于位置恢复 数据库在某一时间点可能既有错误的操作也有正确的操作 可以基于精准的位置跳过错误的操作 发生错误节点之前的一个节点上一次正确操作的位置点停止
# 刷新生成新的二进制日志文件
mysqladmin -u root -p flush-logs
# 进入到data目录
cd /usr/local/mysql/data
#查看二进制日志文件
mysqlbinlog --no-defaults --base64-outputdecode-rows -v mysql-bin.000012在数据库中插入数据并查看
use school
insert into info values(8,小斌,男,唱歌);mysqlbinlog --no-defaults --base64-outputdecode-rows -v mysql-bin.0000008
# at 1207 #断点
#211130 9:28:59 #时间
insert into info values(8,小斌,男,唱歌) #插入的数据
insert into info values(8,小斌,男,唱歌)再插入一条数据
use school
insert into info values(9,晴,女,画画);# at 22236
#211130 10:36:38
insert into info values(9,晴,女,画画)测试恢复到ID为609之前的数据 不恢复“后面一条”的数据
删除数据之前必须先刷新一下日志文件mysqladmin -u root -p flush-logs 对数据进行恢复
mysqlbinlog --no-defaults --stop-position22236 mysql-bin.000012 | mysql -u root -p仅恢复“最后一条”的数据跳过“前面多条”的数据恢复
删除表中所有数据基于时间恢复
测试恢复到ID为609之前的数据 不恢复“后面一条”的数据仅恢复“最后一条”的数据跳过“前面多条”的数据恢复 mysqlbinlog --no-defaults --start-datetime2021-11-30 10:36:38 /usr/local/mysql/data/mysql-bin.000012 |mysql -uroot -p123123