分库分表

分库分表

  1. 为什么要分库分表?
  • 超大容量问题
  • 性能问题
  1. 如何去做到
  • 垂直切分
    ①垂直分库; 解决的是表过多的问题
    ②垂直分表; 解决单表列过多的问题
  • 水平切分
    大数据表拆成小表
  1. 常见的拆分策略
  • 垂直切分
    分片技术
  • 水平切分
    ①一致性hash
    ②范围切分 可以按照ID
    ③日期拆分
  1. 拆分以后带来的问题
  • 跨库join的问题
    ①设计的时候考虑到应用层的join问题。
    ②在服务层去做调用;
    A服务里查询到一个list
    bservice.select(list);
    ③全局表
    数据变更比较少的基于全局应用的表
    ④做字段冗余(空间换时间的做法)
    订单表。 商家id 商家名称
    商家名称变更- 定时任务、任务通知
  • 唯一主键问题
    ①用自增id做主键
    ②UUID 性能比较低
    ③snowflake
    ④mongoDB
    ⑤zookeeper
    ⑥数据库表
  • 分布式事务问题
    多个数据库表之间保证原子性 性能问题; 互联网公司用强一致性分布式事务比较少

Mysql的主从

  • 数据库的版本5.7版本
  • 安装以后文件对应的目录
    mysql的数据文件和二进制文件: /var/lib/mysql/
    mysql的配置文件: /etc/my.cnf
    mysql的日志文件: /var/log/mysql.log
  • 152 为master
    ①创建一个用户’repl’,并且允许其他服务器可以通过该用户远程访问master,通过该用户去读取二进制数据,实现数据同步
    Create user repl identified by ‘repl; repl用户必须具有REPLICATION SLAVE权限,除此之外其他权限都不需要
    GRANT REPLICATION SLAVE ON *.* TO ‘repl’@’%’ IDENTIFIED BY ‘repl’;
    ②修改140 my.cnf配置文件,在[mysqld] 下添加如下配置
    log-bin=mysql-bin //启用二进制日志文件
    server-id=130 //服务器唯一ID
    ③重启数据库 systemctl restart mysqld
    ④登录到数据库,通过show master status 查看master的状态信息
  • 153 为slave
    ①修改142 my.cnf配置文件, 在[mysqld]下增加如下配置
    server-id=132 //服务器id,唯一
    relay-log=slave-relay-bin
    relay-log-index=slave-relay-bin.index
    read_only=1
    ②重启数据库: systemctl restart mysqld
    ③连接到数据库客户端,通过如下命令建立同步连接
    change master to master_host=’192.168.100.152’, master_port=3306,master_user=’repl’,master_password=’repl’,master_log_file=’mysql-bin.000001’,master_log_pos=0;
    master_log_filemaster_log_pos从master的show master status可以找到对应的值,不能随便写。
    ④执行 start slave
    ⑤show slave status\G;查看slave服务器状态,当如下两个线程状态为yes,表示主从复制配置成功
    Slave_IO_Running=Yes
    Slave_SQL_Running=Yes

主从同步的原理

①master记录二进制日志。在每个事务更新数据完成之前,master在二日志记录这些改变。MySQL将事务串行的写入二进制日志,即使事务中的语句都是交叉执行的。在事件写入二进制日志完成后,master通知存储引擎提交事务
②slave将master的binary log拷贝到它自己的中继日志。首先,slave开始一个工作线程——I/O线程。I/O线程在master上打开一个普通的连接,然后开始binlog dump process。Binlog dump process从master的二进制日志中读取事件,如果已经跟上master,它会睡眠并等待master产生新的事件。I/O线程将这些事件写入中继日志
③SQL线程从中继日志读取事件,并重放其中的事件而更新slave的数据,使其与master中的数据一致

  • binlog
    用来记录mysql的数据更新或者潜在更新(update xxx where id=x effect row 0);
    文件内容存储:/var/lib/mysql
    mysqlbinlog --base64-output=decode-rows -v mysql-bin.000001 //查看binlog的内容
  • binlog的格式
    ①statement : 基于sql语句的模式。update table set name =””; effect row 1000; uuid、now() other function
    ②row: 基于行模式; 存在1000条数据变更; 记录修改以后每一条记录变化的值
    ③mixed: 混合模式,由mysql自动判断处理
    修改binlog_formater,通过在mysql客户端输入如下命令可以修改
    set global binlog_format=’row/mixed/statement’;
    或者在vim /etc/my.cnf 的[mysqld]下增加binlog_format=‘mixed’
  • 主从同步的延时问题
    ①当master库tps比较高的时候,产生的DDL数量超过slave一个sql线程所能承受的范围,或者slave的大型query语句产生锁等待
    ②网络传输: bin文件的传输延迟
    ③磁盘的读写耗时:文件通知更新、磁盘读取延迟、磁盘写入延迟
  • 解决方案
    ①在数据库和应用层增加缓存处理,优先从缓存中读取数据
    ②减少slave同步延迟,可以修改slave库sync_binlog属性;
    sync_binlog=0 文件系统来调度把binlog_cache刷新到磁盘
    sync_binlog=n
    ③增加延时监控
    Nagios做网络监控
    mk-heartbeat
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,830评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,992评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,875评论 0 331
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,837评论 1 271
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,734评论 5 360
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,091评论 1 277
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,550评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,217评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,368评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,298评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,350评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,027评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,623评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,706评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,940评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,349评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,936评论 2 341

推荐阅读更多精彩内容