MySQL的日志管理以及备份和恢复

MySQL日志管理

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

vim /etc/my.cnf #开启二进制日志功能

bash 复制代码
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
​
##慢查询日志,用来记录所有执行时间超过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秒
​
​
systemctl restart mysqld        #配置完重启服务
​
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 show_query_log=ON;           #在数据库中设置开启慢查询的方法

数据库备份的分类

物理备份

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

  • 物理备份方法

    • 冷备份(脱机备份)

    • 热备份(联机备份):依赖数据库的日志文件

    • 温备份:数据库锁定表格,进入只可读不可写的状态下进行备份操作

逻辑备份

  • 逻辑备份:对数据库逻辑组件(如:库、表等数据库对象),以SQL语句的形式导出进行备份。

数据库的备份策略角度

  • 完全备份:每次对数据库或表数据进行完整的备份

  • 差异备份:只备份上次完全备份后的更新数据

  • 增量备份:每次备份只备份上次完全备份或增量备份后的更新数据

数据库上云迁移

  • 冷迁移

    • 物理冷备

    • 先关闭数据库,再打包备份+恢复

  • 热迁移

    • 阿里云 DTS

数据库完全备份分类

1、物理冷备:

  • 关闭MySQL数据库

  • 使用tar命令直接打包数据库文件夹

  • 直接替换现有MySQL目录即可

  • #默认数据库文件/usr/local/mysql/data/

2、mysqldump逻辑热备

bash 复制代码
备份一个或多个库及库中所有的表数据
mysqldump -uXXX -pXXX  --databases 库1 [库2 ....] > XXX.sql      


备份所有的库
mysqldump -uXXX -pXXX  --all-databases > XXX.sql                  


备份指定库中的所有的表数据,不包含库对象
mysqldump -uXXX -pXXX  库名 > XXX.sql                            


备份指定库中的一个或多个表数据,不包含库对象
mysqldump -uXXX -pXXX  库名 表1 [表2 ....] > XXX.sql              

3、物理热备

bash 复制代码
xtrabackup

4、完全恢复

先登录到数据库,再执行source XXX.sql (如果sql文件只是备份了表数据的文件,需要先创建库并 use 切换库后再执行)

bash 复制代码
恢复库

mysql -u用户名  -p密码  < 文件名.sql         

cat 文件名.sql | mysql -u用户名 -p密码




恢复表

mysql -u用户名 -p密码 库名 < 文件名.sql    

cat 文件名.sql | mysql -u用户名 -p密码 库名

七、MySQL数据库增量恢复

1、一般恢复

  • 将所有备份的二进制日志内容全部恢复

2、基于位置恢复

  • 数据库在某一时间点可能既有错误的操作也有正确的操作
  • 可以基于精准的位置跳过错误的操作

3、基于时间点恢复

  • 跳过某个发生错误的时间点实现数据恢复
bash 复制代码
通过刷新二进制日志间接实现增量备份
mysqladmin -uXXX -pXXX flush-logs

查看二进制日志内容
mysqlbinlog --no-defaults --base64-output=decode-rows -v <BINLOG>

使用脚本增量备份mysql二进制日志

mysql数据库增量恢复

bash 复制代码
使用二进制日志增量恢复
mysqlbinlog --no-defaults <BINLOG> | mysql -uXXX -pXXX

断点恢复
基于位置点恢复
mysqlbinlog --no-defaults --start-position='开始位置点' --stop-position='结束位置点'  <BINLOG> | mysql -uXXX -pXXX

基于时间点恢复
mysqlbinlog --no-defaults --start-datetime='YYYY-mm-dd HH:MM:SS' --stop-position='YYYY-mm-dd HH:MM:SS'  <BINLOG> | mysql -uXXX -pXXX

如果需要恢复到某条sql语句之前的所有数据,就stop在这个语句的位置点或时间点之前
如果需要恢复某条sql语句及其之后的所有数据,就从这个语句的位置点或时间点开始start
相关推荐
@insist1233 小时前
信息安全工程师-数据库安全全体系解析与最佳实践
数据库·安全·软考·信息安全工程师·软件水平考试
_ku_ku_4 小时前
数据库系统原理 · 事务管理与恢复 · 自学总结
数据库·oracle
lifewange6 小时前
Redis 集合(Set)运算完全指南
数据库·chrome·redis
TDengine (老段)6 小时前
TDengine RAFT共识协议 — 选举、日志复制、快照与仲裁
android·大数据·数据库·物联网·架构·时序数据库·tdengine
Full Stack Developme7 小时前
Spring Boot 事务管理完整教程
java·数据库·spring boot
m0_702036539 小时前
mysql如何通过索引减少行锁范围_mysql索引与加锁逻辑
jvm·数据库·python
qxwlcsdn9 小时前
如何用 IndexedDB 存储从 API 获取的超大列表并实现二级索引
jvm·数据库·python
phltxy9 小时前
Redis 主从复制
java·数据库·redis
2301_809244539 小时前
C#怎么使用协变和逆变 C#泛型中的in和out关键字协变逆变是什么意思怎么用【语法】
jvm·数据库·python
知识汲取者9 小时前
巨量引擎营销 API 完整文档
开发语言·数据库·python