免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: arron刘
打印 上一主题 下一主题

MySQL数据库主从同步加速话题讨论!欢迎大家踊跃参加!(获奖名单已公布-2013-11-13) [复制链接]

论坛徽章:
71
15-16赛季CBA联赛之同曦
日期:2018-08-23 15:41:42辰龙
日期:2014-08-15 09:07:43狮子座
日期:2014-06-03 13:55:33亥猪
日期:2014-06-02 11:17:08巨蟹座
日期:2014-05-06 10:02:03午马
日期:2014-05-04 08:18:27亥猪
日期:2014-04-29 11:11:32技术图书徽章
日期:2014-04-24 15:51:26技术图书徽章
日期:2014-04-17 11:01:53辰龙
日期:2014-04-15 12:45:46亥猪
日期:2014-04-11 09:06:23射手座
日期:2014-04-01 15:28:10
11 [报告]
发表于 2013-10-26 17:21 |只看该作者
Mysql加载速度太慢了

论坛徽章:
0
12 [报告]
发表于 2013-10-27 01:25 |只看该作者
本帖最后由 weizhulinux 于 2013-10-27 01:31 编辑

mysql主从同步原理
主库针对写操作,顺序写binlog,从库单线程去主库顺序读"写操作的binlog",从库取到binlog在本地原样执行(随机写),来保证主从数据逻辑上一致。

mysql主从同步延迟原理
首要原因:数据库在业务上读写压力太大,CPU计算负荷大,网卡负荷大,硬盘随机IO太高
次要原因:读写binlog带来的性能影响,网络传输延迟。

MySQL主从同步延迟解决方案
架构方面
1.业务的持久化层的实现采用分库架构,mysql服务可平行扩展,分散压力。
2.单个库读写分离,一主多从,主写从读,分散压力。这样从库压力比主库高,保护主库。
3.服务的基础架构在业务和mysql之间加入memcache或者redis的cache层。降低mysql的读压力。
4.不同业务的mysql物理上放在不同机器,分散压力。
总结,mysql压力小,延迟自然会变小。
硬件方面
1.采用好服务器,比如4u比2u性能明显好,2u比1u性能明显好。
2.存储用ssd或者盘阵或者san,提升随机写的性能。
3.主从间保证处在同一个交换机下面,并且是万兆环境。
总结,硬件强劲,延迟自然会变小。
一句话,缩小延迟的解决方案就是花钱和花时间。

论坛徽章:
3
季节之章:冬
日期:2015-01-15 10:36:57IT运维版块每日发帖之星
日期:2015-09-24 06:20:00IT运维版块每日发帖之星
日期:2015-10-24 06:20:00
13 [报告]
发表于 2013-10-28 08:08 |只看该作者
转蚊子的博客内容,有个人消化部分,谢谢了。
http://wxy021.blog.163.com/blog/static/170618669201298102732747/

