mysql主从记录

一,主从的工作原理

master-slave
master-slave
    1. master将改变记录到二进制日志(binary log)中(这些记录叫做二进制日志事件,binary log events), Slave根据本机的master.info文件中记录的Master的日志文件名程和具体位置,通过IO进程连接上Master并请求从指定日志文件的指定位置(或者从最开始的日志)之后的日志内容;
    1. Master接收到来自Slave的IO进程的请求后,通过负责复制的IO进程根据请求信息读取制定日志指定位置之后的日志信息,返回给Slave 的IO进程。返回信息中除了日志所包含的信息之外,还包括本次返回的信息已经到Master端的bin-log文件的名称以及bin-log的位置;
    1. slave将master的binary log events拷贝到它的中继日志(relay log);
    1. slave中的sql进程发现relay-log日志有改动后,根据relay.info中的relay位置,从relay-log的该位置开始重做中继日志中的事件,将sql语句在本地数据库执行。
[root@service mysql]# cat relay-log.info
./service-relay-bin.000002
3007731 ------------->代表relay-log文件执行的位置
mysql-bin.000008----->代表远程master端binlog
338489392----------->执行到远程master端binlog的具体位置
[root@service mysql]# cat master.info
18
mysql-bin.000008-->代表远程master端binlog
338493827--------->执行到远程master端binlog的具体位置
192.168.15.15----->远程master端ip
username---------->远程master端mysql的replication用户名
userpassword----->远程master端mysql的replication密码
3306------------->远程master端mysql端口

二,使用中遇到的问题

  • 公司采用 A:主-> B:从(blackhole)->C:从 架构;
  • 12月1日运维重启了一下C机,过了一周后12月8号发现,A机的数据已经一周没有同步到C机了,去C机器一看:
slave status\G
无任何信息
  • 于是想到在C机主动连接B,先登录B机:
mysql> show master status;
+-------------------+----------+--------------+------------------+
| File              | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+-------------------+----------+--------------+------------------+
| mysql-bin.000008 | 338242604 |              |                  |
+-------------------+----------+--------------+------------------+
  • 然后登录C
CHANGE MASTER TO MASTER_HOST='B',
    -> MASTER_USER='repl',
    -> MASTER_PASSWORD='p4ssword',
    -> MASTER_LOG_FILE='mysql-bin.000008',
    -> MASTER_LOG_POS=338242604;
START SLAVE;
  • 原本以为问题解决了,可是又一想从12.1到12.8这7天的数据并没有同步到C机,但是此时已经过去几分钟了,赶快执行
STOP SLAVE
  • 后来仔细回忆主从原理,在C机的master.info文件中会保存最后一次请求B的binlog文件和位置,重启C后,会在对应目录自动生成master.info_bak文件,于是查看C机的master.info_bak
[root@service mysql]# cat master.info_bak 
18
mysql-bin.000008
335481914
192.168.15.15
repl
p4ssword
3306

可以看到12.1最后连接B的位置是335481914,而我们刚刚start slave的点是 338242604, 两个点有差异,本以为在 start slave 到stop slave 之间在A机会有用户操作产生很多数据, 如果此时在C上从335481914开始请求担心会和刚刚同步的数据有冲突;

  • 于是想到查看
mysqlbinlog service-relay-bin.000002 > /tmp/relay.sql
cat /tmp/relay.sql
151202 12:02:40 server id 1  end_log_pos 335482146     Query   thread_id=281429        exec_time=4294964863    error_code=0
use ljyun_754_merchant/*!*/;
SET TIMESTAMP=1449028960/*!*/;
INSERT INTO role (role_name, role_leader) VALUES (店长, 0)

可以看到在servicw-relay-bin.000002 中会记录在C上start slave 和stop slave 之间的所有C机数据库的操作, 查看对应end_log_pos 335482146到B机的master的位置,根据该文件位置及具体的sql的分析,与master.info文件的对比判断从start 到 stop之间C机的所有数据库操作,然后确定只有一条数据产生,原本根据位置的加减判断有200条数据产生,最后分析binglog中的end_log_pos 335482146 并不是以1为单位累加的,所以不要以binlog中的位置差判断数据记录的数量

  • 最后可以放心的从12.1那天的断点开始从C上发起请求,登录C:
mysql> CHANGE MASTER TO MASTER_HOST='B',
    -> MASTER_USER='repl',
    -> MASTER_PASSWORD='p4ssword',
    -> MASTER_LOG_FILE='mysql-bin.000008',
    -> MASTER_LOG_POS=335481914;
mysql> START SLAVE;
mysql> show slave status\G
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.15.15
                  Master_User: repl
                  Master_Port: 3306
                Connect_Retry: 0
              Master_Log_File: mysql-bin.000008-->远程master端binlog文件名
          Read_Master_Log_Pos: 338500476----->执行到master的binlog位置
               Relay_Log_File: service-relay-bin.000002-->relay-log文件名
                Relay_Log_Pos: 3018815-->本地执行到relay-log的位置
        Relay_Master_Log_File: mysql-bin.000008
             Slave_IO_Running: Yes------------>slave向master发起请求的io进程,正常=Yes 异常=No
            Slave_SQL_Running: Yes---------->slave在本地执行sql的sql进程,正常=Yes 异常=No
              Replicate_Do_DB: 
          Replicate_Ignore_DB: mysql
           Replicate_Do_Table: 
       Replicate_Ignore_Table: 
      Replicate_Wild_Do_Table: 
  Replicate_Wild_Ignore_Table: 
                   Last_Errno: 0
                   Last_Error: 
                 Skip_Counter: 0
          Exec_Master_Log_Pos: 338500476
              Relay_Log_Space: 3018973
              Until_Condition: None
               Until_Log_File: 
                Until_Log_Pos: 0
           Master_SSL_Allowed: No
           Master_SSL_CA_File: oduct w
           Master_SSL_CA_Path: 
              Master_SSL_Cert: 
            Master_SSL_Cipher: 
               Master_SSL_Key: 
        Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
                Last_IO_Errno: 0
                Last_IO_Error: 
               Last_SQL_Errno: 0
               Last_SQL_Error: 
  Replicate_Ignore_Server_Ids: 
             Master_Server_Id: 4
1 row in set (0.00 sec)

总结:mysql在赋值的时候,insert语句虽然在binlog中没有主键,但是根据本次事故的观察,insert操作是在真实数据库操作的时候,却与A机保持一致;比如有t1表为空表,则:

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

推荐阅读更多精彩内容

  • 一、什么是Mysql主从复制 MySQL主从复制是其最重要的功能之一。主从复制是指一台服务器充当主数据库服务器,另...
    人在码途阅读 2,744评论 0 23
  • 又看了一遍恶作剧之吻! 以前看不懂直树计划要去服兵役顺便留在那个地方当医生一年多湘琴哭得那么厉害,那么不舍。现在谈...
    静默等你阅读 249评论 0 0
  • 感恩今早小宝陪我跑步与吃早餐,回家以后把ip的密码告诉我,还把我的指纹识别信息输进去,敞开了心扉的大门,感恩宝贝的...
    今天的心情好阅读 131评论 0 0
  • 昨天读到简书作者傻狍子写的文章《我所亲历的穷学生思维》。其中,作者写到一种思维“用时间换钱,不懂得用钱换时间”。很...
    _SSharon阅读 418评论 0 1
  • 听了你的话,我仿佛受了审判,无比委屈,又无从分辨,在离开前,我想问,那真的是你的意思吗? 在自我辩护前,在带着痛苦...
    点滴辉光阅读 158评论 0 0