MySQL数据库备份策略与实践详解
目录
引言
一、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_log=ON
#开启了MySQL的一般查询日志,这意味着所有对MySQL服务器执行的每一条SQL语句都将被记录下来,
#包括成功的查询、失败的查询以及连接和断开数据库的行为等。general_log_file=/usr/local/mysql/data/mysql_general.log
#指定了MySQL一般查询日志的存储路径和文件名。log-bin=mysql-bin 开启了MySQL的二进制日志(Binary Log)
#这是一种用于复制和恢复的重要日志,记录了数据库的所有更改,包括数据修改、DDL语句等。slow_query_log=ON
#开启MySQL慢查询日志,该日志记录执行时间超过一定阈值(long_query_time设置)的所有SQL查询slow_query_log_file=/usr/local/mysql/data/mysql_slow_query.log
#设置了慢查询日志的存储路径和文件名。long_query_time=5
#设置了慢查询的阈值,单位为秒。此配置下,任何执行时间超过5秒的SQL查询都会被记录到慢查询日志
添加之后重启MySQL服务:systemctl restart mysqld
可以使用:variables like 查看日志开启状况
variables 表示变量 like 表示模糊查询
#xxx(字段)
xxx% 以xxx为开头的字段
%xxx 以xxx为结尾的字段
%xxx% 只要出现xxx字段的都会显示出来
xxx 精准查询
重启后会在data/目录下生成四个日志文件
查看二进制日志文件
#--base64-output=decode-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-output=decode-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-position='at值'
#从开始值向下匹配,不设定--start-position,表示匹配到目标二进制日志文件的结尾--start-position='end_log_pos值'
#结束位置,不设定--stop-position,表示从目标二进制日志文件的开头匹配,到设定值结束
过滤出转换为txt格式后的二进制文件的开始值与结束值
同样删除原本的数据信息,将信息恢复到完全备份之前的状态
比如第五条信息出现错误,不想恢复第五条信息,想从第六条数据开始恢复,只需要将--start-position的值设为第六条数据的开始值即可
通过--stop-position选项可以恢复到想要的数值为止
比如只想恢复第五条数据可以添加--stop-position='结束值'进行恢复
首先找到需要恢复的信息的结束值
使用mysqlbinlog命令进行恢复
在没有设置主键或者唯一键的情况下可以多次恢复同一条数据
比如想再次恢复第六条数据,找到该数据的开始值与结束值
使用:mysqlbinlog --no-defaults --strat-position='at值' --stop-position='end_log_pos值' 进行恢复
5.3 时间戳恢复
基于时间戳恢复原理与断点恢复原理一致,将--stop-position与--start-position指令更改为
--stop-datetime与--start-datetime即可
--stop-datetime='at值'
#从开始值向下匹配,不设定--start-datetime,表示匹配到目标二进制日志文件的结尾--start-datetime='end_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数据库备份策略是保障数据安全的关键环节,希望大家能结合自身业务特点和资源条件,合理制定并执行备份计划,真正做到防患于未然,确保数据安全无忧。在实践中不断优化和完善备份方案,以应对各种可能的风险和挑战
相关文章:
MySQL数据库备份策略与实践详解
目录 引言 一、MySQL数据库备份的重要性 (一)数据丢失的原因 (二)数据丢失的后果 二、MySQL备份类型 (一)根据数据库状态 (二)根据数据的完整性 (三)…...
String类相关oj练习
前言: 此处练习对应博客文章:公主,王子,请点击 1.第一次只出现一次的字符 做题首先看清要求和提示: 给定一个字符串 s ,找到 它的第一个不重复的字符,并返回它的索引 。如果不…...
【Linux】进程实践项目 —— 自主shell编写
送给大家一句话: 不管前方的路有多苦,只要走的方向正确,不管多么崎岖不平,都比站在原地更接近幸福。 —— 宫崎骏《千与千寻》 自主shell命令编写 1 前言2 项目实现2.1 创建命令行2.2 获取命令2.3 分割命令2.4 运行命令 3 源代码…...
基于SpringBoot和Vue的学生笔记共享平台的设计与实现
今天要和大家聊的是一款基于SpringBoot和Vue的学生笔记共享平台的设计与实现 !!! 有需要的小伙伴可以通过文章末尾名片咨询我哦!!! 💕💕作者:李同学 💕&…...
C++心决之命名空间、重载函数和引用
目录 1. C关键字(C98) 2. 命名空间 2.1 命名空间定义 2.2 命名空间使用 3. C输入&输出 4. 缺省参数 4.1 缺省参数概念 4.2 缺省参数分类 5. 函数重载 5.1 函数重载概念 5.2 C支持函数重载的原理--名字修饰(name Mangling) 6. 引用 6.1 引用概念 6.2 引用特性…...
higress使用了解
higress使用了解 了解下 http-echo、httpbin 镜像使用 未按文档实际搭建,但大致是这样 官方文档:https://higress.io/zh-cn/docs/overview/what-is-higress 了解:利用sealos快速安装kubernetes集群:https://note.youdao.com/s…...
Swagger3探索之游龙入海
引言 后端开发中常用的接口调用工具一般使用Postman、ApiPost工具,但后期需要与前端联调,要补充接口文档花费大量时间,此时Swagger3应运而生,大大提高沟通交流的效率。 引用依赖 <!-- Swagger3 调用方式 http://ip:port/swa…...
javaWeb项目-学生考勤管理系统功能介绍
项目关键技术 开发工具:IDEA 、Eclipse 编程语言: Java 数据库: MySQL5.7 框架:ssm、Springboot 前端:Vue、ElementUI 关键技术:springboot、SSM、vue、MYSQL、MAVEN 数据库工具:Navicat、SQLyog 1、JAVA技术 JavaSc…...
云备份项目认识、环境搭建以及所使用的库的介绍
一、云备份认识 将本地计算机一个受监管的文件夹的文件上传到服务器中,有服务器组织,客户端可以通过网页将文件查看并且下载下来,下载过程支持断点续传功能,并且服务器会对上传的文件进行热点管理,长时间没人访问的文…...
汇编语言第四版-王爽第2章 寄存器
二进制左移四位,相当于四进制左移一位。 debug命令实操,win11不能启动,需要配置文件 Windows64位系统进入debug模式_window10系统64位怎么使用debugger-CSDN博客...
MoonBit MeetUp回顾——张正、宗喆:编程语言在云原生与区块链领域的技术探索
宗喆和张正分别给我们带了 KCL 相关的最新进展,由蚂蚁集团开发的 Rust 编写的开源 DSL,目标是优化云原生策略配置和用户体验。它通过引入动态配置管理、配置校验和基础设施抽象等核心概念,解决开发者认知负担、配置膨胀和标准化工具缺乏的问题…...
云原生靶场kebernetesGoat、Metarget
靶场 文章目录 靶场kebernetesGoat靶场安装Docker in DockerSSRF漏洞容器逃逸到主系统Docker CIS 基线分析Kubernetes CIS 安全基线分析分析被部署挖矿软件的容器镜像获取环境信息Hidden in layersRBAC最低权限配置错误使用 Sysdig Falco 进行运行时安全监控和检测 Metarget ke…...
【3D目标检测】Det3d—SE-SSD模型训练(前篇):KITTI数据集训练
SE-SSD模型训练 1 基于Det3d搭建SE-SSD环境2 自定义数据准备2.1 自定义数据集标注2.2 训练数据生成2.3 数据集分割 3 训练KITTI数据集3.1 数据准备3.2 配置修改3.3 模型训练 1 基于Det3d搭建SE-SSD环境 Det3D环境搭建参考:【3D目标检测】环境搭建(OpenP…...
k8s1.28.8版本安装prometheus并持久化数据
本文参考 [k8s安装prometheus并持久化数据_/prometheus-config-reloader:-CSDN博客](https://blog.csdn.net/vic_qxz/article/details/119598466)前置要求: 已经部署了NFS或者其他存储的K8s集群. 这里注意networkpolicies网络策略问题,可以后面删除这个策略&#x…...
Mybatis-特殊SQL的执行
1. 模糊查询 在MyBatis中进行模糊查询时,有以下三种常见的实现方式: 1.1. 错误示范 先来个准备操作,并做一个错误示例 根据姓名,模糊查询用户,(x小x) 更新数据表 SQLMapper.java package com.sakurapaid.mybatis3…...
金融衍生品市场
金融衍生品市场 衍生金融品的作用衍生金融工具远期合约期货合约期权 衍生金融品的作用 套期保值(Hedging) 组合多头头寸(long position)与空头头寸(short position)例:股票与股指期货 投机 衍生金融工具 远期合约 定义:在将来…...
2、Cocos Creator 下载安装
Cocos Creator 从 v2.3.2 开始接入了全新的 Dashboard 系统,能够同时对多版本引擎和项目进行统一升级和管理!Cocos Dashboard 将做为 Creator 各引擎统一的下载器和启动入口,方便升级和管理多个版本的 Creator。还集成了统一的项目管理及创建…...
Docker版本:18.06.1安装
1、操作系统:CentOS 7.5以上 2、Docker版本:18.06.1 1、解压 tar -xvf docker-18.06.1-ce.tgz2、将解压出来的docker文件内容移动到 /usr/bin/ 目录下 cp docker/* /usr/bin/3、将docker注册为service vim /etc/systemd/system/docker.service将下列…...
记 SpringBoot 使用@RequestBody 接收不到参数
POST请求,前端传的参数名字跟后端规定的参数一样。但是通过RequestBody注解接收的参数始终为NULL! //实体类中属性没有用驼峰命名 private String SubscribeID; /*** 标题*/ private String Title;解决方案: 1、字段上使用JsonProperty(valu…...
unity 打包安卓错误汇集
Failed to find target with hash string "android-34’ in: D:Pr 他说找不到sdk34level的我用as打开后卸载又重装,最后解决了 我放到Plugins/Android/下面的Java代码没有被编译 这个不知道为什么。我故意把代码写的有问题,会报错那种ÿ…...
C语言-文件操作
🌈很高兴可以来阅读我的博客!🌟我热衷于分享🖊学习经验,🏫多彩生活,精彩足球赛事⚽🔗我的CSDN: Kevin ’ s blog📂专栏收录:C预言 1. 文件的作用 …...
ADB 操作命令详解及用法大全
ADB 简介 ADB,全称 Android Debug Bridge,是 Google 提供的一款用于 Android 平台设备(包括真机和模拟器)调试、交互和管理的命令行工具。通过 ADB,开发者可以在电脑上对连接的 Android 设备执行一系列高级操作&#…...
指针数组。
指针数组 int c[5]{1,2,3,4,5};int *pc;printf("p:%d",p);return 0;输出:p:-756683712 说明p是地址值,*p就是取这个地址上的元素的值。所以printf(“*p:%d”,*p); 打印出来的是 *p:1 *pc,c是c[5]数组的首地址元素。 #include <iostream>…...
GitHub开源项目权限管理-使用账号和个人令牌访问
1.打开后台账号设置 2.找到左下角的Developer settings 3.找到Personal access tokens 的 Tokens(classic) 4.选择创建新证书 5.填写证书信息 6.点击生成证书,复制证书并且保存起来(血泪教训,证书只会在创建时显示一次,以后就再也…...
DevSecOps平台架构系列-亚马逊云AWS DevSecOps平台架构
目录 一、概述 二、AWS DevSecOps实施原则 2.1 尽早采用安全测试,加速问题反馈 2.2 优先考虑预防性安全控制 2.3 部署检测性安全控制时,确保有与之互补的响应性安全控制 2.4 安全自动化 2.5 总结 三、AWS DevSecOps关键组件 3.1 关键组件 3.2 关…...
KaTex 常用公式编辑
原文:https://blog.iyatt.com/?p7854 注:语法上和 Latex 差不多一样,我是因为 WordPress 上使用 WP Githuber MD 插件,才用的 KaTex(插件里面的 LaTex 模块有 bug,无法渲染) 希腊字母 大写代…...
域攻防渗透之委派攻击
出身寒微,不是耻辱,能屈能伸,方为丈夫。 约束性委派的利用 原理 非约束性委派被委派的机器会直接得到发布委派的用户的TGT,是十分不安全的,因此微软推出了约束性委派,还扩充kerberos协议,添加…...
优雅的使用ChromeDriver
在网页自动化测试中,我们经常需要控制浏览器执行各种操作。对于Python开发者来说,可以使用 Selenium 库来实现这一目的。Selenium需要与浏览器的驱动程序(Driver)配合使用,本文将介绍如何在Windows 11系统下载ChromeDriver并正确保存。 第一步:确定Chrome浏览器版本号 打开Ch…...
react native hooks 页面出现重绘问题,如何解决
在React Native应用中,使用Hooks导致页面出现频繁重绘或性能问题时,可以尝试以下策略来优化和解决问题: 减少不必要的状态更新: 使用 React.memo 高阶组件包裹那些不需要每次父组件状态改变时都重新渲染的子组件。它通过浅比较pro…...
kafka安装并测试
一. Linux下ZooKeeper的安装及使用 1、创建工作目录,下载安装包 #创建安装目录 mkdir -p /opt/zookeeper #移动到目录 cd /opt/zookeepe #下载zookeeper安装包 wget https://mirrors.aliyun.com/apache/zookeeper/zookeeper-3.4.14/zookeeper-3.4.14.tar.gz #解…...
自己做卖东西网站/免费大数据查询
问题描述在操作系统中,数据通常以文件的形式存储在文件系统中。文件系统一般采用层次化的组织形式,由目录(或者文件夹)和文件构成,形成一棵树的形状。文件有内容,用于存储数据。目录是容器,可包…...
巩义网站建设/实事新闻热点
使用报表模型来设计报表的时候,我们可能会用到一些条件筛选,和直接使用存储过程来查询相比,还是有点儿区别的,使用存储过程或者查询语句的话,我们可以通过设置一些变量参数"Id”等,然后在数据集的参数…...
制作app的教程/seo还有用吗
1、说明系统:centos7.2cuda版本:9.0报错信息:在执行.run文件后报错# sh cuda_9.0.176_384.81_linux.run The driver installation is unable to locate the kernel source. Please make sure that the kernel source packages are installed …...
东莞网站建设制作厂/seo优化推广
目录 一、目的--设计原则解决的问题 二、设计原则 2.1 原则概念 2.2 开闭原则 2.3 迪米特法则 2.4 合成复用原则 2.5 依赖倒置原则 一、目的--设计原则解决的问题 支持可维护性的同时,提高系统的可复用性,达到高内聚,低耦合目的。 二…...
运城网站建设公司有多少/搜索引擎营销案例分析题
Python是一种面向对象的解释型计算机程序设计语言,由荷兰人Guido van Rossum于1989年发明,第一个公开发行版发行于1991年。Python的特点:优雅、明确、简单。Python适合的领域:Web网站和各种网络服务、系统工具和脚本、作为“胶水”…...
做网站卖东西赚钱吗/上海百度关键词搜索推广服务
删除文件时排除特定文件删除当前目录下所有 *.txt文件,除了test.txtrm ls *.txt|egrep -v test.txt或者rm ls *.txt|awk {if($0 ! "test.txt") print $0}排除多个文件rm ls *.txt|egrep -v (test.txt|fff.txt|ppp.txt)---------------rm -f ls *.log.1|eg…...