当前位置: 首页 > news >正文

大理住房和城乡建设局网站网络策划员

大理住房和城乡建设局网站,网络策划员,安贞网站建设公司,seo对网店的作用有哪些我们了解数据库事务时#xff0c;知道两种日志#xff1a;重做日志#xff0c;回滚日志。 对于线上数据库应用系统#xff0c;突然遭遇 数据库宕机 怎么办#xff1f;在这种情况下#xff0c;定位宕机的原因 就非常关键。我们可以查看数据库的 错误日志。因为日志中记录…我们了解数据库事务时知道两种日志重做日志回滚日志。 对于线上数据库应用系统突然遭遇 数据库宕机 怎么办在这种情况下定位宕机的原因 就非常关键。我们可以查看数据库的 错误日志。因为日志中记录了数据库运行中的诊断信息包括了错误警告和注释等信息。比如: 从日志中发现某个连接中的sql操作发生了死循环导致内存不足被系统强行终止了。明确了原因处理起来也就轻松了系统很快就恢复运行了。 除了发现错误日志在数据库复制数据恢复操作审计以及确保数据的永久和一致性等方面都有着不可替代的作用。 千万不要小看日志。很多看似奇怪的问题答案就往往藏在日志里。很多情况下只有通过查看日志才能发现问题的原因真正解决问题。所以一定要学会查看日志养成检查日志的习惯对提升你的数据库应用开发能力至关重要。 1. MySQL支持的日志 1.1 日志类型 mysql有不同类型的日志文件用来存储不同类型的日志分为二进制日志错误日志通用查询日志 和 慢查询日志这也是常用的4中。mysql8由新增两种支持的日志中继日志 和 数据定义语句日志。使用这些日志文件可以查看MySQL内部发生的事情。 这6类日志分别为 ~ 慢查询日志记录所有执行时间超过long_query_time的所有查询方便我们对查询进行优化。 ~ 通用查询日志记录所有连接的起始时间和终止时间以及连接发送给数据库服务器的所有指令对我们复原操作的实际场景发现问题甚至是对数据库操作的审计都有很大帮助。 ~ 错误日志记录MySQL服务启动运行或停止MySQL服务时出现问题方便我们了解服务器的状态从而对服务器进行维护。 ~ 二进制日志记录所有更改数据的语句可以用于主从服务器之间的数据同步以及服务器遇到故障时数据的无损失恢复。 ~ 中继日志用于主从服务器架构中从服务器用来存放主服务器二进制日志内容的一个中间文件。从服务器通过读取中继日志的内容来同步主服务器上的操作。 ~ 数据定义语句日志记录数据定义语句执行的元数据操作。 除了二进制日志外其他日志都是文本文件。默认情况下所有日志创建于MySQL数据目录中。 1.2 日志的弊端 ~ 日志功能会 降低MySQL数据库的性能。例如在查询非常频繁的MySQL数据库系统中如果开启了通用查询日志和慢查询日志MySQL数据库会花费很多时间记录日志。 ~ 日志会 占用大量的磁盘空间。对于用户量非常大操作非常频繁的数据库日志文件需要的存储空间设置比数据库文件需要的存储空间还要大。 2. 慢查询日志 性能分析工具章节explian已经讲过。 3. 通用查询日志 通用查询日志用来 记录用户的所有操作包括启动和关闭mysql服务所有用户的连接开始时间和截止时间发给MySQL数据库服务器的所有sql指令等。当我们的数据发生异常时查看通用查询日志还原操作时的具体场景可以帮助我们准确定位问题。 3.1 问题场景 在电商系统中购买商品并且使用微信支付完成以后却发现支付中心的记录并没有新增此时用户再次使用支付宝支付就会出现重复支付的问题。但是当去数据库中查询数据的时候会发现只有一条记录存在。那么此时给到的现象就是只有一条支付记录但是用户却支付了两次。 我们对系统进行了仔细检查没有发现数据问题因为用户编号和订单编号以及第三方流水号都是对的。可是用户确实支付了两次这个时候我们想到了检查通用查询日志看看当天到底发生了什么。 查看之后发现1月1日下午2点用户使用微信支付完成以后但是由于网络故障支付中心没有及时收到微信支付的回调通知导致当时没有写入数据。1月1日下午2点30用户又使用支付宝支付此时记录更新到支付中心。1月1日晚上9点微信的回调通知过来了但是支付中心已经存在了支付宝的记录所以只能覆盖记录了。 由于网络的原因导致了重复支付。至于解决问题的方案就很多了这里省略。 可以看到通用查询日志可以帮助我们了解操作发生的具体时间和操作的细解对找出异常发生的原因极其关键。 3.2 查看当前状态 show variables like %general%;  1. general_log 默认关闭即通用查询日志处于关闭状态。在mysql中这个参数的默认值是关闭的。因为一旦开启记录通用查询日志MySQL会记录所有的连接起止和相关的sql操作这样很消耗系统资源并且占用磁盘空间。我们可以通过手动修改变量的值在需要的时候开启日志。 2. 通用查询日志文件的名称是iz2ze30kmgo52sv7anqvviz.log。存储路径是/var/lib/mysql,默认也是数据库路径。这样我们就知道在哪里可以查看通用查询日志的内容了。 3.3 启动日志 方式一永久启动 修改my.cnf或者my.ini配置文件来设置。在mysql组下加入log选项并重启MySQL服务。 [mysqld] general_logON general_log_file[path[filename]] # 日志文件所在的目录路径filename为日志文件名方式二临时性方式 set global general_logon; # 开启通用查询日志 4. 错误日志 错误日志记录了MySQL服务器启动停止运行的时间以及系统启动运行和停止过程中的诊断信息包括错误警告和提示等。 通过错误日志可以查看系统的运行状态便于及时发现故障修复故障。如果MySQL服务出现异常错误日志时发现问题解决故障的首选。 4.1 启动日志 在MySQL数据库中错误日志功能是默认开启的错误日志无法被禁止。 默认情况下错误日志存储在MySQL数据库的数据文件夹下名称默认为 mysqld.loglinux系统下或 hostname.err mac系统下。如果需要制定文件名则需要在没my.cnf或者my.ini中做如下配置 [mysqld] log-error[path/[filename]] # path为日志文件所在的目录路径。 修改配置项后需要重启MySQL服务已生效。 4.2 查看日志 MySQL错误日志是以文本形式存储的可以使用文本编辑器直接查看。 查询错误日志的存储路径: show variables like log_err%;    日志内容如下图所示  可以看到错误日志文件中记录了服务器启动的时间以及存储引擎innodb启动和停止的时间等。我们在做初始化的时候生成的数据库初始密码也是记录在error.log中。 4.3 删除/刷新日志 对于很久以前的错误日志数据库管理员查看这些错误日志的可能性不大可以将这些错误日志删除以保证mysql服务器上的硬盘空间。MySQL的错误日志是以文本形式存储在文件系统中的。可以直接删除。 5. 二进制日志 binlog可以说是MySQL比较重要的日志了在日常开发及运维过程中经常会遇到。 binlog即binary log二进制日志文件也叫做变更日志。它记录了数据库所有执行的ddl和dml等数据库更新时间的语句但是不包含没有修改任何数据的语句。 它以 事件形式 记录并保存在 二进制文件中。通过这些信息我们可以在线数据更新操作的全过程。 binlog主要应用场景 ~ 一是用于数据恢复如果MySQL数据库意外停止可以通过二进制日志文件来查看用户执行了那些操作对数据库服务器文件做了那些修改然后根据二进制日志文件中的记录来恢复数据库服务器。 ~ 二是用户数据复制由于日志的延续性和时效性master把它的二进制日志传递给slaves来达到master-slaves数据一直的目的。 可以说MySQL数据库的数据备份主备主主主从都离不开binlog需要依靠binlog来同步数据保证数据一致性。 5.1 查看默认情况 查看记录二进制文件是否开启在MySQL8.0中默认情况下二进制文件是开启的。 show variables like %log_bin%; log_bin_basenam是binlog日志的基本文件名后面会追加标识来表示每一个文件 log_bin_index是binlog文件的索引文件这个文件管理所有的binlog文件的目录 log_bin_trust_function_creators显示存储过程前面我们已经讲过了这是因为二进制日志的一个重要功能是用于主从复制而存储函数有可能导致主从的数据不一致。所以当开启二进制日志后需要限制存储函数的创建修改调用 log_bin_user_v1_row_events此只读系统变量已弃用。on表示使用版本1二进制日志行off表示使用版本2二进制日志行。 5.2 日志参数设置 方式1永久性方式 修改MySQL的my.cnf或my.ini文件可以设置二进制日志的相关参数 [mysqld] # 启用二进制文件 # 给二进制文件命名 log-binatguigu-bin # 日志保存时间 binlog_exprire_logs_seconds600 # 日志文件上限大小 max_binlog_size100M 提示 1. log-binmysql-bin # 打开日志主机需要打开这个mysql-bin也可以自定义这里也可以加上路径如 /home/www/mysql_bin_log/mysql-bin 2. binlog_expire_logs_seconds此参数控制二进制日志文件保留的时长单位是S默认是30天 3.max_binlog_size控制单个二进制文件日志的大小当前日志文件大小超过此变量执行切换操作。此参数的最大和默认值是1GB该设置并不能严格控制binlog的大小尤其是binlog比较靠近最大值而由于到一个比较大事务时为了保证事务的完整性可能不做切换日志的动作只能将该事务的所有sql都记录进当前日志知道事务结束。一般情况下可采取默认值。方式二临时性方式 如果不希望通过修改配置文件并重启的方式设置二进制日志的话还可以使用如下指令需要注意的是在mysql8中只有会话级别的设置没有global级别的设置了。 # 会话级别设置 set sql_log_bin0; 5.3 查看日志 当MySQL创建二进制日志文件时先创建一个以filename为名称以.index为后缀的文件再创建一个以filename为名称以‘.00001’为后缀的文件。 MySQL服务重新启动一次以.00001为后桌的文件就会增加一个并且后缀名按1递增。即日志文件的个数与MySQL服务启动的次数相同如果日志长度超过了max_binlog_size上线就会创建一个新的日志文件。 查看当前二进制日志文件列表及大小。指令如下 show binary logs;所有对数据库的修改都会记录到binlog中。但binlog 是二进制文件无法直接查看想要更直观的观测它就要借助mysqlbinlog命令工具了。指令如下在查看执行先执行一条sql语句。 update student set name张三 where id 1; 开始查询binlog   show binlog events in atguigu-bin.00002;  将二进制文件格式化输出, 对应下面两个事务。   5.4 使用日志恢复数据  如果MySQL服务器启用了二进制日志在数据库出现意外丢失数据时可以使用MySQLbinlog工具从指定的时间点开始直到现在或另一个指定的时间点的日志中恢复数据。 mysqlbinlog恢复数据的语法如下 mysqlbinlog [option] filename | mysql -uuser -ppass; 这个命令可以这样理解使用mysqlbinlog命令来读取filename中的内容然后使用mysql命令将这些内容恢复到数据库中。 ~ filename是日志文件名。 ~ option可选项比较重要的两队option参数是--start-date--stop-date和--start-position--stop-position。 ~ --start-date--stop-date可以指定恢复数据库的起始时间点和结束时间点。 ~ --start-position--stop-position可以指定恢复数据的开始位置和结束位置。 案例 # 查看表中数据 select * form student;  此时插入三条记录: insert into student(id,name,class) values (20, aaa, No.1); insert into student(id,name,class) values (21, aaa, No.1); insert into student(id,name,class) values (22, aaa, No.1);  删除一个id20的数据   误操作将id20 的全部删除   这个时候dml已经完成提交无法回滚我们上述操作此时已经记录到binlog日志中使用binlog日志文件进行恢复。查看binlog日志文件 使用binlog日志进行恢复其实就是在修改表恢复的同时又会给日志文件新增日志。这时候建议开辟一个新的日志文件 flush log开辟一个新的日志文件。 此时我们可以把002文件看作是恢复数据的文件。 恢复数据有两种方式一种是position一种是时间恢复。 我们使用position方式进行恢复数据。   首先恢复三条新增数据此时查找到的pos_id如下 从事务开启的beginid开始恢复884 - 1729恢复这个区间段。恢复语句: /use/bin/mysqlbinlog --start-position884 --stop-position1729 --databasesatguigu3 /var/lib/mysql/binlog/atguiu-bin.00005 | /use/bin/mysql -uroot -p123456 -v atguigu3 5.5 删除二进制日志 MySQL的二进制文件可以配置自动删除同时MySQL也提供了安全的手动删除二进制文件的方式。purge master logs 只删除指定部分的二进制日志reset master 删除所有的二进制日志。具体如下 1. purge master logs: 删除指定的日志文件 purge {master | binary} logs to 指定日志文件名; purge {master | binary} logs before 指定日志文件名; 举例: 使用purge master logs语句删除创建时间比binlog.00005早的所有日志 1多次重新启动MySQL便于生成多个日志文件。然后用show语句显示二进制日志文件列表 show binary logs; 2执行purge master logs语句删除创建时间比binlog.00005早的所有日志 purge master logs to binlog.00005; 3显示二进制日志文件列表 show binary logs; 比binlog.00005早的所有日志文件都删除了。 5.6 其他场景 二进制日志可以通过数据库的 全量备份 和二进制日志保存的 增量信息完成数据库的 无损恢复。但是如果遇到数据量大数据库和数据表很多比如分库分表的应用的场景用二进制日志进行数据恢复是很有挑战性的因为起此位置不容易管理。 在这种情况下一个有效的解决办法是 配置主从数据库服务器甚至是 一主多从 的架构把二进制文件的内容通过中继日志同步到从数据库服务器中这样就可以有效避免数据库故障导致数据异常等问题。 6. 在谈二进制日志 6.1 写入机制 binlog的写入时机也非常简单事务执行过程中先把日志写到binlog cache事务提交的时候再把binlog cache写到binlog文件中。因为一个事务的binlog不能被拆开无论这个事务多大也要确保一次性写入所以系统会给每个线程分配一个快内存作为binlog cache。 我们可以通过binlog_cache_size 参数控制单个线程binlog cache大小如果存储内容超过了这个参数就要暂存到磁盘。binlog日志刷盘流程如下 上图的write是指把日志写入到文件系统的page cache并没有把数据持久化到磁盘所以速度比较快 上图的fsync才是将数据持久化到磁盘的操作 write和fsync的时机可以由参数 sync_binlog控制默认是0。为0的时候表示每次提交事务都只会write由系统自行判断什么时候执行fsync。虽然性能得到提升但是机器宕机page cache里面的binlog会丢失。如下图 为了安全起见可以设置为1表示每次提交事务都会执行fsync就如同redo log刷盘流程一样。 最后还有一种折中方式可以设置为NN1,表示每次提交事务都write但累计N个事务后才fsync。 6.2 binlog与redolog对比 redo log 它是物理日志记录内容是“在某个数据页上做了什么修改”属于innodb存储引擎层产生的。 binlog是逻辑日志记录内容是语句的原始逻辑类似于“给ID2这一行的C字段加1”属于mysql server层的。 ~ 虽然他们都数据持久化的保证但是侧重点不同。 1. redo log 让innodb存储引擎拥有了崩溃恢复的能力 2. binlog保证了mysql集群架构数据的一致性 6.3 两阶段提交 在执行更细语句过程会记录redo log与binlog两块日志已基本的事务为单位redo log在事务执行过程中可以不断写入而binlog只有在提交事务时才写入所以redo log与binlog的写入时机不同。 redo log 与binlog两份日志之间的逻辑不一致会出现什么问题 以update语句为例假设id2的记录字段c值时0把字段c值更新成1sql语句为update T set c1 where id2. 假设执行过程中写完redo log日志后binlog日志写期间发生了异常会出现什么情况 由于binlog没写完就异常了这时候binlog里面没有对应的修改记录。因此之后用binlog日志恢复数据时就会少这一次更新恢复出来的这一行c值是0而源库因为redo log日志恢复这一行c值是1最终数据不一致。 为了解决两份日志之间的逻辑一致问题innodb存储引擎使用两阶段提交方案。原理很简单将redo log的写入拆分成两个步骤prepare和commit这就是两阶段提交。 使用两阶段提交后写入binlog时发生异常也不会有影响因为MySQL根据redo log日志恢复数据时发现redo log还处于prepare阶段并且没有对应binlog日志就会回滚该事务。 另一个场景redo log设置commit阶段发生异常那会不会回滚事务呢 并不会回滚事务他会执行上图逻辑虽然redo log是出于prepare阶段但是能通过事务id找到对应的binlog日志所以MySQL认为是完整的就会提交事务恢复数据。 7. 中继日志 7.1 介绍 中继日志只在主从服务器架构的从服务器上存在。从服务器为了与主服务器保持一直要从服务器读取二进制日志的内容并且把读取到的信息写入 本地的日志文件中。这个从服务器本地的日志文件就叫 中继日志。然后从服务器读取中继日志并根据中继日志的内容对从服务器的数据进行更新完成主从服务器的数据同步。 搭建好主从服务器之后中继日志默认会保存在从服务器的数据目录下。 文件名的格式是从服务器名-relay-bin.序号。中继日志还有一个索引文件从服务器名-relay-bin.index 用来定位当前正在使用的中继日志。 7.2 查看中继日志 中继日志查看与二进制日志查看相同可以用mysqlbinlog工具进行查看。 7.3 恢复的典型错误 如果从服务器宕机有的时候为了系统恢复要重装操作系统这样就可能会导致你的 服务器名称 与之前 不同。而中继日志里是 包含从服务器名 的。在这种情况下就可能导致你恢复服务器的时候无法从宕机前的中继日志里读取数据以为是日志文件损坏了其实是名称不对。 解决方法也很简单把从服务器的名称改回之前的名称。
http://www.tj-hxxt.cn/news/138465.html

