mysql_主从复制的实现

<h2>背景:</h2>
在如今的互联网时代,高并发、大数据都已经成为其中最热的之一。mysql不可能像redis一样单台机器每秒最多能处理10W次读写,也达不到elasticsearch一样存储上亿几十亿数据做过滤或者简单的聚合能在50-100ms以内成功响应。但是据我所知在中国一些互联网排名前十的公司的产品、订单这种关键数据还是存储在mysql中,更不要说mysql在一些更小的公司的应用,mysql重要性不言而喻。从这一讲会开始我的mysql文章之路。
现在经常有个词能听到"读写分离",是的读写分离可以降低单点机器的并发访问压力。从而实现主机器专门用于写入,另外的一个从节点或者多个从节点来实现读。
<h2>复制实现原理</h2>
下面贴出来其实现流程图:

Paste_Image.png

分为同步复制和异步复制,实际复制架构中大部分为异步复制。 复制的基本过程如下:

(1)、Slave上面的IO进程连接上Master,并请求从指定日志文件的指定位置(或者从最开始的日志)之后的日志内容;

(2)、Master接收到来自Slave的IO进程的请求后,通过负责复制的IO进程根据请求信息读取制定日志指定位置之后的日志信息,返回给Slave 的IO进程。返回信息中除了日志所包含的信息之外,还包括本次返回的信息已经到Master端的bin-log文件的名称以及bin-log的位置;

(3)、Slave的IO进程接收到信息后,将接收到的日志内容依次添加到Slave端的relay-log文件的最末端,并将读取到的Master端的 bin-log的文件名和位置记录到master-info文件中,以便在下一次读取的时候能够清楚的告诉Master“我需要从某个bin-log的哪个位置开始往后的日志内容,请发给我”;

(4)、Slave的Sql进程检测到relay-log中新增加了内容后,会马上解析relay-log的内容成为在Master端真实执行时候的那些可执行的内容,并在自身执行。

其实稍微了解mysql底层一点的都知道,mysql的更新记录都可以配置保存在binlog文件中,这个文件用处很大,有一个比较大的应用就是有些公司开发监听binlog变化的插件,再结合消息中间件来实现数据变更实时通知订阅方。当然这次我们要讲的还是slave机器怎么样实现对于master机器的主从。
<h4>主从复制的配置</h4>
准备前提:
<ul>
<li>安装两个虚拟机 master:192.168.30.128 slave:192.168.30.131</li>
<li>分别在两台机器上面安装mysql,具体的流程可以参照我之前写的http://www.jianshu.com/p/674f56b2fe56</li>
</ul>
当你上面两步都做完了以后我想你已经都把mysql 服务给起来了吧,接下来我们需要配置mysql的binlog信息。
<b>1、找到my.cnf文件。按我之前介绍的文章安装的话是在/etc/my.cnf下面,具体是在原来的文件里面新加三个参数:</b>
<pre>
server-id=128 #设置服务器唯一的id,默认是1,我们设置ip最后一段,slave设置131
log-bin=mysql-bin # 启用二进制日志
binlog-ignore-db = mysql,information_schema #忽略写入binlog的库,因为这些都不是我们关心的自己创建的业务库
</pre>
具体的修改如下:

123.png

完成以后重启service mysqld start master上面的mysql服务
<b>2、master机器binlog配置好了以后还需要给slave机器授权IO读取它啊,登录mysql -u root -proot以后执行命令如下:</b>
<pre>
GRANT REPLICATION SLAVE ON . to 'sync'@'192.168.30.131' identified by 'root'; //新建一个sync用户密码为root给slave机器使用。后面salve机器配置会使用到
</pre>
具体的修改如下:

给slave机器复制binlog权限.png

同时也可以通过show master status 命令查看binlog信息:
<pre>
mysql> show master status;
+------------------+----------+--------------+--------------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+--------------------------+
| mysql-bin.000001 | 259 | | mysql,information_schema |
+------------------+----------+--------------+--------------------------+
</pre>
看情况binlog文件名称+position数据,因为这给后面在salve机器上配置连接master机器有用到。
<b>3、配置slvae机器,直接上命令吧:</b>
<pre>
change master to
master_host='192.168.30.128', //master的ip
master_user='sync', //master授予的用户名称
master_password='root', //密码
master_log_file='mysql-bin.000001', //master的binlog名称
master_log_pos=259;//位置
</pre>
别忘记了重启slave机器,再用mysql> show slave status \G查看执行结果:

Paste_Image.png

<b>4、测试最后的复制结果</b>
<pre>
1、master机器:
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| master_slave |
| mysql |
| storm_test |
| test |
| test12 |
+--------------------+
6 rows in set (0.00 sec)
2、slave机器:
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| master_slave |
| mysql |
| test |
+--------------------+
4 rows in set (0.00 sec)
3、在master机器上新建test_copy数据库
mysql> create database test_copy;
Query OK, 1 row affected (0.00 sec)

mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| master_slave |
| mysql |
| storm_test |
| test |
| test12 |
| test_copy | //新建数据库
+--------------------+
7 rows in set (0.01 sec)
4、查看salve机器结果:
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| master_slave |
| mysql |
| test |
| test_copy | //复制成功
+--------------------+
5 rows in set (0.00 sec)
</pre>
是的这样的话主从复制已经实现了,简单。下一节文章主要是讲使用mysql-proxy代理来实现读写分离。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,029评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,395评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,570评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,535评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,650评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,850评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,006评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,747评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,207评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,536评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,683评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,342评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,964评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,772评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,004评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,401评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,566评论 2 349

推荐阅读更多精彩内容

  • 一、什么是Mysql主从复制 MySQL主从复制是其最重要的功能之一。主从复制是指一台服务器充当主数据库服务器,另...
    人在码途阅读 2,744评论 0 23
  • 1、复制概述: MySQL内建的复制功能是构建大型,高性能应用程序的基础。将mysql的数据分布到多个系统上去,这...
    魔法师_阅读 5,591评论 0 5
  • 昨日,阔别家乡一年之久的老弟带着他女朋友从成都风尘仆仆地回到家乡。在接他们回来的路上,我们相谈甚欢,忆离别的思念...
    宁博Villa阅读 599评论 2 5
  • 问题 第一个项目中UI设计师给的psd图字体单位是像素(px),而且通常是整数;做第二个项目时,发现字体的单位是点...
    回调的幸福时光阅读 5,594评论 0 0
  • 牙一痛,我们就以为是上火,毕竟在外面吃多了热气东西的情况经常有。在一个饥饿的下着大雨的下班晚上,打包了一份烧鸭鸭脚...
    洁99阅读 232评论 0 0