前言 一、MysqL 日志管理 MysqL 的日志默认保存位置为
/usr/local/MysqL/data
下:表、库的信息也在 data 目录下。 1.1 MysqL的日志分类 错误日志:error-log;通用查询日志:general_log;二进制日志:log-bin;慢查询日志:slow_query_log。1.2 MysqL的日志开启与配置
可以修改 MysqL 的配置文件 /etc/my.cnf
进行永久性修改,重启服务生效。
vim /etc/my.cnf[MysqLd]#【错误日志】,用来记录当MysqL启动、停止或运行时发生的错误信息,#【错误日志】默认是开启的#指定【错误日志】的 保存位置和文件名log-error=/usr/local/MysqL/data/MysqL_error.log#【通用查询日志】,用来记录MysqL的所有连接和语句#【通用查询日志】默认是关闭的general_log=ONgeneral_log_file=/usr/local/MysqL/data/MysqL_general.log#【二进制日志】(binlog),用来记录所有更新了数据或者已经潜在更新了数据的语句,记录了数据的更改,可用于数据恢复。#【二进制日志】默认已开启log-bin=MysqL-bin #也可以 log_bin=MysqL-bin#【慢查询日志】,用来记录所有执行时间超过 long_query_time 秒的语句,可以找到哪些查询语句执行时间长,以便于优化;#【慢查询日志】默认是关闭的slow_query_log=ONslow_query_log_file=/usr/local/MysqL/data/MysqL_slow_query.loglong_query_time=5 #设置超过5秒执行的语句被记录,缺省时为10秒#重启MysqL 服务使其生效systemctl restart MysqLd.service
修改前:
修改配置文件中,日志的开启状态和日志的文件位置:
重启服务
验证: 1.3 进入数据库里查看相对应的日志是否开启
#查看通用查询日志是否开启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;
ls /usr/local/MysqL/data/
(1)物理备份
对数据库 *** 作系统的物理文件(如数据文件、日志文件等)的备份;物理备份的方法
冷备份(脱机备份):是在关闭数据库的时候进行的热备份(联机备份):数据库处于运行状态,依赖于数据库的日志文件温备份:数据库锁定表格(不可写入但可读)的状态下进行备份 *** 作(2)逻辑备份
对数据库逻辑组件(如:表等数据库对象)的备份2.2.2 从数据库的备份策略角度分类(1)完全备份
每次对数据库进行完整的备份;(2)差异备份
备份自从上次完全备份之后,被修改过的文件;(3)增量备份
只有在上次完全备份或者增量备份后被修改的文件才会被备份。工作中通常使用 一次完全备份(如每月一次) 和 多次增量备份 结合使用。
2.3 常见的备份方法物理冷备
备份时数据库处于关闭状态,直接打包数据库文件;备份速度快,恢复时也是最简单的;**专用备份工具 mydump 或 MysqLhotcopy **
MysqLdump常用的逻辑备份工具;MysqLhotcopy仅拥有备份MyISAM和ARCHIVE表;启用二进制日志进行增量备份
进行增量备份,需要刷新二进制日志;第三方工具备份
如:免费的 MysqL 热备份软件 Percona XtraBackup;常用备份方式有:物理打包备份,还有 MysqLdump 工具备份。
2.4 MysqL 完全备份完全备份是对整个数据库、数据库结构和文件结构的备份;保存的是备份完成时刻的数据库;是差异备份与增量备份的基础;
优点:备份与恢复 *** 作简单方便(就是压缩、解压缩、替换的过程)
缺点:数据存在大量的重复、占用大量的备份空间、备份与恢复时间长;
完全备份分类:
(1)物理冷备份与恢复
关闭MysqL数据库;使用tar命令直接打包数据库文件夹;直接替换现有MysqL目录即可;(2)MysqLdump备份与恢复
MysqL自带的备份工具,可方便实现对MysqL的备份;可以将指定的库、表导出为 .sql脚本文件;使用MySQL命令 导入备份的数据;2.5 物理备份之:冷备份、与恢复冷备份就是 停止 MysqL 服务后,再进行备份;
热备份就是 MysqL 在服务中就进行备份;
物理冷备份与恢复
systemctl stop MysqLd#xz 也是一个压缩工具,J:压缩,压缩文件结尾用 xzyum -y install xz #压缩备份tar Jcvf /opt/MysqL_all_$(date +%F).tar.xz /usr/local/MysqL/data/#解压恢复tar Jxvf /opt/MysqL_all_2021-02-05.tar.xz -C /usr/local/MysqL/datasystemctl start MysqLd
/usr/lcoal/MysqL/data 目录中
.ibd 是数据文件
.frm 是表结构文件
恢复后,发现备份前的库、数据、日志 文件都还在。 2.6 MysqLdump 工具 备份与恢复
备份通过保存 sql 语句,恢复时再执行 保存的 sql 语句覆盖恢复;
MysqLdump 是数据库的备份工具
2.6.1 完全备份一个、多个、所有完整的库#导出的备份文件就是数据库脚本 sql 文件语法:MysqLdump -u root -p[密码] --databases 库名1 [库名2] … > /备份路径/备份文件名.sql例:#完全备份一个库MysqLdump -u root -p --databases STARBUCKS > /opt/STARBUCKS.sql#完全备份多个库,空格隔开MysqLdump -u root -p --databases STARBUCKS LUCKY > /opt/STARBUCKS-LUCKY.sql#完全备份 MysqL 服务器中所有的库MysqLdump -u root -p[密码] --all-databases > /备份路径/备份文件名.sql例:MysqLdump -u root -p --all-databases > /opt/ALL_DATABASES.sql
2.6.2 完全备份指定库中的部分表 格式:MysqLdump -u root -p[密码] [-d] 库名 [表名1] [表名2] … > /备份路径/备份文件名.sql#使用“ -d ”选项,只保存数据库的表结构#不使用“ -d ”选项,表结构和表数据都进行备份例:MysqLdump -u root -p STARBUCKS member > /opt/STARBUCKS_member.sql
2.6.3 查看sql文件中的内容 #去除注释行、空行cat /opt/文件名.sql |grep -v "^--" | grep -v "^/" | grep -v "^$"
2.6.4 可添加定时任务备份 #使用crontab 计划性任务来执行;每周6凌晨1点进行完整备份crontab -e0 1 * * 6 MysqLdump -u root -p --all-databases > /opt/STARBUCKS_$(date +%F).sql
2.7 MysqL 完全恢复(使用 MysqLdump 备份的 sql 文件) 2.7.1 恢复数据库 #“-e”选项,用于指定连接 MysqL 后执行的命令,命令执行完后自动退出,就不用登录MysqL界面敲命令了#我们用删掉库 STARBUCKS , 用上面保存的 STARBUCKS_bak.sql 进行恢复(及时执行SQL语句)MysqL -u root -p -e 'DROP DATABASE STARBUCKS;'MysqL -u root -p -e 'show databases;'#恢复(重新执行这个库的sql脚本)MysqL -u root -p < /opt/STARBUCKS_bak.sqlMysqL -u root -p -e 'show databases;
2.7.2 恢复数据表
数据库存在,其中的表被删除了,可以通过表的备份 sql 文件进行恢复(就是执行表的SQL语句)。
MysqL -u root -p -e 'drop table STARBUCKS.member;'MysqL -u root -p -e 'USE STARBUCKS;SHOW tableS;'MysqL -u root -p STARBUCKS < /opt/STARBUCKS_member.sqlMysqL -u root -p -e 'show tables from STARBUCKS;'
三、MysqL 增量备份与恢复 3.1 MysqL 增量备份 3.1.1 开启二进制日志功能(修改配置文件)
修改MysqL 配置文件后要重启服务。
vim /etc/my.cnf[MysqLd]server-ID = 1log-bin=MysqL-binbinlog_format = MIXED #指定二进制日志(binlog)的记录格式为 MIXED#二进制日志(binlog)有3种不同的记录格式:STATEMENT(基于SQL语句)、 #默认格式是STATEMENTROW(基于行)、MIXED(混合模式),systemctl restart MysqLd.service#查看生成的二进制日志文件ls -l /usr/local/MysqL/data/MysqL-bin.*
3.1.2 执行 flush-logs 生成新的、空的 二进制日志文件 MysqLadmin -u root -p flush-logs生成的文件是空的,执行语句后才会记录在这个新日志文件中
3.1.3 查看二进制日志文件的内容 由于 MysqL-bin 文件中都是通过 base64 编码过的内容,不能直接阅读,所以需要进行转码。
cp /usr/local/MysqL/data/MysqL-bin.000006 /opt/MysqLbinlog --no-defaults --base64-output=decode-rows -v /opt/MysqL-bin.000002#--base64-output=decode-rows:使用base64编码机制去解码并按行读取#-v:显示详细内容
3.1.4 验证二进制日志内容 INSERT INTO `STARBUCKS`.`USER_MESG` VALUES (1010, '饼干', '食品', '2021-06-28', '50', '在用');INSERT INTO `STARBUCKS`.`USER_MESG` VALUES (1011, '橙汁', '饮料', '2021-06-29', '10', '已过期');
插入完成后,执行
MysqLadmin -u root -p flush-logs
,新生成 MysqL-bin.000007,解码 00007 ,发现执行的 两条 INSERT 语句不在 0007 日志文件中,而在 00006 日志文件中。所以说 flush-logs 执行后,会生成一个新的空的 二进制日志文件,之后再执行 INSERT 等语句才会记录在其中。 3.2 MysqL 增量恢复 3.2.1 一般增量恢复
根据上面 3.1 中生成的二进制文件中的内容,进行恢复。
模拟的是进行 增量备份恢复,二进制日志文件中记录的是 增量的SQL语句,恢复的时候也是执行的增量sql。MysqL -u root -pdelete from STARBUCKS.USER_MESG where ID in (1010,1011);select * from class;quit#将二进制日志中的数据导入到数据库中MysqLbinlog --no-defaults /opt/MysqL-bin.000006 | MysqL -u root -pMysqL -u root -pabc123 -e 'SELECT * FROM STARBUCKS.USER_MESG;'
也可以删除整个库后,先执行完全备份的sql 脚本文件,再执行需要执行的增量二进制日志文件。3.2.2 断点增量恢复
看图,二进制日志文件中,有 at 后面跟着日志记录的位置,也有时间。
(1)基于位置恢复
如:仅恢复到位置点为“ at 299”之前的数据
恢复到哪一行为止:--stop-position='at 值'
#模拟数据丢失MysqL -uroot -pabc123 -e "DELETE FROM STARBUCKS.USER_MESG WHERE ID IN (1010,1011);"MysqL -uroot -pabc123 -e "SELECT * FROM STARBUCKS.USER_MESG;"#到位置点649停止恢复数据MysqLbinlog --no-defaults --stop-position='649' /opt/MysqL-bin.000006 | MysqL -u root -pabc123MysqL -uroot -pabc123 -e "SELECT * FROM STARBUCKS.USER_MESG;"
从哪一行开始恢复:
--start-position='at 值'
#模拟数据丢失MysqL -uroot -pabc123 -e "DELETE FROM STARBUCKS.USER_MESG WHERE ID IN (1010,1011);"#从位置点649开始恢复MysqLbinlog --no-defaults --start-position='649' /opt/MysqL-bin.000006 | MysqL -u root -pabc123MysqL -uroot -pabc123 -e "SELECT * FROM STARBUCKS.USER_MESG;"
#当然 --start-position 和 --stop-position 可以一起使用MysqL -uroot -pabc123 -e "DELETE FROM STARBUCKS.USER_MESG WHERE ID IN (1010,1011);"MysqLbinlog --no-defaults --start-position='299' --stop-position='857' /opt/MysqL-bin.000006 | MysqL -u root -pabc123两条就都新增了,注意 日志文件是通过事务执行的,不仅要包含 BEGIN 也要包含 COMMIT 的行才能新增成功。
(1)基于时间点恢复
仅恢复到 210628 14:53:05 之前的数据,即不恢复 ID=1011 的数据。#模拟数据丢失MysqL -uroot -pabc123 -e "DELETE FROM STARBUCKS.USER_MESG WHERE ID IN (1010,1011);"#到2021-06-28 14:53:05截止恢复数据MysqLbinlog --no-defaults --stop-datetime='2021-06-28 14:53:05' /opt/MysqL-bin.000006 | MysqL -uroot -pabc123#查看表中数据MysqL -uroot -pabc123 -e "SELECT * FROM STARBUCKS.USER_MESG;"
和根据位置恢复数据一样,也可以 从某个时间点进行恢复,也可恢复到某个时间点为止。MysqLbinlog --no-defaults --start-datetime='2021-06-28 14:53:05' /opt/MysqL-bin.000006 | MysqL -uroot -pabc123
总结 以上是内存溢出为你收集整理的MySQL日志管理、备份与恢复全部内容,希望文章能够帮你解决MySQL日志管理、备份与恢复所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)