相关文章:

  • 网站开发语言查询 蔡学镛做网站从什么做起
  • 遵义网约车资格证福州搜索优化行业
  • 建设网站企业网上银行登录入口官方wordpress配置邮件
  • 门户网站建设发展趋势腾度网站建设专家
  • 企业网站建设有名 乐云seo怎么创建企业网站
  • 自己建网站数据怎么做邯郸百度推广代理商
  • 泰州住房城乡建设网站网站后台默认密码
  • 大庆网站建设公司宁波教育平台网站建设
  • 网站建设服务费的税率不是网络营销成熟阶段出现的网络营销方式
  • 上海模板网站制作多少钱工程施工人员招聘网站
  • 如何做自己的电影网站如何确定网站建设 栏目
  • 长沙网站定制建设.net网站开发模板
  • 网站建设方向市场分析分销网站系统
  • vps挂网站cloudflare cdn
  • 学生做网站作品图片在线智能识图
  • 商业网站的创建程序网站导航营销的优势
  • 东阳高端营销型网站建设品牌苏州市建设局老网站
  • 个人网站如何建设网站做宣传域名什么好
  • 接做名片的网站深圳软件开发公司在哪里
  • 网站建设的知识产权归属做贷款的网站
  • 3d动画制作自学教程股票发行ipo和seo是什么意思
  • 做app网站公司关于做好网站建设的通知
  • 电商网站上信息资源的特点包括哪些静态网站挂马
  • 免费推广自己的网站还是网站好
  • 织梦城市门户网站模板找做牙工作上哪个网站
  • 绍兴市科信建设工程检测中心网站胶南网站建设哪家好
  • 一级建造师找工作网站教育网站制作要多少钱
  • 精品课程网站开发关键技术九宫格网站模板
  • 做网站的公司成都做seo必须有网站吗
  • 旅游手机网站建设迁移wordpress到阿里云