MySQL 日志管理、备份与恢复

备份类型

物理备份:直接对数据库的物理文件(数据文件、日志文件等)进行备份

逻辑备份:对数据库对象(库、表)的数据以SQL语句的形式导出进行备份

物理备份:

  1. 冷备份(脱机备份):是在关闭数据库的时候进行的。
  2. 热备份(联机备份):数据库处于运行状态,依赖于数据库的日志文件0
  3. 温备份:数据库锁定表格(不可写入但可读)的状态下进行备份操作

备份策略:

  1. 完全备份:每次备份都备份完整的库或表数据
  2. 差异备份:只备份上一次完全备份后的更新数据
  3. 增量备份:备份备份只备份上一次完全备份或增量备份后的更新数据

备份工具:

  1. tar压缩打包(完全备份,物理冷备)
  2. mysqldump(完全备份,逻辑热备)
  3. mysqlhotcopy(完全备份,逻辑热备,仅支持MyISAM和ARCHIVE引擎表)
  4. 二进制日志(增量备份)
  5. PXB XtraBackup innobackupex(完全备份、增量备份,物理热备)

完全备份:

物理冷备:先关闭数据库,使用 tar 命令压缩打包备份数据库的数据目录和文件 mysql/data/

mysqldump 逻辑热备:

物理冷备恢复小实验:

1.关闭mysql数据库

复制代码
systemctl stop mysql 

2.使用tar命令打包数据库文件

复制代码
tar zcf /opt/mysql_backup_$(date +%Y%m%d)   data/   备份data文件到opt目录下

cd /opt/
tar xf mysql_backup_$      解压成一个data目录

3.直接替换现有mysql目录即可

复制代码
mv /opt/data    /usr/local/mysql  

重启mysql 

进入数据库
show database;

mysqldump备份(完全备份)

复制代码
mysqldump -u用户 -p密码 库名 > /opt/backup/库名.sql   #只把库里的表备份 不包含库本身
mysqldump -u用户 -p密码 --databases 库名 > /opt/backup/库名.sql #将库和库里的表都备份
mysqldump -u用户 -p密码 --all-databases > 库名.sql  #将所有库都备份
mysqldump -u用户 -p密码  库名 表名1 (表名2) > xxx.sql  #只备份一个或者多个指定的表(不包含库对象本身)

mysqldump完全恢复

1.先登录数据库 在执行source 文件路径/文件名

复制代码
use 库名
source 文件名路径/备份文件;

2. 使用管道符号 或者从定向输入

复制代码
管道符号:
cat /备份文件路径/文件名 | mysql -u 用户 -p密码 #恢复库
cat /备份文件路径/文件名  | mysql -u 用户 -p密码 库名 # 恢复表 (备份文件不包含库)

通过从定向输入:
muysql -u用户 -p密码 < /备份文件路径/文件名  #恢复库
mysql -u用户 -p密码 库名 < /备份文件路径/文件名  #恢复表  (备份文件不包含库)

MySQL 日志管理

MySQL 的日志默认保存位置为 /usr/local/mysql/data

vim /etc/my.cnf

mysqld

1.错误日志,用来记录当MySQL启动、停止或运行时发生的错误信息,默认已开启

复制代码
log-error=/usr/local/mysql/data/mysql_error.log				
#指定日志的保存位置和文件名

2.通用查询日志,用来记录MySQL的所有连接和语句,默认是关闭的

复制代码
general_log=ON
general_log_file=/usr/local/mysql/data/mysql_general.log

3.二进制日志(binlog),用来记录所有更新了数据或者已经潜在更新了数据的语句,记录了数据的更改,可用于数据恢复,默认已开启

复制代码
log-bin=mysql-bin                #也可以 log_bin=mysql-bin

4.慢查询日志,用来记录所有执行时间超过long_query_time秒的语句,可以找到哪些查询语句执行时间长,以便于优化,默认是关闭

复制代码
slow_query_log=ON
slow_query_log_file=/usr/local/mysql/data/mysql_slow_query.log
long_query_time=5       #设置超过5秒执行的语句被记录,缺省时为10秒

演示:

查询修改方法:

复制代码
查询
show variables like '% xxx %'

修改
set   global/session  xxx =0/1  global全局级别,session会话级别,0关闭自动提交,1开启自动提交
例如:
set session long_query_time=1   #设置超过1秒执行的语句被记录,缺省时为10秒

mysql增量备份

通过mysql提供的二进制日志间接实现增量备份

复制代码
mysqladmin -u用户 -root密码 flush-logs  #通过刷新二进制日志实现增量备份

增量恢复

使用二进制日志增量恢复

复制代码
使用二进制日志增量恢复
mysqlbinlog --no-defaults 二进制文件路径 | mysql -u root -p密码

提醒:工作中是弄一个完全备份 然后再增量备份 两个结合

查看二进制文件内容:

复制代码
查看二进制日志内容
mysqlbinlog --no-defaults --base64-output=decode-rows -v 二进制文件路径

脚本解析:

解读:

先把二进制索引文件备份一下 在使用if语句判断是否有昨天的二进制文件,如果有通过grep -v 反向比对获取出当天的二进制日志,awk获取出二进制文件名,在使用mysqladmin flush-logs刷新出新的二进制日志,再使用for循环将今天的二进制文件复制走进行备份。

相关推荐
数据库砖家7 分钟前
YashanDB 知识库|轻松打通多库数据,YashanDB DBLink 使用指南!
数据库
二进制_博客8 分钟前
高德MCP制作旅游攻略
数据库·旅游
数据库砖家9 分钟前
YashanDB 知识库|如何用闪回功能救回误删的数据?全流程实战演示
数据库
数据库砖家12 分钟前
YashanDB 知识库|手把手教你回收表空间,释放磁盘的正确姿势!
数据库
一只栖枝17 分钟前
关于OCP认证:有Oracle和MySQL两种
数据库·mysql·oracle·开闭原则·数据管理·ocp认证
小Tomkk31 分钟前
StarRocks SRCA 考试心得总结
数据库·数据库 starrocks·srca
千千寰宇39 分钟前
[数据库/SQL] 浅谈DDL、DSL、DCL、DML、DQL
数据库
爱编程的小新☆1 小时前
【MySQL】数据类型和表的操作
java·数据库·mysql
聪明的墨菲特i2 小时前
SQL进阶知识:七、数据库设计
数据库·sql·mysql·oracle·db2·数据库设计·范式
APItesterCris4 小时前
Flutter 移动端开发:集成淘宝 API 实现商品数据实时展示 APP
大数据·数据库·flutter