53
回答
OSC 第 136 期高手问答 — MySQL 开发和运维规范
华为云数据库免费试用   

OSCHINA 本期高手问答(2016 年 12 月 6 日 — 12 月 13 日)我们请来了@叶金荣@吴炳锡为大家解答 MySQL 开发和运维规范相关的问题。

叶金荣,知数堂培训联合创始人,Oracle MySQL ACE,ACMUG 轮值主席,MySQL 布道师。有多年 MySQL 及系统架构设计经验,擅长 MySQL 企业级应用、数据库设计、优化、故障处理等。

吴炳锡,知数堂联合创始人,MySQL DBA 课程讲师,ACMUG 主席。有多年 MySQL 及系统架构设计及培训教学经验,擅长 MySQL 大规模运维管理优化、高可用方案、多 IDC 架构设计,企业级应用数据库设计等。

MySQL 是一个关系型数据库,也是最受欢迎的一个大规模数据库服务器。它是一款功能丰富的开源产品,许多网站和在线应用程序都使用该数据库。MySQL 的入门相对比较简单,开发者可以从网络上获取到大量与该数据库相关的信息。也正因为它的易用、功能丰富、安全、强大的可扩展性和快速等特性,在开发者的圈子中,它一直都是备受追捧。

MySQL 的入门虽然很简单,但每个用户在使用的时候总会遇到一些问题,也会想知道这样的一个工具是否有一些未曾发现的使用技巧和自己使用时是否有不够规范的地方。又或者是在想如何更好利用这个工具以大大解放生产力,提高工作效率。

本期高手问答我们邀请了@叶金荣@吴炳锡为大家解答 MySQL 开发和运维规范相关问题。那么,关于MySQL 开发和运维规范,有哪些要注意的?看看本期问答内容:

  1. MySQL 在开发中的应用和规范
  2. MySQL 在运维中的应用和规范
  3. MySQL 在运维中的重点和难点
  4. 运维角度的 MySQL 数据库优化(各方面的取舍)
  5. 运维角度的 MySQL 数据库使用技巧
  6. 数据库迁移
  7. MySQL 数据库的兼容性

如果还有其他相关的问题,不妨带着问题进入本期的高手问答 —— MySQL开发和运维规范

OSChina 高手问答一贯的风格,不欢迎任何与主题无关的讨论和喷子。

下面欢迎大家就 MySQL 开发和运维规范方面的问题向@叶金荣@吴炳锡提问,请直接回帖提问,提问的时候请描述清楚具体的场景,以方便回答。

举报
局长
发帖于2年前 53回/9K+阅
共有53个答案 最后回答: 12个月前
@叶金荣 :我是一个刚刚毕业的java开发人员,工作半年多了,对于基本的sql查询我是会的(多表查询,写过几个存储过程,别的就没有深入学习过),但是现在应该如何提高,如何更加深层次的了解MySql,我下一步应该如何学习或者是应该看什么书籍。希望您能可以给出我现阶段的建议。最好是面向我这样的开发人员而不是数据库开发人员。谢谢
--- 共有 5 条评论 ---
ManaStuDent回复 @叶金荣 : 十分感谢。 2年前 回复
叶金荣回复 @猪哥孔明 : 忘了说,不好意思。我的公众号是:老叶茶馆(imysql_wx)。吴老师的公众号是:MySQLBeginer,顺便广告下,也可以来我们知数堂(http://zhishuedu.com)学习MySQL哈 2年前 回复
断-水流弄你的微信号多少?@叶金荣 2年前 回复
叶金荣关注下我公众号,发送“新手”可以获得学习推荐哈 :) 2年前 回复
东方不败123456789搭建集群,整合mycat, 2年前 回复
千万级别表 count(Id)很慢 、ID是主件、如何优化?
--- 共有 1 条评论 ---
wubxCount(id) 慢,估计是因为你的表大,或是没有where条件。 从理论上讲主键的ID肯定不会是Null的,你可以用一个Count(*) 比较一下。 2年前 回复

@叶金荣 :mysql对LBS相关操作的支持怎么样?比如给定一个经纬度,查找附近100m以内的人,100m没有就查1000m,类似这样的操作性能不知如何

@叶金荣 : DDL在5.6以前版本会锁表禁止写入。在5.6版本DDL解决了禁止写入的问题,但是还仍会占用大量时间。似乎是MySQL物理存储设计的问题,同一行数据存储在一文件和多个文件内。
另外DDL 不支持事务回滚(我猜与DDL锁表有关,因为DDL耗时太久没法支持事务)。所以在执行自动化数据库升级脚本时,如果升级失败又执行了DDL,就需要手工处理。


以下是我认为比较显著难解决的问题


1.MySQL如何做好可控的数据库自动脚本升级 ?
2.DDL锁表等问题可以通过减少表尺寸的方式解决,如保持单表小于1000W数据,但这样会使应用很麻烦。你们是如何解决的?
3.是否了解PostgreSQL.相比之下在我看来似乎更优.但目前愿意投入维护方面数据库的人员很少,大多数人喜欢使用MySQL


仅讨论InnoDB

引用来自“ManaStuDent”的评论

@叶金荣 :我是一个刚刚毕业的java开发人员,工作半年多了,对于基本的sql查询我是会的(多表查询,写过几个存储过程,别的就没有深入学习过),但是现在应该如何提高,如何更加深层次的了解MySql,我下一步应该如何学习或者是应该看什么书籍。希望您能可以给出我现阶段的建议。最好是面向我这样的开发人员而不是数据库开发人员。谢谢
对于开发人员,成长路径有可能就是架构师或是更更资深的开发人员。对于MySQL这块需要掌握住的内容:
1. 能编写更优的SQL,理解SQL的执行计划。
2. 去理解使用的存储引擎结构及一些DB的特性在设计Schema方面去使用
3. 了解更多的DB周边的生态,从业务出发,更方便的选型。


这些内容比较散,需要更多的是集累及实际工作不总结及实践。 如果真要推荐点东西,我推荐叶老师的blog : http://imysql.com 

引用来自“神秘的小黑”的评论

@叶金荣 :MYSQL那种高可用方案好用?怎么解决万一从库不同步,怎么补数据?

目前MySQL高可用方案有:

基于复制: 包括传统复制,半同步,改良半同步,GTID复制 以及基于复制的高可用MHA,用于保证数据一致性。(该方案在业界里最成享,使用量最大,当然也是有一定的门槛)在这个方案中如果出现不一致,大多的补救逻辑都在MHA这类的软件里实现。

基于PXC: Percona XtraDB Cluster , 强一致性同步,并发复制(金融相关业务使用比较多,对于一致性强求比较高的环境里使用)  这个属于强一致性结构。 

马上要Release的 Innodb Cluster (新的模型,也可以关注一下)

 总的来说,不管什么结构对于高可用,数据一致性一定要有一个定期数据校验的机制。能发现不一致,然后来处理。 

引用来自“mahengyang”的评论

@叶金荣 :mysql对LBS相关操作的支持怎么样?比如给定一个经纬度,查找附近100m以内的人,100m没有就查1000m,类似这样的操作性能不知如何

这一块目前支持不好。5.7 支持GIS,但不完善,8.0里会有大的改善。 

现在MySQL这块,看着求附近人或是优惠信息,还是比较弱的。 

顶部