备份
在生产环境中,数据的安全性非常重要
造成数据丢失的原因
1、程序出错
2、人为的问题
3、磁盘故障
备份的分类:
1、物理备份:对磁盘或者文件直接进行备份
冷备份:脱机备份,先把指定的程序关闭,然后对资料进行备份
热备份:联机备份,不用关闭程序就可以对资料进行备份
2、逻辑备份:根据数据库文件当中保存的sql语句,表结构等等,以特定的格式和命令对文件的内容进行还原。热备份的一种。只能对表恢复,库没了没有办法恢复
物理备份(又叫全量备份)
把数据库的内容整个一次性的做备份。
mysqldump:mysql自带的备份命令,可以备份库,也可以备份库里面的表
冷备份:
实验:从一台数据库备份到另一台
实验步骤:
1.安装一个高效率的数据压缩工具 xz
systemctl stop mysqld
yum -y install xz
tar -Jcvf /opt/mysql_all_$(date +%F).tar.xz /usr/local/mysql/data
在另一个虚拟机上操作
2.迁移数据
scp root@192.168.233.70:/opt/mysql_all_2024-07-19.tar.xz /opt/
结果
热备份:
备份一个本地数据库
备份多个本地数据库
备份数据库到另一个虚拟机
先在本地虚拟机
mysqldump -u root -p --all-databases > /opt/all.sql
然后在另一台虚拟机
备份库里的表
增量备份:
vim /etc/my.cnf
开启二进制日志的功能
binlog 逻辑备份,会生成一个文件,这里面包含了sql语句,要使用特定的方向和语句才能恢复
binlog_format=MIXED:记录二进制日志的文件格式
binlog的文件格式:
STATEMENT 基于sql语句:只是记录用户操作的sql语句,但是高并发的情况下,记录操作的sql语句的顺序可能会出错,导致恢复数据时,就会有丢失或者误差。恢复效率高
ROW 基于行,记录每一行的数据,准确,高并发也不会出错,但是恢复的效率低
MIXED 混合模式,正常情况下使用statement,高并发使用row
cd /usr/local/mysql/data
开启二进制日志成功后,在工作目录(data目录)会看到mysql-bin.000001
在mysql-bin.000001 这些binlog日志文件中可以看到at 位置节点(数字)
,at后面的数字就是位置节点,每个SQL语句对应一个at。
恢复数据命令
从位置的开始恢复
指定位置的开始和结束恢复
通过时间指定恢复
注意事项:日志中的时间节点格式是 yymmdd hh:mm:ss
,但是命令行中恢复数据时的开始时间和结束时间的格式要求是yyyy-mm-dd hh:mm:ss
,要注意这个坑!
日志的管理
vim /etc/my.cnf
general_log = ON
#开启通用查询日志,默认是开启的
general_log_file = /usr/local/mysql/data/mysql_general.log
#查询日志的保存位置
#报错日志默认是开启的,不需要ON
log-error = /usr/local/mysql/data/mysql_error.log
#报错日志的保存位置
slow_query_log = ON
#开启慢查询日志(执行记录超过一定时间的语句)
slow_query_log_file = /usr/local/mysql/data/mysql_slow_query.log
#慢查询日志的保存位置
long_query_time = 5
#默认的慢查询时间是10秒,这里设置为5秒,执行时间超过5秒的记录被保存