关于网站开发技术,wordpress faq插件,厦门抖音代运营公司,如何建立国外网站目录
引言
一、MySQL数据库备份的重要性
#xff08;一#xff09;数据丢失的原因
#xff08;二#xff09;数据丢失的后果
二、MySQL备份类型
#xff08;一#xff09;根据数据库状态
#xff08;二#xff09;根据数据的完整性
#xff08;三#xff09;…目录
引言
一、MySQL数据库备份的重要性
一数据丢失的原因
二数据丢失的后果
二、MySQL备份类型
一根据数据库状态
二根据数据的完整性
三根据存储介质
四常见的备份方式
三、数据的备份与恢复
一物理冷备份
二mysqldump工具备份与恢复
1.库备份与恢复
1.1 备份数据库
1.2 恢复数据库
2.表的备份与恢复
2.1 备份表
2.2 恢复表
三二进制日志备份
1.开启二进制日志
2.完全备份
3.修改数据
4.模拟数据丢失
5.数据恢复
5.1 完全恢复
5.2 断点恢复
5.3 时间戳恢复
总结
一备份原理
二常用的备份方式
三制定备份策略
四注意点 引言
无论你是IT专业人士还是初次接触数据库管理的初学者理解并掌握数据库备份技术都是非常关键的。备份不仅能够防止因硬件故障、软件错误、人为误操作等因素造成的损失也是灾难恢复计划中的基石。
一、MySQL数据库备份的重要性
一数据丢失的原因
在生产环境中造成数据丢失的原因可能有很多种
人为操作在输入数据是命令错误导致数据丢失。
磁盘故障比如由于物理磨损导致磁盘出现坏道造成数据丢失
服务BUG由于数据量过大导致MySQL服务出现逻辑错误造成数据丢失
物理损坏硬盘被盗、服务器物理损毁等
二数据丢失的后果
数据是企业的核心资产一次意外的数据丢失可能导致业务停滞、客户信任度下降甚至法律纠纷。MySQL数据库备份就像是给企业数据买了一份保险能够在危机时刻快速恢复业务运行。
二、MySQL备份类型
数据备份的类型可根据不同的标准进行分类
一根据数据库状态
根据备份时数据库的状态分为
热备份在数据库仍在运行的情况下进行备份不影响正常的业务操作适用于支持在线备份的数据库系统。
冷备份在数据库完全关闭状态下进行的备份这时的数据是静态的不会发生变化但会导致业务中断。
温备份介于热备份与冷备份之间数据库可能只允许读操作而不允许写操作或者部分数据库实例处于待机模式。
二根据数据的完整性
根据备份数据时数据的完整性即备份策略可分为
完整备份顾名思义就是备份数据库的全部数据。这是最直观也最全面的备份方式适合数据量不大或者初期备份时使用。
增量备份只备份自上次备份以来发生改变的数据。这种方式节省空间但恢复时需要依次恢复所有增量备份。
差异备份备份自上次完整备份以来所有变化的数据。相比增量备份恢复时只需要最后一次完整备份和最后一次差异备份即可。
三根据存储介质
磁盘备份传统的备份方式用于大规模数据备份现在依然在大型企业中有应用。
可移动存储备份如U盘、光盘等。
本机多硬盘备份利用计算机内部的多个硬盘进行备份
网络备份通过网络将数据备份至远程服务器或其他网络存储设备。
四常见的备份方式
1.冷备份
数据库处于关闭状态数据不会发生改变从而保证数据的一致性备份速度快且不会存在任何中间状态方法比较简单虽然简单但它只能用于数据库完全关闭时的状态恢复无法做到实时备份
2.专用备份工具
mysqldump是MySQL自带的一个命令行工具它可以生成数据库的SQL脚本其中包括了创建表结构、插入数据等内容。
3.二进制日志备份
二进制日志记录了数据库的所有更改可用于进行基于时间点的恢复或主从复制。启用二进制日志并在进行完整备份后定期备份二进制日志文件可以实现增量备份的效果。
4.第三方工具备份
对于InnoDB存储引擎的大规模数据库可以使用Percona Xtrabackup工具进行热备份它能实现在线备份不影响数据库的正常使用。
MEB是Oracle官方提供的付费备份工具支持在线热备份适合大规模、高负载的生产环境。
三、数据的备份与恢复
一物理冷备份
首先关闭MySQL服务systemctl stop mysqld.service
使用tar命令将文件压缩而后进行解压恢复 使用tar命令将数据库文件进行压缩保存 将该数据库删除模拟数据文件丢失 使用命令解压置MySQL的data目录下进行恢复 开启服务进行查看数据库文件 对于整个数据库系统同理将mysql目录下的data目录进行压缩打包备份而后进行恢复 删除数据库文件模拟系统损坏 数据恢复后启动服务登录 二mysqldump工具备份与恢复
mysqldump工具备份与恢复严格意义上来说属于温备份它可以在数据库服务运行的状态下进行备份通过将备份文件中的SQL语句导入MySQL服务中来重新执行SQL语句达到备份效果
首先使用mysql -u username -p [password] -e SQL语句来查看数据库的信息
-e指令作用是在shell环境下不进入mysql服务直接执行SQL语句一般用于脚本文件
查看所有数据库名称 查看work库下的所有表 1.库备份与恢复
1.1 备份数据库
#mysqldump -u username -p [password] --databases database_name backup_name.sql-u [username]指定MySQL用户名。
-p提示输入密码。也可以直接在 -p 后面跟上密码不推荐因为命令行历史中可能会保存密码
[database_name]要备份的数据库名称。可以一个或者多个
重定向符号将mysqldump命令的输出写入到文件中。
backup_name.sql备份文件的名称扩展名通常为.sql。#mysqldump -u username -p [password] --databases 苦1 库2 backup_filename.sql
备份多个数据库#mysqldump -u username -p [password] --all-databases backup_filename.sql
备份所有数据库
首先进行数据的备份比如想要备份work库指定目录下生成备份文件 而后进行模拟丢失将work库删除 1.2 恢复数据库
可以通过grep过滤出备份文件中的SQL语句 恢复的方式有两种
1.登录MySQL服务使用source命令进行恢复
在MySQL服务中输入source 备份文件 2.使用mysql命令进行恢复
使用mysql -u username -p [password] 备份文件
将备份文件重定向输入到mysql当中 2.表的备份与恢复
#mysqldump -u username -p [password] [-d] database_name table_name backup_name.sql-u [username]指定MySQL用户名。
-p提示输入密码。也可以直接在 -p 后面跟上密码不推荐因为命令行历史中可能会保存密码
[-d]使用-d选项表示只备份表的结构不使用-d表示表结构加数据一起备份
[database_name]要备份的表的所在数据库名称。
[table_name]要备份的表名称。
重定向符号将mysqldump命令的输出写入到文件中。
backup_name.sql备份文件的名称扩展名通常为.sql。#mysqldump -u username -p [password] [-d] database_name 表1 backup_name.sql
备份多张表#mysqldump -u username -p [password] [-d] backup_name.sql
备份所有表
2.1 备份表
分别备份两张表 可以使用grep命令过滤出备份文件的SQL语句 可以看到备份的SQL语句中使用-d与不使用备份的数据信息不一样使用后并没有将输入数据信息的SQL语句备份下来
表恢复的方式与库一样可以使用source或者mysql命令恢复
首先删除两张表模拟数据丢失 2.2 恢复表
使用source恢复emp表
在登录mysql服务器输入source /bak/emp_bak.sql 查看表的信息后发现表的数据并没有恢复而表结构保存了下来 使用mysql命令恢复emp_user表的数据
输入mysql -u username -p [password] database_name 备份文件 需要注意的是在备份的过程中加不加--databases选项有些许区别
例如
mysqldump -uroot -p123123 --databases work /bak/work.sql #这是备份整个库文件包括库本身建库语句
mysqldump -uroot -p123123 work /bak/work.sql #这是备份work库下所有的表并不包括work库本身的建库语句 可以查看一下备份文件中的SQL语句 所以在进行数据恢复的时候会有区别 三二进制日志备份
MySQL的二进制日志Binary Log记录了数据库的所有更改包括数据修改、DDL语句和其它重要事件。利用二进制日志进行备份不仅可以实现数据恢复还可以用于主从复制和数据审计等目的
MySQL的二进制日志备份通常并不意味着单独备份某个特定的.log文件而是定期备份整个日志链中的一系列文件。
1.开启二进制日志
首先需要开启日志功能在/etc/my.cnf文件中添加以下信息
log-error/usr/local/mysql/data/mysql_error.log
#这一行设置了MySQL错误日志文件的位置。general_logON
#开启了MySQL的一般查询日志这意味着所有对MySQL服务器执行的每一条SQL语句都将被记录下来
#包括成功的查询、失败的查询以及连接和断开数据库的行为等。general_log_file/usr/local/mysql/data/mysql_general.log
#指定了MySQL一般查询日志的存储路径和文件名。log-binmysql-bin 开启了MySQL的二进制日志Binary Log
#这是一种用于复制和恢复的重要日志记录了数据库的所有更改包括数据修改、DDL语句等。slow_query_logON
#开启MySQL慢查询日志该日志记录执行时间超过一定阈值long_query_time设置的所有SQL查询slow_query_log_file/usr/local/mysql/data/mysql_slow_query.log
#设置了慢查询日志的存储路径和文件名。long_query_time5
#设置了慢查询的阈值单位为秒。此配置下任何执行时间超过5秒的SQL查询都会被记录到慢查询日志 添加之后重启MySQL服务systemctl restart mysqld
可以使用variables like 查看日志开启状况 variables 表示变量 like 表示模糊查询
#xxx字段
xxx% 以xxx为开头的字段
%xxx 以xxx为结尾的字段
%xxx% 只要出现xxx字段的都会显示出来
xxx 精准查询
重启后会在data/目录下生成四个日志文件 查看二进制日志文件 #--base64-outputdecode-rows使用64位编码机制去解码decode并按行读取rows
#-v: 显示详细内容
#--no-defaults : 默认字符集不加会报UTF-8的错误
在二进制日志文件中需要关注以下几个部分
#at sum 开始的位置点
#end_log_pos sum结束的位置
#时间戳 240325 18:06:33 2024年3月25日 18时06分33秒
#SQL语句
2.完全备份
二进制日志文件是对整个数据库文件进行增量备份当数据有修改删除新建等操作时会记录到二进制日志当中一般的查询语句不会记录
在开始使用二进制日志文件之前需要先进行完全备份因为增量备份时基于完全备份实现的它只记录修改后的信息所以需要先进行完全备份 在完全备份后刷新日志信息生成新的二进制文件用于记载增量备份的数据信息 3.修改数据
而后进行数据的修改 可以看新的二进制日志文件中看到操作信息 也可以执行以下命令将打印内容重定生成为txt文件便于以后查看
mysqlbinlog --no-defaults --base64-outputdecode-rows -v /bak/mysql-bin.000002 /bak/mysql-bin_$(date %F).000002.txt 此时再刷新生成新的二进制日志文件因为下一步需要模拟数据丢失删除work库文件此操作会计入二进制日志文件中在使用二进制日志文件恢复数据时依然会删除库 4.模拟数据丢失
模拟数据丢失删除库文件 5.数据恢复
5.1 完全恢复
直接使用二进制日志文件恢复会报错因为它是基于完全备份后的增量备份完全备份的数据是它的基础在上面的操作中对emp_user表进行添加三条数据所以二进制日志文件只记录了对表的一些操作语句如果直接使用增量恢复会因为找不到库文件与表而报错 所以首先需要进行完全备份的恢复 如果想将插入的三条数据全部恢复需要将二进制日志文件mysql-bin.000002全部恢复即可 5.2 断点恢复
使用--stop-position与--start-position指令进行断点恢复
--stop-positionat值
#从开始值向下匹配不设定--start-position表示匹配到目标二进制日志文件的结尾--start-positionend_log_pos值
#结束位置不设定--stop-position表示从目标二进制日志文件的开头匹配到设定值结束
过滤出转换为txt格式后的二进制文件的开始值与结束值 同样删除原本的数据信息将信息恢复到完全备份之前的状态 比如第五条信息出现错误不想恢复第五条信息想从第六条数据开始恢复只需要将--start-position的值设为第六条数据的开始值即可 通过--stop-position选项可以恢复到想要的数值为止
比如只想恢复第五条数据可以添加--stop-position结束值进行恢复
首先找到需要恢复的信息的结束值 使用mysqlbinlog命令进行恢复 在没有设置主键或者唯一键的情况下可以多次恢复同一条数据
比如想再次恢复第六条数据找到该数据的开始值与结束值 使用mysqlbinlog --no-defaults --strat-positionat值 --stop-positionend_log_pos值 进行恢复 5.3 时间戳恢复
基于时间戳恢复原理与断点恢复原理一致将--stop-position与--start-position指令更改为
--stop-datetime与--start-datetime即可
--stop-datetimeat值
#从开始值向下匹配不设定--start-datetime表示匹配到目标二进制日志文件的结尾--start-datetimeend_log_pos值
#结束位置不设定--stopt-datetime表示从目标二进制日志文件的开头匹配到设定值结束
找到需要恢复的数据的开始时间戳与结束时间戳 恢复该条数据使用--stop-datetime与--start-datetime选项 总结
本章知识点主要在于数据如何备份与恢复在生产环境中根据不同的信息或者服务状态选择不同的备份恢复方式能够达到特定的效果。
一备份原理
备份方式的基本原理主要将库或者表的SQL语句进行备份在数据恢复时将SQL语句重新导入到MySQL服务当中再次执行一遍SQL语句达到数据恢复的效果
二常用的备份方式
1.冷备份
2.专用备份工具
3.二进制日志备份
4.第三方工具备份
三制定备份策略
在生产环境中可以根据清空制定备份策略
定期备份可根据数据变化频率设定每日、每周或每月的备份计划。
使用crontab -e制定计划任务来定期进行数据备份
比如每周六对wor库下emp_user表进行备份
0 1 * * 6 /usr/local/mysql/bin/mysqldump -uroot -pabc123 work emp_user /bak/work_emp_user_$(date %F).sql;/usr/local/mysql/bin/mysqladmin -u root -p flush-logs
也可以使用shell脚本进行备份
备份保留策略根据法规要求和存储资源确定备份文件的保留周期。
异地备份将备份文件存放在不同的地理位置以防单一地点的灾难事件
四注意点
1.在进行完全备份与恢复时要注意--databases与-d的选项的添加与不添加如果业务需求只要需要库加上库下所有表的表结构那么--databases与-d选项都需要添加
2.在进行完全备份的数据恢复时如果使用source命令恢复某一张表时在登录到MySQL服务后需要先进入表的所在库后再执行source命令
3.在使用二进制日志进行备份时需要首先进行完全备份
在进行日志备份时需要根据具体要求再进行备份否则备份错误导致数据库崩坏反而造成严重后果得不偿失。
总之实施良好的MySQL数据库备份策略是保障数据安全的关键环节希望大家能结合自身业务特点和资源条件合理制定并执行备份计划真正做到防患于未然确保数据安全无忧。在实践中不断优化和完善备份方案以应对各种可能的风险和挑战