精华内容
下载资源
问答
  • 1.访问数据库超时​ 判断故障是不是和访问量有关系 ->排查重点就应该放在服务用户访问的功能上,比如首页,商品列表页,内容推荐等功能​ 如果系统只是在访问量峰值的时候,请求超时,但是随着访问量减少,系统...

    1.访问数据库超时

    ​ 判断故障是不是和访问量有关系 ->排查重点就应该放在服务用户访问的功能上,比如首页,商品列表页,内容推荐等功能

    ​ 如果系统只是在访问量峰值的时候,请求超时,但是随着访问量减少,系统能够自动恢复,可以排除后台服务被大量请求打死的可能性。

    ​ MySQL总CPU利用率高的现象,绝大多数情况是由慢SQL导致的,可以分析慢SQL日志,是查找类似问题原因最有效的方法 ->分析慢SQL日志的时候,首先要找到一个特别慢的SQL

    ​ 对于许多慢SQL,比如排行榜,一定要做缓存。

    ​ 如果CPU利用率,呈周期性,有规律的波动就要考虑定时任务了

    作为开发,我们应该

    ​ 一、在编写SQL的时候,一定小心谨慎仔细评估

    ​ 1.1 、SQL涉及到的表,数据规模是多少

    ​ 1.2、SQL可能会遍历的数据量是多少

    ​ 1.3、尽量避免写出慢SQL

    ​ 二、能不能利用缓存减少数据库查询次数?在使用缓存的时候,特别需要注意的就是缓存命中率,要尽量避免请求命中不了缓存,穿透到数据库。

    ​ 建议:

    ​ 上线一个定时监控和杀掉慢SQL的脚本。这个脚本每分钟执行一次,检测一分钟内,又没有执行时间超过一分钟的慢SQL,如果有,直接杀掉

    ​ 做一个简单的静态页面的首页作为降级方案。请求超时的时候返回这个静态页面,暂时降级。避免写出慢SQL

    ​ 一般一台MySQL服务器,平均每秒钟执行的SQL数量在几百左右,就已经算非常繁忙得了。

    ​ 在编写一条查询语句的时候,可以根据要查询数据表的数据总量,估算一下这条查询大致需要遍历多少行数据。

    ​ a、使用索引避免全表扫描

    ​ 虽然索引能够有效减少执行查询时遍历数据的行数,提高查询性能,但是代价就是会降低数据插入,删除和更新的性能。所以,对于更新频繁并且对于性能要求高的表,尽量少建索引。对于查询多的表,多建索引。

    ​ b、对于复杂的查询,最好分析SQL执行计划

    ​ 使用EXPLAIN关键字执行查询语句SQL是如何在数据库中执行的

    ​ 数据库的服务端,可以划分为执行器和存储引擎两部分。执行器负责解析SQL执行查询,存储引擎负责保存数据。

    4.使用缓存保护MySQL

    ​ Redis可以作为MYSQL的前置缓存,可以替MySQL抵挡大部分查询请求,很大程度上环节MySQL并发请求的压力

    ​ a.更新缓存的最佳方式

    ​ Redis是一个使用内存保护数据的高性能的KV数据库,高性能主要在于

    ​ 1.简单的数据结构

    ​ 2.使用内存存储数据

    ​ 内存是一种易失性存储,所以牺牲了大部分功能,牺牲了数据可靠性,换取了高性能。

    ​ 虽然Redis支持将数据持久化到磁盘,并且支持主从复制,但是仍然是一个不可靠的存储,设计上就天然不保证数据的可靠性。所以我们使用Redis的时候,就要兼容Redis丢数据的情况,做到即使Redis发生了丢数据,也不影响数据准确性。

    ​ 可以使用Cache Aside模式更新缓存,可以非常有效避免并发读写导致的脏数据问题。

    5.读写分离

    ​ 读写分离是提升MySQL并发的首选方案

    ​ 读写分离中数据库应对的绝大部分请求都是只读查询请求,并且实施起来简单,把使用单机MySQL的系统升级为读写分离的多实例,只需要简单修改DAO代码,把对数据库的读写请求分开,请求不同的MYSQL实例就可以了

    ​ 怎么实施MYSQL的读写分离方案

    ​ 1.部署一主多从多个MYSQL实例,并让他们之间保持数据实时同步

    ​ 2.分离应用程序对数据库的读写请求,分别发送到从库和主库

    分离应用程序的读写请求方法有下面这三种(查看官网分档):

    ​ 纯手工方式:修改应用程序的 DAO 层代码,定义读写两个数据源,指定每一个数据库请求的数据源。

    ​ 组件方式:也可以使用像 Sharding-JDBC 这种集成在应用中的第三方组件来实现,这些组件集成在你的应用程序内,代理应用程序的所有数据库请求,自动把请求路由到对应数据库实例上。

    ​ 代理方式:在应用程序和数据库实例之间部署一组数据库代理实例,比如说 Atlas 或者 MaxScale。对应用程序来说,数据库代理把自己伪装成一个单节点的 MySQL 实例,应用程序的所有数据库请求被发送给代理,代理分离读写请求,然后转发给对应的数据库实例。

    ​ 读写分离的副作用:

    ​ 可能存在数据不一致的情况

    ​ 主从同步延迟会导致主库和从库之间出现数据不一致的情况,我们的应用程序应该能兼容主从延迟,避免因为主从延迟而导致的数据错误。规避这个问题最关键的一点是,我们在设计系统的业务流程时,尽量不要在更新数据之后立即去查询更新后的数据。

    6.MySQL主从数据库同步

    ​ 当客户端提交一个事务到 MySQL 的集群,直到客户端收到集群返回成功响应,在这个过程中,MySQL 集群需要执行很多操作:主库需要提交事务、更新存储引擎中的数据、把 Binlog 写到磁盘上、给客户端返回响应、把 Binlog 复制到所有从库上、每个从库需要把复制过来的 Binlog 写到暂存日志中、回放这个 Binlog、更新存储引擎中的数据、给主库返回复制成功的响应。

    ​ 性能最好的方法是异步复制,主节点上先记录操作日志,再更新状态数据,然后异步把操作日志复制到所有从节点上,并在从节点执行操作日志,得到和主节点相同的状态数据。

    ​ 异步复制的劣势是,可能存在主从延迟,如果主节点宕机,可能会丢数据。另外一种常用的策略是半同步复制,主节点等待操作日志最少成功复制到 N 个从节点上之后,再更新状态,这种方式在性能、高可用和数据可靠性几个方面都比较平衡,很多分布式存储系统默认采用的都是这种方式。

    7.订单数据变多,数据库变慢怎么办

    ​ 查询耗费的时间主要在两个因素

    ​ 1.查找的时间复杂度

    ​ 2.数据总量

    ​ a.存档历史记录数据提高查询性能

    ​ 当单表的订单数据太多,多到影响性能的时候,首选方案是,归档历史订单(就是把大量的历史订单移到另外一张历史订单表中)

    ​ 大致流程

    ![image-20200802104900478](/Users/zhaoyu/Library/Application Support/typora-user-images/image-20200802104900478.png)

    ​ 1.首先创建一个和订单表结构一模一样的历史订单表

    ​ 2.把订单表中的历史数据分批查出来,插入到历史订单表中

    ​ 3.测试和上线支持历史订单表的新版本代码,查看是否有BUG,看是否需要回滚

    ​ 4.等新版本代码上线并验证无误之后,就可以删除订单表中的历史订单数据了

    ​ 5.上线一个定期迁移数据的程序或者脚本,定期吧过期订单从订单表搬到历史订单表中(迁移之前一定做好备份)

    ​ b.如何批量删除大量数据(一定要做好备份)

    select max(id) from orders

    where timestamp < SUBDATE(CURDATE(),INTERVAL 3 month);

    delete from orders

    where id <= ?

    order by id limit 1000;

    ​ 只需要先通过一次查询,找到符合条件的历史订单中最大的那个订单ID,然后在删除语句中吧删除条件换成主键删除,就不同每次都是时间戳上找符合条件的记录

    ​ 加order by主要就是为了B+ 树的数据结构,这样删除更加快一点

    ​ 对于平凡插入删除大量数据的这种表,如果能接受锁表,定期执行OPTIMIZE TABLE是非常有必要的。

    8.分库分表

    ​ 如何规划分库分表:能不拆就不拆,能少拆就不多拆

    ​ 分库分表的目的主要解决两个问题

    ​ 1.数据量太大查询慢的问题。解决查询慢,只要减少每次查询的数据总量就可以了,也就是,分表就可以解决问题

    ​ 2.应对高并发的问题,一个数据库实例撑不住,就把并发请求分散到多个实例中去,所以,解决高炳达的问题需要分库

    概括就是数据量大就分表,高并发就分库

    ​ 如何选择 sharding key? ​ 这是分表的依据,选择要考虑的因素取决于业务如何访问数据,让查询尽量落到一个分片中。如果分片无法兼容查询,可以把数据同步到其他存储中,供查询

    ​ 常见的分片算法 ​ 1.范围分片 ​ 对查询友好,适合并发量不大的场景。但容易产生热点数据 ​ 2.哈希分片 ​ 比较均匀 ​ 3.查表法 ​ 灵活,性能差因为多了一次查表

    展开全文
  • 我按照这篇文章做到了第五步,然后就显示正“在恢复数据库,请等待恢复操作完成。” http://blog.csdn.net/giraffe_zj/article/details/7377898 并且在消息的最下面有个黄色的感叹号显示“查询已完成,但有错误”。...
  • 业务大促,订单暴增,网站流量暴涨几倍,数据库服务器容量又要扛不住了,眼睁睁看着...华为云数据库MySQL 在读写性能、扩容能力、备份恢复功能、故障容忍能力等方面有着显著的优化提升,提供了高吞吐量和并发性,可...

    业务大促,订单暴增,网站流量暴涨几倍,数据库服务器容量又要扛不住了,眼睁睁看着生意白白溜走,再苦逼也无法解决,“肿”么办?

    别担心,一键开通读写分离,而且只需一个连接地址,就能让您无忧应对业务促销高峰,帮您在节日大促中轻松“躺赢”。

    怎么样?是不是超Easy!赶快来get一下吧。

    华为云数据库MySQL 在读写性能、扩容能力、备份恢复功能、故障容忍能力等方面有着显著的优化提升,提供了高吞吐量和并发性,可以通过快速的响应时间来支持大量的连接。目前,MySQL新增了一键开通读写分离功能,专业应对企业业务高峰情景,助力企业业务升级。

    9dd87c4e6813dcf3d8c0442096b530fa.png

    华为云数据库MySQL一键读写分离功能操作便捷,易上手的同时并提供了权重设置的自由,灵活方便。

    1.功能入口

    华为云数据库MySQL实例配置限制少,门槛低,只要您拥有主备实例4U8G以上,+1个只读实例即可免费开通读写分离功能,如图1所示。

    04f9d352bf7a7e4356a0c76cda583cf5.png

    应用程序可直接连接图2的读写分离地址,即可快速实现读写分离访问,简单又高效,轻松又省心。

    56e4c3e11e96594cb240b6868b694811.png

    2.设置权重

    MySQL读写分离功能提供自动设置和手动设置两种方式。一般情况下,系统将根据您的实例规格容量,设置默认只读权重来分发流量比例(如图3默认的权重值为300:200),您也可以根据实际业务情况自定义设置只读权重。

    b073e3f0cf3f6c474d6f045ef768afe6.png

    华为云数据库MySQL在线扩展只读负载,一键规格变更实现CPU&内存扩容/缩容,在线存储容量扩容,具有强扩容高性能的优势。当前,华为云数据库一键开通读写分离后,还可以快速弹性扩展,几分钟便可完成只读实例添加,且最多可以增加10个,轻松应对各类高峰场景,助力企业业务创新升级。

    重磅活动推荐——2019华为全联接大会

    2019华为全联接大会,将于今年9月18日至9月20日在上海世博中心隆重举办,届时会有多位业界大神莅临现场。在这里你不仅可以与名企大咖零距离交流,更能现场围观各个开发者的竞技PK,机遇难得,不可错过!目前,华为全联接大会的限量早鸟票已开售,早鸟票价格低至150元,学生更是享受惊爆价99元!

    即刻加入华为全联接大会,与我们一起共创智能新高度!

    购票路径:PC端进入华为云官网,点击最新活动,下拉到底—其他活动—TaurusDB大赛—立即加入—HC大会购票;Ps:或关注“HW云数据库”微信公众号,进入华为云数据库专享通道,注册华为全联接大会账号,尊享HC大会早鸟票,买一赠一,先到先得。购票后在后台留言,私信购票截图,即可获赠赠票专属***,赠票为开发者票。

    展开全文
  • --日志文件出现问题(丢失或文件格式非法),怎么使数据库恢复正常--如果用sp_attach_single_file TEST,C:/Program Files/Microsoft SQL Server/MSSQL...将置疑的数据库分离,将mdf文件移走或改名!sp_detach_db TEST 
    --日志文件出现问题(丢失或文件格式非法),怎么使数据库恢复正常
    --如果用sp_attach_single_file 'TEST','C:/Program Files/Microsoft SQL Server/MSSQL/Data/test_log.mdf' 失败则需要用下列步骤完成
     
    --1.将置疑的数据库分离,将mdf文件移走或改名!
    sp_detach_db 'TEST'
     
    --2.重新在原来目录下建立同名的数据库TEST
    --3.停掉SQL Service,将先前的mdf文件拷贝回来覆盖(或改名),删除原来的log文件(或改名)
    --4.启动SQL Service(否则下面的语句没办法运行)
    --5.将数据库设成紧急模式(status=32768)
    sp_configure 'allow updates',1
    reconfigure with override
    update sysdatabases set status=32768 where name='TEST'
    --重新建立日志文件
    dbcc rebuild_log('test','C:/Program Files/Microsoft SQL Server/MSSQL/Data/test_log.ldf')
    Go
     
    展开全文
  • 数据库日志文件超级大,在重装系统的时候,为了省事,就没有备份日志文件,而且是没有分离就把日志文件给删掉了(下次一定要记得先分离再删日志文件)。结果造成数据库怎么都附加不上。出现错误。 解决办法: 1、...

    数据库日志文件超级大,在重装系统的时候,为了省事,就没有备份日志文件,而且是没有分离就把日志文件给删掉了(下次一定要记得先分离再删日志文件)。结果造成数据库怎么都附加不上。出现错误。

    解决办法:

    1、新建一个同名数据库。

    2、停止数据库服务,覆盖新建的数据库主文件(小技巧:最好放在同一个磁盘里面,把新建的数据库主文件删掉或移开,再把要恢复的数据库主文件剪切过去,这样就可以节省时间。)

    3、启动数据库服务,数据库变为置疑或可疑状态。然后在查询分析器中运行:

    alter database 无日志文件的数据库名称 set emergency

    设置为紧急状态。

    4、再运行:

    alter database 无日志文件的数据库名称 set single_user

    或者:

    Sp_dboption '无日志文件的数据库名称', 'single user', 'true'

    设置为单用户模式。

    5、检查并重建日志文件,运行:

    dbcc checkdb('无日志文件的数据库名称',REPAIR_ALLOW_DATA_LOSS)

    这个时间比较长。耐心等待!如果有错误提示,再运行:

    dbcc checkdb('无日志文件的数据库名称',REPAIR_REBUILD)

    进行修复。如果没有错误,可以跳过。

    6、恢复成多用户模式

    alter database 无日志文件的数据库名称 set multi_user

    或者:

    Sp_dboption '无日志文件的数据库名称', 'single user', 'false'

    刷新数据库,你就可以看到已经修复好的数据库了。

    我是如此修复,至于网上还有很多修复方法,我试过,没有成功。通过多方组合得到这个方法。可能也不是数据库的每一个版本都适用,如果你用过后,不行,希望能留言,让我们能共同讨论,共同进步!




    本文转自 freeterman 51CTO博客,原文链接:http://blog.51cto.com/myunix/1095076,如需转载请自行联系原作者

    展开全文
  • 附加分离数据库 第章一致性和并发性 事务相关语句 事务的开始 事务的结束 保存点相关语句 设置事务隔离级及读写特性 手动上锁语句 第章存储模块 存储模块的定义 存储模块的删除 存储模块的控制语句 ...
  • 书中内容主要集中在大多数企业常见的问题之上,如安装和升级到oracle database 11g数据库软件、创建数据库、导出和导入数据、数据库的备份与恢复、性能调优,等等。  本书还提供了dba完成本职工作必备的基本的uniix...
  • 公司网站运营两年多了,日志文件超级大,在重装系统的时候,...2、停止数据库服务,覆盖新建的数据库主文件(小技巧:最好放在同一个磁盘里面,把新建的数据库主文件删掉或移开,再把要恢复数据库主文件剪切过去,...
  • 公司网站运营两年多了,日志文件超级大,在重装系统...2、停止数据库服务,覆盖新建的数据库主文件(小技巧:最好放在同一个磁盘里面,把新建的数据库主文件删掉或移开,再把要恢复数据库主文件剪切过去,这样就可...
  • 公司网站运营两年多了,日志文件超级大,在重...2、停止数据库服务,覆盖新建的数据库主文件(小技巧:最好放在同一个磁盘里面,把新建的数据库主文件删掉或移开,再把要恢复数据库主文件剪切过去,这样就可以节省...
  • 数据库是为suspect(质疑) 的处理办法

    千次阅读 2006-06-27 16:32:00
    解决办法: --日志文件出现问题(丢失或文件格式非法),怎么使数据库恢复正常--如果用sp_attach_single_file TEST,C:/Program Files/Microsoft SQL Server/...将置疑的数据库分离,将mdf文件移走或改名!sp_detach_db
  • 技术原理为什么?...从数据库通过I/O线程去请求主数据库的binlog日志文件(二进制日志,包含SQL的增删改查等,用来做备份恢复等),并写到中继日志中,SQL线程会读取中继日志,并解析成具体操作同步数据到...
  • 数据库从一个服务器转移到另外一个服务器,怎么转?你可以用一分钟遇见一个人,用一小时了解一个人,用一天爱上一个人,但是你却要用一辈子忘记一个人。分离,附加?还是备份、还原?具体过程是什么?有什么要注意的...
  • 只有mdf文件的数据库附加

    千次阅读 2006-12-05 15:11:00
    前几天,由于我的一个数据库的日志文件过大,于是我把它分离下来,删掉日志文件,打算再附加上去。以前我这样做过,系统会自动生成一个新的日志文件,可是这次却怎么也不行了,不知道是不是因为在2003下SQL SERVER打...
  • MySql读写分离实现

    2019-09-30 15:02:25
    技术原理 为什么?  进行中的项目,有大量的第三方数据频繁的...从数据库通过I/O线程去请求主数据库的binlog日志文件(二进制日志,包含SQL的增删改查等,用来做备份恢复等),并写到中继日志中,SQL线程会读取中...
  • 1、复制是什么? 即主从复制,主机数据更新后根据配置和策略,自动同步到备机的master/...其能够进行:读写分离+容灾恢复 2、怎么使用复制? (1)配从(库)不配主(库) (2)从库配置:slaveof 主库IP 主库...
  • 技术原理为什么?...从数据库通过I/O线程去请求主数据库的binlog日志文件(二进制日志,包含SQL的增删改查等,用来做备份恢复等),并写到中继日志中,SQL线程会读取中继日志,并解析成具体操作同步数据到...
  • 那好吧,读这篇文章的人好帅啊!...双主的情况MySQL 备份及恢复方案备份单个及多个数据库mysqldump 的常用参数如何增量恢复呢?增量恢复的必要条件生产环境 mysqldump 备份命令恢复喽   一、MySQL主从复制
  • MySQL基础篇

    2020-09-15 13:44:50
    1_MySQL基础篇MySQL 基础 ...数据库的备份恢复、主备复制、读写分离(类似负载均衡,减少单台服务器的压力)、高可用(单点故障)、分布式数据库数据库集群技术、性能优化、自动化; 数据的存储方式: 人
  • Redis的复制(Master/Slave)

    2021-02-17 15:27:45
    读写分离 容灾恢复 怎么用 配从(库)不配主(库) Info replication 查看当前redis 信息 从库配置: 命令: slaveof 主库IP 主库端口 SLAVEOF no one 使当前数据库停止与其他数据库的同步,转成主数据库 每次与master...
  • 文章目录前言MySQL面试题如何成为一个数据库DBA总结 ...MySQL数据恢复怎么做的? MySQL主从有几种方式 MySQL读写分离用的什么工具 MySQL高可用怎么做的? 除了MySQL你还接触过哪些数据库软件? 阐述
  • 第四步:登录后台后进入 扩展管理》数据库恢复》选择最后一个版本备份的数据库文件进行恢复。完了。 安装完成后需要恢复数据库,更新缓存,前端才会写入之前备份的资料到数据里面!要不前端会报错,因为新安装的...
  • 和传统的 t-sql书籍不同,本书以独特的 “技巧 ”形式来介绍知识点,涵盖了数据处理(增删改、视图、索引、存储过程、触发器等)、数据应用(web服务、 clr集成、分布式查询等)和数据库配置(主体、安全、数据库...
  • 精通Oracle PL/SQL--详细书签版

    热门讨论 2012-08-21 13:06:28
     对于oracle技术人员而言,怎么强调掌握pl/sql的重要性都不过分。但是,真正精通pl/sql绝非易事。事实上,在现有的oracle应用程序中充斥着太多质量不佳的pl/sql代码,它们要么没有充分利用oracle特有的功能,要么是...

空空如也

空空如也

1 2
收藏数 39
精华内容 15
关键字:

数据库分离怎么恢复