实践: http://shiyanjun.cn/archives/584.html

操作系统环境:CentOS5.5

1.MySQL 主从流程图

2.MySQL 主从说明

a.主服务器一定要开启二进制日志文件.

b.MySQL使用3个线程来执行复制功能(其中1个在主服务器上,另两个在从服务器上。当发出START SLAVE时,从服务器创建一个I/O线程,以连接主服务器并让它发送记录在其二进制日志中的语句。主服务器创建一个线程将二进制日志中的内容发送到从服务器。该线程可以识别为主服务器上SHOW PROCESSLIST的输出中的Binlog Dump线程。从服务器I/O线程读取主服务器Binlog Dump线程发送的内容并将该数据拷贝到从服务器数据目录中的本地文件中,即中继日志。第3个线程是SQL线程,是从服务器创建用于读取中继日志并执行日志中包含的更新。

3.主机信息

mysql(主):192.168.96.12

mysql(备):192.168.96.2

4.在主机跟备机上安装mysql

这里使用的是mysql5.5的源码安装.

具体安装过程请查看《CentOS5.5下源码安装mysql5.5

地址:http://blog.csdn.net/m582445672/article/details/7649999

5.配置主机上的my.cnf文件.

[mysqld]

server-id       =  1          #  服务的唯一标识符

log-bin=mysql-bin      # 开启二进制日志,默认路径在data/下

binlog_format=mixed  # 二进制文件的格式

# 这里有3种格式

# binlog_format=statement      将主库输入的SQL语句,直接写入二进制文件中

# binlog_format=row                将主库修改的行写入二进制文件中

# binlog_format=mixed             以上二种的混合模式

# 在不同二进制格式下,对存储过程,函数,触发器,事件的数据复制可以参考

mysql5.5 主从复制 (触发器,函数,存储引擎,事件处理)说明

# 地址:http://blog.csdn.net/m582445672/article/details/7670802

#============下面参数,在本次实验中,不配置========================================

replicate-do-db = test                                         # 需要复制的数据库         (在这个试验中,我不用这个参数)

replicate-ignore-db = mysq                               # 不需要复制的数据库     (在这个试验中,我不用这个参数)

replicate-ignore-db = information_schema  # 不需要复制的数据库      (在这个试验中,我不用这个参数)

# 不使用replicate-do-db,replicate-ignore-db参数就代表全库都复制

# ====================================================================================

启动mysql(主)

6.在主库上面添加一个复制帐号.

GRANT REPLICATION SLAVE on *.* to 'mark'@'%' identified by 'mark' WITH GRANT OPTION;

7.配置备机的my.cnf文件

server-id  =  2       # 修改成2.

启动mysql( 备 )

#====下面只做讲解,不包含在本次实验中 ======================================

当然,备机上也能开启二进制文件.但在默认情况下.主库复制过来的数据不会写入备库的二进制文件中.

所以如果想A-->B-->C这样的复制.必须有logs-slave-updates = 1

[mysqld]

log-bin=mysql-bin

binlog_format=mixed 
   logs-slave-updates = 1

# ======================================================================

8.备机连接主机

a.先查看当前主机二进制的位置

mysql>show master status;

b.在备机上执行命令连接主机

mysql> change master to master_host="192.168.96.12", master_port=3306, master_user="mark", master_password="mark", master_log_file="mysql-bin.000004", master_log_pos=107 , master_connect_retry=10;

c.备机上启动IO线程和SQL线程

mysql>start slave;

d.在备机上查看主从状态

mysql>show slave status\G

9.测试主从复制

在主机上创建一个alex的数据库.

主机:

备机:

到这里,主从配置完成

10.主从复制几个非常重要的文件

a.master.info

用于记录连接到哪个服务器,账号和密码
       还有记录复制到主服务器的哪个二进制文件和复制到二进制文件的哪个位置
       从服务器的IO线程会先把所有的从主服务复制过来的数据全部都放到relay-log.info里面。
       并且记录复制到的位置.IO线程只管复制

其余的行可以去看官方文档,上面有详细的介绍

b.relay-log.info

这个是在从服务器的中续日志,记录了写了多少数据到从服务里面.
       ./ip_lb-relay-bin.000002                       # 中继日志的位置
       336                                                           # 复制到哪一行
       mysql_bin.000004                                #这个中继日志中对应主服务器2进制的log的文件名
       190                                                           # 对应的位置

特别注意,这里的如果复制到某一句有错,之后的二进制SQL就不会在继续复制了
       这里的mysql_bin.000004  190 会在中继日志中有记录的.
       SQL线程读取中序日志里面的信息,由relay-log.info信息记录.

11.从服务器复制信息

mysql> show slave status\G

[plain] view plain copy
  1. *************************** 1. row ***************************
  2. Slave_IO_State: Waiting for master to send event   # IO的线程的状态
  3. Master_Host: 192.168.96.12   # 链接主服务器的IP
  4. Master_User: mark    # 主服务器用户名
  5. Master_Port: 3306   # 主服务器密码
  6. Connect_Retry: 10     # 主从断开后,多少秒重新链接
  7. Master_Log_File: mysql-bin.000004  # 从服务器I/O 线程当前读取的主服务器二进制日志文件的名字
  8. Read_Master_Log_Pos: 190    # 从服务器I/O 线程从当前的主服务器二进制日志中读取的位置起点。
  9. Relay_Log_File: ip_lb-relay-bin.000002   # 从服务器SQL 线程当前读取并执行的中继日志文件的名字
  10. Relay_Log_Pos: 336       # 从服务器SQL 线程当前从中继日志中读取执行的位置起点。
  11. Relay_Master_Log_File: mysql-bin.000004    # 从服务器中的SQL进程中正在执行的语句的位置
  12. Slave_IO_Running: Yes     # 从服务器的IO线程运行是否开启
  13. Slave_SQL_Running: Yes    # 从服务器的SQL线程运行是否开启
  14. Replicate_Do_DB:    # 主从复制的数据库名
  15. Replicate_Ignore_DB:   #  主从不需要复制的数据库名
  16. Replicate_Do_Table:     # 主从复制的表
  17. Replicate_Ignore_Table:     # 主从不需要复制的表
  18. Replicate_Wild_Do_Table:   # 可以跨库复制的表
  19. Replicate_Wild_Ignore_Table:   # 不能跨库复制的表
  20. Last_Errno: 0    # 最后复制的错误号...0表示没有错误
  21. Last_Error:        # 最后复制的错误信息
  22. Skip_Counter: 0    # 最近被使用的用于SQL_SLAVE_SKIP_COUNTER的值。(这个值表示跳过多少个事件在来执行SQL)
  23. Exec_Master_Log_Pos: 190    # SQL线程执行到主服务器log-bin文件的位置.如果这个值与Read_Master_Log_Pos一样.则可以证明
  24. Relay_Log_Space: 492       # 所有原有的中继日志结合起来的总大小。
  25. Until_Condition: None      # 在START SLAVE语句的UNTIL子句中指定的值
  26. Until_Log_File:                 # 在START SLAVE语句的UNTIL子句中指定的值
  27. Until_Log_Pos: 0             # 在START SLAVE语句的UNTIL子句中指定的值
  28. Master_SSL_Allowed: No    # 这些字段显示了被从属服务器使用的参数。这些参数用于连接主服务器。
  29. Master_SSL_CA_File:
  30. Master_SSL_CA_Path:
  31. Master_SSL_Cert:
  32. Master_SSL_Cipher:
  33. Master_SSL_Key:
  34. Seconds_Behind_Master: 0    # 本字段是从属服务器“落后”多少的一个指示。当从属SQL线程正在运行时(处理更新),
  35. # 本字段为在主服务器上由此线程执行的最近的一个事件的时间标记开始,已经过的秒数。
  36. # 当此线程被从属服务器I/O线程赶上,并进入闲置状态,等待来自I/O线程的更多的事件时,本字段为零。
  37. # 总之,本字段测量从属服务器SQL线程和从属服务器I/O线程之间的时间差距,单位以秒计。
  38. # 如果主服务器和从属服务器之间的网络连接较快,则从属服务器I/O线程会非常接近主服务器,
  39. # 所以本字段能够十分近似地指示,从属服务器SQL线程比主服务器落后多少。
  40. # 如果网络较慢,则这种指示不准确;从属SQL线程经常会赶上读取速度较慢地从属服务器I/O线程,
  41. # 因此,Seconds_Behind_Master经常显示值为0。即使I/O线程落后于主服务器时,也是如此。
  42. # 换句话说,本列只对速度快的网络有用。
  43. # 即使主服务器和从属服务器不具有相同的时钟,时间差计算也会起作用(当从属服务器I/O线程启动时,计算                                                                        # 时间差。并假定从此时以后,时间差保持不变)。
  44. # 如果从属SQL线程不运行,或者如果从属服务器I/O线程不运行或未与主服务器连接,
  45. # 则Seconds_Behind_Master为NULL(意义为“未知”)。
  46. # 举例说明,如果在重新连接之前,从属服务器I/O线程休眠了master-connect-retry秒,则显示NULL,
  47. # 因为从属服务器不知道主服务器正在做什么,也不能有把握地说落后多少。
  48. Master_SSL_Verify_Server_Cert: No
  49. Last_IO_Errno: 0
  50. Last_IO_Error:
  51. Last_SQL_Errno: 0
  52. Last_SQL_Error:
  53. Replicate_Ignore_Server_Ids:
  54. Master_Server_Id: 1
  55. 1 row in set (0.00 sec)

mysql主从复制 详解的更多相关文章

  1. MySQL 主从复制详解

    读写分离的意思是,写入的时候向 a 服务器写入,而读出的时候从 b c d 甚至更多的服务器读出:这样的架构适合于读多写少的应用,最典型的就是火车购票系统,一般我们买票的时候要先查询好多次,包括车次啊 ...

  2. mysql主从复制详解

    http://blog.csdn.net/hguisu/article/details/7325124

  3. MySQL配置文件详解

    MYSQL 配置文件详解 “全局缓存”.“线程缓存”,全局缓存是所有线程共享,线程缓存是每个线程连接上数据时创建一个线程(如果没有设置线程池),假如有200连接.那就是200个线程,如果参数设定值是1 ...

  4. MySQL系列详解八:MySQL多线程复制演示-技术流ken

    前言 Mysql 采用多线程进行复制是从 Mysql 5.6 开始支持的内容,但是 5.6 版本下有缺陷,虽然支持多线程,但是每个数据库只能一个线程,也就是说如果我们只有一个数据库,则主从复制时也只有 ...

  5. MySQL Binlog详解

    MySQL Binlog详解 Mysql的binlog日志作用是用来记录mysql内部增删改查等对mysql数据库有更新的内容的记录(对数据库的改动),对数据库的查询select或show等不会被bi ...

  6. MySQL 数据类型 详解

    MySQL 数据类型 详解 MySQL 的数值数据类型可以大致划分为两个类别,一个是整数,另一个是浮点数或小数.许多不同的子类型对这些类别中的每一个都是可用的,每个子类型支持不同大小的数据,并且 My ...

  7. mysql存储过程详解

    mysql存储过程详解 1.      存储过程简介   我们常用的操作数据库语言SQL语句在执行的时候需要要先编译,然后执行,而存储过程(Stored Procedure)是一组为了完成特定功能的S ...

  8. mysql 存储过程详解 存储过程

    mysql存储过程详解 1.      存储过程简介         我们常用的操作数据库语言SQL语句在执行的时候需要要先编译,然后执行,而存储过程(Stored Procedure)是一组为了完成 ...

  9. MySQL存储过程详解 mysql 存储过程

    原文地址:MySQL存储过程详解  mysql 存储过程作者:王者佳暮 mysql存储过程详解 1.     存储过程简介 我们常用的操作数据库语言SQL语句在执行的时候需要要先编译,然后执行,而存储 ...

随机推荐

  1. socket.io 实例

    //引用 var io = require('socket.io')(server);   //server io.on('connection', function(socket) {     // ...

  2. 【SPOJ839】最优标号

    [题目描述] 给你一张无向图G(V,E).每个顶点都有一个标号,它是一个[0,2^31-1]内的整数.不同的顶点可能会有相同的标号. 对每条边(u,v),我们定义其费用cost(u,v)为u的标号与v ...

  3. PHP http(file_get_content) GET与POST请求方式

    1.GET方式请求 <?php $data = array('sParam1'=>'test1','sParam2'=>101,'isAuto'=>1); //定义参数 $da ...

  4. windows下实现uboot的tftp下载功能

    一.原理分析 带有uboot的开发板实际上充当的就是tftp客户端,而PC机扮演的角色就是tftp服务器端,而tftp下载功能实际上就是文件传输.tftp服务器可以建立在虚拟机linux下,也可以建立 ...

  5. C# 改变图片尺寸(压缩),Image Resize

    /// <summary> /// Resize image with a directory as source /// </summary> /// <param n ...

  6. 转:PHP超时处理全面总结

    原文来自于:http://wulijun.github.io/2012/08/08/php-timeout-summary.html 概述 在PHP开发工作里非常多使用到超时处理的场合,我说几个场景: ...

  7. 【译】UI设计基础(UI Design Basics)--启动与停止(Starting and Stopping)(五)

    2.4  启动与停止(Starting and Stopping) 2.4.1  立即启动(Start Instantly) 通常来讲,用户不会花超过两分钟的时候去评价一个新的应用.在这段有限的时间里 ...

  8. N.O.W,O.R,N.E.V.E.R--12days to LNOI2015

    双向链表 单调队列,双端队列 单调栈 堆 带权并查集 hash 表 双hash 树状数组 线段树合并 平衡树 Treap 随机平衡二叉树 Scapegoat Tree 替罪羊树 朝鲜树 块状数组,块状 ...

  9. Yaroslav and Divisors

    Codeforces Round #182 (Div. 1) D:http://codeforces.com/contest/301/problem/D 题意:给一个1-n,n个数的序列,然后查询一个 ...

  10. 协程coroutine

    协程(coroutine)顾名思义就是“协作的例程”(co-operative routines).跟具有操作系统概念的线程不一样,协程是在用户空间利用程序语言的语法语义就能实现逻辑上类似多任务的编程 ...