1. MySQL数据库主从同步延迟原理。
要说延时原理,得从mysql的数据库主从复制原理说起,mysql的主从复制都是单线程的操作,
主库对所有DDL和DML产生binlog,binlog是顺序写,所以效率很高,slave的Slave_IO_Running线程到主库取日志,效率很比较高,下一步,问题来了,slave的Slave_SQL_Running线程将主库的DDL和DML操作在slave实施。DML和DDL的IO操作是随即的,不是顺序的,成本高很多,还可能可slave上的其他查询产生lock争用,由于Slave_SQL_Running也是单线程的,所以一个DDL卡主了,需要执行10分钟,那么所有之后的DDL会等待这个DDL执行完才会继续执行,这就导致了延时。有朋友会问:“主库上那个相同的DDL也需要执行10分,为什么slave会延时?”,答案是master可以并发,Slave_SQL_Running线程却不可以。
2. MySQL数据库主从同步延迟是怎么产生的。
当主库的TPS并发较高时,产生的DDL数量超过slave一个sql线程所能承受的范围,那么延时就产生了,当然还有就是可能与slave的大型query语句产生了锁等待。
3. MySQL数据库主从同步延迟解决方案。
丁奇的transefer是一个不错的方案,不过一般公司受限于对mysql的代码修改能力的限制和对mysql的掌控能力,还是不太适合。
最简单的减少slave同步延时的方案就是在架构上做优化,尽量让主库的DDL快速执行。还有就是主库是写,对数据安全性较高,比如sync_binlog=1,innodb_flush_log_at_trx_commit = 1 之类的设置,而slave则不需要这么高的数据安全,完全可以讲sync_binlog设置为0或者关闭binlog,innodb_flushlog也可以设置为0来提高sql的执行效率。另外就是使用比主库更好的硬件设备作为slave。
mysql-5.6.3已经支持了多线程的主从复制。原理和丁奇的类似,丁奇的是以表做多线程,oracle使用的是以数据库(schema)为单位做多线程,不同的库可以使用不同的复制线程。
sync_binlog=1 o
     This makes MySQL synchronize the binary log’s contents to disk each time it commits a transaction
     默认情况下,并不是每次写入时都将binlog与硬盘同步。因此如果操作系统或机器(不仅仅是MySQL服务器)崩溃,有可能binlog中最后的语句丢 失了。要想防止这种情况,你可以使用sync_binlog全局变量(1是最安全的值,但也是最慢的),使binlog在每N次binlog写入后与硬盘 同步。即使sync_binlog设置为1,出现崩溃时,也有可能表内容和binlog内容之间存在不一致性。如果使用InnoDB表,MySQL服务器 处理COMMIT语句,它将整个事务写入binlog并将事务提交到InnoDB中。如果在两次操作之间出现崩溃,重启时,事务被InnoDB回滚,但仍 然存在binlog中。可以用--innodb-safe-binlog选项来增加InnoDB表内容和binlog之间的一致性。(注释:在MySQL 5.1中不需要--innodb-safe-binlog;由于引入了XA事务支持,该选项作废了),该选项可以提供更大程度的安全,使每个事务的 binlog(sync_binlog =1)和(默认情况为真)InnoDB日志与硬盘同步,该选项的效果是崩溃后重启时,在滚回事务后,MySQL服务器从binlog剪切回滚的 InnoDB事务。这样可以确保binlog反馈InnoDB表的确切数据等,并使从服务器保持与主服务器保持同步(不接收 回滚的语句)。
innodb_flush_log_at_trx_commit (这个很管用)
抱怨Innodb比MyISAM慢 100倍?那么你大概是忘了调整这个值。默认值1的意思是每一次事务提交或事务外的指令都需要把日志写入(flush)硬盘,这是很费时的。特别是使用电 池供电缓存(Battery backed up cache)时。设成2对于很多运用,特别是从MyISAM表转过来的是可以的,它的意思是不写入硬盘而是写入系统缓存。日志仍然会每秒flush到硬 盘,所以你一般不会丢失超过1-2秒的更新。设成0会更快一点,但安全方面比较差,即使MySQL挂了也可能会丢失事务的数据。而值2只会在整个操作系统 挂了时才可能丢数据。

论坛徽章:
5
技术图书徽章
日期:2013-08-27 10:03:49CU大牛徽章
日期:2013-09-18 15:16:55CU大牛徽章
日期:2013-09-18 15:18:22CU大牛徽章
日期:2013-09-18 15:18:43技术图书徽章
日期:2014-04-24 15:51:26
14 [报告]
发表于 2013-10-28 11:41 |只看该作者
mysql主从架构生来就是异步的,主要看这个异步是否异得太离谱。

