MySQL备份与恢复

MySQL备份与恢复

一、数据库备份

1.备份方法

物理备份:直接对数据库的数据文件或者日志文件进行备份

逻辑备份:对数据库的库或表对象进行备份

2.备份策略

①完全备份

每次备份都备份完整的数据库
MySQL备份与恢复_第1张图片

②差异备份

只备份上一次完全备份后的更新数据
MySQL备份与恢复_第2张图片

③增量备份

每次备份只备份上一次完全备份或增量备份后的最新数据
MySQL备份与恢复_第3张图片

3.常用备份方法

二、完全备份与恢复

2.1概念

•是对整个数据库、数据库结构和文件结构的备份
•保存的是备份完成时刻的数据库
•是差异备份与增量备份的基础

2.2优缺点

优点

备份与恢复操作简单方便

缺点

数据存在大量的重复

占用大量的磁盘空间

备份与恢复时间长

2.3完全备份与恢复

2.3.1物理冷备份与恢复

①物理冷备份
1.暂停数据库服务
systemctl stop mysqld.service

2.通过tar命令压缩/usr/local/mysql/data目录
tar zcf /opt/backup/mysql_data_$(date +"%Y%m%d").sql data

3.查看压缩后的目录
[root@localhost mysql]# ls /opt/backup/
mysql_data_20230619.sql
②恢复
1.先停止MySQL服务,然后将压缩文件解压到/usr/local/mysql目录下(data目录不能有重复)
[root@localhost mysql]# tar xf mysql_data_20230619.sql 
[root@localhost mysql]# ls
bin      COPYING-test  data.bak  include  man                      mysql-test  README-test  support-files
COPYING  data          docs      lib      mysql_data_20230619.sql  README      share        usr

2.重启MySQL服务
systemctl restart mysqld.service 

在这里插入图片描述
MySQL备份与恢复_第4张图片

2.3.2mysqldump备份与恢复

①备份

mysqldump、xtrabackup等工具来逻辑备份
mysqldump -uXXX -pXXX --databases 库1 [库2] ... >  XXX.sql     备份单库或多库
mysqldump -uXXX -pXXX --all-databases > XXX.sql                备份所有的库
mysqldump -uXXX -pXXX 库名 表1 表2 ... > XXX.sql               备份库中的一个或多个表数据(不包含创建库的操作)
mysqldump -uXXX -pXXX 库名 > XXX.sql                           备份库中的所有表数据(不包含创建库的操作)

MySQL备份与恢复_第5张图片

②恢复

先登录到mysql,再执行 source XXX.sql(注:如果XXX.sql是表数据文件那么需要先自行创建库并use切换库)

mysql -uXXX -pXXX [库名] < XXX.sql
cat XXX.sql | mysql -uXXX -pXXX [库名]

MySQL备份与恢复_第6张图片

2.4数据库完全备份-脚本定时备份

每周二的凌晨12:30执行完全备份
crontab -e
30 0 * * 2  /usr/local/mysql/bin/mysqldump -u用户名 -p密码 --all-databases > /opt/backup/xxx.sql

三、增量备份与恢复

1.增量备份的方法

2.修改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

##慢查询日志,用来记录所有执行时间超过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 slow_query_log=ON;				#在数据库中设置开启慢查询的方法

3.查看二进制日志文件

mysqlbinlog --no-defaults --base64-output=decode-rows -v  二进制日志文件

4.刷新二进制日志

mysqladmin -uXXX -pXXX flush-logs

5.增量备份与恢复

①备份

1.先做完全备份
mysqldump -u root -p 库名 表名> /opt/库_表名_$(date +%F).sql    //备份库中的表
mysqldump -u root -p --databases 库名 > /opt/库名_$(date +%F).sql  //备份库
2.每天进行增量备份操作,生成新的二进制日志文件
mysqladmin -u root -p flush-logs
3.备份刷新后的数据
mv mysql-bin.000001 /opt/backup/mysql_tjj_$(date -d '+1 day' '%Y%m%d')  //备份第二天刷新的文件

②一般恢复

1.先恢复库数据
cat mysql_tjj_2023-06-19.sql | mysql -uroot -pabc123  //cat 备份库文件 | 导入给数据库
2.恢复增量部分数据
mysqlbinlog --no-defaults 二进制日志文件 | mysql -uXXX -pXXX

MySQL备份与恢复_第7张图片
MySQL备份与恢复_第8张图片
MySQL备份与恢复_第9张图片
在这里插入图片描述
在这里插入图片描述

③断点恢复

基于位置恢复

mysqlbinlog --no-defaults  --start-position="位置点"  --stop-position="位置点"  二进制日志文件 | mysql -uXXX -pXXX

基于时间恢复

mysqlbinlog --no-defaults  --start-datetime="YYYY-mm-dd HH:MM:SS"  --stop-datetime="YYYY-mm-dd HH:MM:SS"  二进制日志文件 | mysql -uXXX -pXXX

你可能感兴趣的:(mysql,数据库,sql)