`
victorwmh
  • 浏览: 207788 次
  • 性别: Icon_minigender_1
  • 来自: 宇宙
社区版块
存档分类
最新评论

Mysql的Replication读写分离

阅读更多

Mysql的Replication原理:
    Mysql的Replication是一个异步的复制过程,从一个Mysql instace(我们称之为Master)复制到另一个Mysql instance(我们称之Slave)。在Master与Slave之间的实现整个复制过程主要由三个线程来完成,其中两个线程Sql线程和IO线程)在Slave端,另外一个线程(IO 线程)在Master端。   
    要实现MySQL的Replication ,首先必须打开Master 端的Binary Log(mysqlbin.xxxxxx)功能,否则无法实现。因为整个复制过程实际上就是Slave从Master端获取该日志然后再在自己身上完全顺序的执行日志中所记录的各种操作。打开MySQL的Binary Log可以通过在启动MySQL Server的过程中使用“—log-bin” 参数选项,或者在my.cnf配置文件中的mysqld 参数组([mysqld]标识后的参数部分)增加“log-bin”参数项。
    Mysql具体Replication过程,可以参见《MySQL性能优化与架构设计》一书的第13.2节。

Mysql的安装:
    CentOS5.5 + Mysql5.0.22 + IP 192.168.1.200 (Master)
    CentOS5.5 + Mysql5.0.22 + IP 192.168.1.241 (Slave)
   
    # groupadd mysql
    # useradd -g mysql mysql

    # tar –zvxf mysql-standard-5.0.22-linux-i686-glibc23.tar.gz
    # mv mysql-standard-5.0.22-linux-i686-glibc23 /usr/local/mysql

    # cd /usr/local/mysql
    # chown –R root /usr/local/mysql
    # chgrp –R mysql /usr/local/mysql
    # chown –R mysql /usr/local/mysql/data
    # cp /usr/local/mysql/support-files/my-medium.cnf /etc/my.cnf
    # /usr/local/mysql/scripts/mysql_install_db --user=mysql
    # /usr/local/mysql/bin/mysqld_safe &

    # ps –ef |grep mysql 看看mysql是否启动

Mysql的Replication相关设置:

    启动mysql数据库
    # /usr/local/mysql/bin/mysqld_safe --user=mysql &
    设置读锁
    mysql> flush tables with read lock;
    解锁
    mysql> unlock tables;
    查看log-bin日志文件名和偏移量
    mysql> show master status;

    Master中的设置:

    1、建立Replication账号
    mysql> GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.1.241' IDENTIFIED BY 'repl';
    建立Slave从Master复制日志时使用的账号。
   
    2、修改my.cnf设置(/etc/my.cnf)
    server-id  = 1
    log-bin    = mysql-bin
    设置主服务器的Id,并开启log-bin二进制日志文件。
   
    #binlog-do-db=需要备份的数据库名,可写多行
    #binlog-ignore-db=不需要备份的数据库名,可写多行
      
    3、重启mysql

    Slave中的设置:
   
    1、修改my.cnf设置(/etc/my.cnf)

    修改服务Id:
    server-id  = 1
    修改为
    server-id  = 2

    设置Master信息
    master-host     =   192.168.1.200
    master-user     =   repl
    master-password =   repl
    master-port     =  3306

    #replicate-do-db=test 需要备份的数据库名
    #replicate-ignore-db=mysql 忽略的数据库
    #master-connect-retry=60 如果从服务器发现主服务器断掉,重新连接的时间差(秒)

    2、重启mysql
   
    3、在mysql配置表中设置Master信息:
    注:如果在my.cnf中未设置Master信息,也可以在mysql提示符下输入如下语句进行设置:
    mysql> change master to
    -> master_host=’192.168.1.200′ 
    -> master_user=’repl’ 
    -> master_password=’repl’ 
    -> master_log_file=’mysql-bin.000001′ 
    -> master_log_pos=106;

    4、启动slave中的Replication
    mysql> start slave;


Replication设置检查:
   
    查看启动的slave进程:
    mysql> show processlist\G;
    *************************** 2. row *************************** 
    Id: 2 
    User: system user 
    Host: 
    db: NULL 
    Command: Connect 
    Time: 2579 
    State: Has read all relay log; waiting for the slave I/O thread to update it
    Info: NULL
    *************************** 3. row *************************** 
    注:Info: NULL表示slave已经连接上master,开始接受并执行日志

    查看slave进程状态:
    mysql> show slave status;
    Slave_IO_Running: Yes 
    Slave_SQL_Running: Yes
    检查Slave_IO_Running与Slave_SQL_Running的值,如果均为Yes,说明配置成功。


Replication设置测试:

    在Master服务器上
    mysql> create database repl_test;
    mysql> use repl_test;
    mysql> create table member(id int, username varchar(16), password varchar(32));

    在Slave服务器上
    mysql> show databases;
    mysql> use repl_test;
    mysql> show tables member;

Replication常见问题:

    1、由于各种原因,导致主从数据不一致,在负载低的时候,进行手动同步.

    在主服务器上执行
    mysql>flush tables with read lock; 
    Query OK,rows affected (0.01 sec) 
    mysql>show master status; 
    +——————+———-+————–+——————+ 
    | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | 
    +——————+———-+————–+——————+ 
    | mysql-bin.0000011 | 260| | | 
    +——————+———-+————–+——————+

    在从服务器上执行
    先得到当前主服务器的二进制文件名和偏移量,执行命令使从服务器与主服务器同步
    mysql>select master_pos_wait(‘mysql-bin.0000011′,’260′); 
    +————————————————–+ 
    | master_pos_wait(‘mysql-bin.0000011′,’260′) | 
    +————————————————–+ 
    | 0 | 
    +————————————————–+ 
    1 row in set (0.01 sec)

    同步完成后,在主服务器上执行解锁
    mysql>unlock tables;

    2、切换主从服务器
    当主服务器出现故障时,可将从服务器当主服务器来使用.

    保证所有从数据库都已经执行了relay log中的全部更新,在从服务器中执行stop slave io_thread,用show processlist检查,查看状态是否是Has read all relay log,表示更新完成.

    mysql>stop slave io_thread; 
    Query OK,0 affected (0.00 sec) 
    mysql>show processlist\G; 
    *************************** 2. row *************************** 
    Id: 2 
    User: system user 
    Host: 
    db: NULL 
    Command: Connect 
    Time: 4757 
    State: Has read all relay log; waiting for the slave I/O thread to update it 
    Info: NULL

    在从服务器上执行stop slave,reset master命令,重置成主数据库

    mysql>stop slave; 
    Query OK,0 affected (0.00 sec) 
    mysql>reset master; 
    Query OK,0 affected (0.00 sec)

    删除新的主服务器数据库目录中的master.info和relay-log.info文件,否则下次重启时还会按照从服务器来启动.

参考文章:http://database.51cto.com/art/201009/223213.htm

分享到:
评论

相关推荐

    MySQL 读写分离实例详解

    MySQL 读写分离 MySQL读写分离又一好办法 使用 com.mysql.jdbc.ReplicationDriver 在用过Amoeba 和 Cobar,还有dbware 等读写分离组件后,今天我的一个好朋友跟我讲,MySQL自身的也是可以读写分离的,因为他们提供了...

    mysql读写分离实现.doc

    内容概要:废话不多说哦,本资源以实战为主,在本次实战中,应用程序client基于c3p0...通过本次案例实战,掌握mysql读写分离的基本原理和实战操作手法,结合案例的代码和配置,能快速轻松上手的解决读写分离的问题。

    MySQL5.6 Replication主从复制(读写分离) 配置完整版

    MySQL5.6主从复制(读写分离)教程 1、MySQL5.6开始主从复制有两种方式: 基于日志(binlog); 基于GTID(全局事务标示符)。 需要注意的是:GTID方式不支持临时表!所以如果你的业务系统要用到临时表的话就不要考虑...

    mysql replication 配置(主从复制读写分离)

    此文档包括怎样在liunx下搭建主从重复读写分离的全过程,及其中遇到问题及处理方法。完善搭建mysql数据库集群。

    mysql读写分离实现

    在本次实战中,应用程序client基于c3p0连接后端的database proxy。database proxy负责管理client实际访问database的路由策略,采用开源框架amoeba。database集群采用mysql的master-slave的replication方案。

    MySQL双主多从读写分离自动化安装

    采用MySQL Replication+ MySQL Proxy+Heartbeat实现MySQL读写分离HA 双Master都安装MySQL Proxy和Heartbeat(也可以单独安装MySQL Proxy,Heartbeat跟MySQL Proxy装在一起),多个Slave跟每个Master进行多主单从...

    MySQL Replication 主从复制全方位解决方案

    一步步教你建立MySQL主备机搭建。 应用场景1:从服务器作为主服务器的实时数据备份 应用场景2:主从服务器实现读写分离,从服务器实现负载均衡 应用场景3:把多个从服务器根据业务重要性进行拆分访问

    Node.js Sequelize如何实现数据库的读写分离

    使用较多的数据库优化方案是:通过主从复制(Master-Slave)的方式来同步数据,再通过读写分离(MySQL-Proxy)来提升数据库的并发负载能力。 1. replication选项与读写分离 Sequelize 支持读/写分离,要实现读/写分离...

    MySQL主从复制与读写分离原理及用法详解

    本文实例讲述了MySQL主从复制与读写分离原理及用法。分享给大家供大家参考,具体如下: 主从复制 概念 影响MySQL-A数据库的操作,在数据库执行后,都会写入本地的日志系统A中。 假设,实时的将变化了的日志系统中的...

    atlas+lvs+keepalived mysql多主复制负载均衡搭建

    基于mysql的负载均衡有很多种方式,如haproxy,前面一篇博客有...而多主架构是不需要读写分离的(如果是基于mysql replication的就需要atlas做负载均衡了),但为了测试atlas能不能用lvs做负载均衡,就顺便做了下实验。

    完整版 MySQL8.0从入门到精通 MySQL数据库教程 全套PPT课件资源集合 共26个章节 含全部源代码.rar

    完整版 MySQL8.0从入门到精通 MySQL数据库教程 第20章 读写分离的利器-MySQL Proxy(共8页).ppt 完整版 MySQL8.0从入门到精通 MySQL数据库教程 第21章 精通MySQL存储引擎(共31页).ppt 完整版 MySQL8.0从入门到...

    完整版 MySQL8.0从入门到精通 MySQL数据库教程 第11章 视图(共20页).ppt

    完整版 MySQL8.0从入门到精通 MySQL数据库教程 第20章 读写分离的利器-MySQL Proxy(共8页).ppt 完整版 MySQL8.0从入门到精通 MySQL数据库教程 第21章 精通MySQL存储引擎(共31页).ppt 完整版 MySQL8.0从入门到...

    MySQL8从入门到精通视频.zip

    第20讲 读写分离的利器——MySQL Proxy 第21讲 精通MySQL存储引擎 第22讲 PHP操作mysql数据库 第23讲 PDO数据库抽象类库 第24讲 开发网上商城 第25讲 论坛管理系统数据库设计 第26讲 新闻发布系统数据库设计 课本...

    MySQL数据库的实时备份知识点详解

    前言 数据库实时备份的需求很常见...1、通过 MySQL Replication 实现负载均衡与读写分离(主数据库仅更新,从数据库仅读取),提升数据库性能。 2、通过 MySQL Replication 实现数据的实时备份,保证数据安全。 3、通过

    完整版 MySQL8.0从入门到精通 MySQL数据库教程 第23章 PDO数据库抽象类库(共12页).ppt

    完整版 MySQL8.0从入门到精通 MySQL数据库教程 第20章 读写分离的利器-MySQL Proxy(共8页).ppt 完整版 MySQL8.0从入门到精通 MySQL数据库教程 第21章 精通MySQL存储引擎(共31页).ppt 完整版 MySQL8.0从入门到...

    mysql5.5 master-slave(Replication)主从配置

    一主一从: Master: OS:centos release 5.6 DB:mysql 5.5.8 IP:192.168.1.2 Slave: OS:centos release 5.6 DB:mysql 5.5.8 IP:192.168.1.3 修改主机Master配置文件 (/etc/my.cnf) 代码如下: [mysqld] //至少要有...

    数据库代理 “变形虫”---amoeba

    基于此可以实现负载均衡、读写分离、高可用性等需求。与MySQL官方的MySQL Proxy相比,作者强调的是amoeba配置的方便(基于XML的配置文件,用SQLJEP语法书写规则,比基于lua脚本的MySQL Proxy简单)。  Amoeba相当于...

    mysql master/slave介绍及配置

    Master-Slave的数据库机构解决了很多问题,特别是read/write比较高的web2.0应用...这是对Replication的最基本陈述,这种模式的在系统Scale-out方案中很有引力(如有必要,数据可以先进行Sharding,再使用replication)。

    MySQL数据库InnoDB引擎主从复制同步经验总结

    1)MySQL的replication过程是一个异步同步的过程,并非完全的主从同步,所以同步的过程中是有延迟的,如果做了读写分离的业务的话,建议也要监控此延迟时间; 2)MySQL的master与slave机器记得server-id要保持不一致...

Global site tag (gtag.js) - Google Analytics