论坛徽章:
93
2015年辞旧岁徽章
日期:2019-10-10 10:51:15CU大牛徽章
日期:2014-02-21 14:21:56CU十二周年纪念徽章
日期:2020-10-15 16:55:55CU大牛徽章
日期:2014-02-21 14:22:07羊年新春福章
日期:2019-10-10 10:51:39CU大牛徽章
日期:2019-10-10 10:55:38季节之章:春
日期:2020-10-15 16:57:40ChinaUnix元老
日期:2019-10-10 10:54:42季节之章:冬
日期:2019-10-10 10:57:17CU大牛徽章
日期:2014-02-21 14:22:52CU大牛徽章
日期:2014-03-13 10:40:30CU大牛徽章
日期:2014-02-21 14:23:15
15 [报告]
发表于 2013-10-28 15:09 |只看该作者
根据同步原理:主生成binlog->传输到从->从加载入库,这三个步骤任何一个产生的延迟就是主从同步的延迟啦,主生成binlog的速度、主机将binlog写入硬盘的速度、传输到从机的网格速度、从机接收binlog写到硬盘文件的速度、从机载入binlog的速度,这些都会影响嘛。在不改变结构和没有使用新技术的情况下,相应的处理就是提高硬盘读写速度和网络速度吧,没有实际处理过,凑个热闹。

论坛徽章:
3
CU十二周年纪念徽章
日期:2013-10-24 15:41:34双子座
日期:2014-03-02 00:11:39fulanqi
日期:2016-06-17 17:54:25
16 [报告]
发表于 2013-10-28 22:52 |只看该作者
fengzhanhai 发表于 2013-10-24 13:08
mysql数据主从之间的数据同步延迟问题的产生的根本原因是mysql数据库同步的原理导致的,从根本上无法解决该 ...


说得挺好。

论坛徽章:
10
CU大牛徽章
日期:2013-05-20 10:44:54数据库技术版块每日发帖之星
日期:2015-06-09 22:20:00IT运维版块每日发帖之星
日期:2015-06-05 22:20:00亥猪
日期:2014-08-23 14:52:27摩羯座
日期:2013-11-29 18:02:31CU十二周年纪念徽章
日期:2013-10-24 15:41:34CU大牛徽章
日期:2013-05-20 10:45:31CU大牛徽章
日期:2013-05-20 10:45:24CU大牛徽章
日期:2013-05-20 10:45:13综合交流区版块每日发帖之星
日期:2016-02-12 06:20:00
17 [报告]
发表于 2013-10-29 13:00 |只看该作者
回复 16# chszs 呵呵,过奖了~其实如果是涉及到企业的关键业务不建议使用mysql的的这种方案来提高系统的并发与鲁棒性~如果涉及到用户现金交易业务还是极力推荐oracle或者是db2数据等企业级数据库,因为企业不仅要为自己负责更要向用户负责,用户无法接受今天我存到你公司100W人民币到了明天你的系统瘫痪了,数据丢失了,我的钱就没了~


   

论坛徽章:
6
未羊
日期:2013-11-15 09:12:28狮子座
日期:2013-12-10 10:10:54技术图书徽章
日期:2014-01-09 17:41:45技术图书徽章
日期:2014-01-09 17:42:04技术图书徽章
日期:2014-01-09 17:42:5215-16赛季CBA联赛之广夏
日期:2018-01-10 15:17:38
18 [报告]
发表于 2013-10-29 16:32 |只看该作者
回复 10# action08

我也觉得是呢,数据库的也不算太厉害,我也来献言献策嘿~~


   

论坛徽章:
1
2015年迎新春徽章
日期:2015-03-04 10:01:44
19 [报告]
发表于 2013-10-30 08:30 |只看该作者
你们都好厉害啊

论坛徽章:
6
未羊
日期:2013-11-15 09:12:28狮子座
日期:2013-12-10 10:10:54技术图书徽章
日期:2014-01-09 17:41:45技术图书徽章
日期:2014-01-09 17:42:04技术图书徽章
日期:2014-01-09 17:42:5215-16赛季CBA联赛之广夏
日期:2018-01-10 15:17:38
20 [报告]
发表于 2013-10-30 12:22 |只看该作者
回复 17# fengzhanhai

我表示赞成,其实MysqL在纯商业中的运用,至少在IO并发量很多的行业中,不多用,主要的还是DB2,IBM的御用,小机买了附送很多时候,Oracle则是因为本身的很多后台优化方案,sybase的用处也很少。


   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP