`
victorwmh
  • 浏览: 212793 次
  • 性别: 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-读写分离.docx

    MySQL 读写分离与主从复制 MySQL 读写分离是指在数据库集群架构中,让主库负责处理事务性查询,而从库只负责处理 select 查询,达到提高数据库整体读写性能的目的。主数据库另外一个功能就是负责将事务性查询导致的...

    mysql与mycat的读写分离

    ### MySQL与Mycat的读写分离 #### 一、MySQL主从配置 在了解如何实现MySQL与Mycat的读写分离之前,首先要掌握如何配置MySQL的主从复制。这是实现读写分离的基础。 ##### 开启MySQL主从数据复制 主从数据复制通过...

    mysql数据库读写分离负载均衡

    【MySQL 数据库读写分离与负载均衡】 MySQL 数据库的读写分离是一种常见的优化策略,旨在提高系统的可扩展性和性能。在大型应用中,数据库往往成为性能瓶颈,尤其是在高并发的场景下,读写操作混杂可能导致服务器...

    基于Mycat的MySQL主从读写分离配置详解与示例

    ### 基于Mycat的MySQL主从读写分离配置详解与示例 #### 一、概述 在高并发的互联网应用场景下,单一数据库往往难以承受大量的读写请求,因此,采用主从架构实现读写分离是提高系统稳定性和响应速度的有效方法之一...

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

    ### MySQL Replication 主从复制与读写分离配置详解 #### 一、背景介绍 MySQL replication是一种数据复制技术,主要用于实现数据库的高可用性、负载均衡和数据备份等场景。通过搭建主从复制环境,可以实现在多台...

    linux下mysql amoeba读写分离配置

    MySQL的主从复制(Master-Slave Replication)和读写分离(Read-Write Separation)是实现这一目标的常用方法。这里我们将探讨如何配置MySQL主从复制,以及使用Amoeba或MySQL-Proxy进行读写分离。 首先,让我们了解...

    Mycat+MySQL Galera读写分离验证安装手册

    ### Mycat+MySQL Galera 读写分离验证安装手册知识点详解 #### 一、Mycat与MySQL Galera概述 **Mycat**是中国开源社区第一个成熟可用的数据库中间件项目,它支持读写分离、分库分表等功能,能够为用户隐藏底层...

    mysql读写分离

    ### MySQL 读写分离原理与实现 #### 一、引言 随着业务的增长和技术的发展,单一数据库服务器往往难以满足高并发、大数据量的应用场景。为了提高数据库系统的性能和可用性,一种常用的方法就是采用“读写分离”的...

    Mysql的读写分离、MySQL主从复制

    ### MySQL的读写分离与主从复制 #### 一、背景与需求 在现代Web应用中,数据库往往面临着巨大的读写压力。对于大部分应用程序来说,读取数据的需求远远大于写入数据的需求,即所谓的“读多写少”。为了提高系统的...

    MySQL主从同步与读写分离配置图文详解

    因此,采用**主从同步(Master-Slave Replication)**的方式同步数据,并通过**读写分离**来提高系统的并发处理能力变得尤为重要。 #### 二、基本环境 - **操作系统**: Red Hat Enterprise Linux 6.3 32位 - **...

    mysql5.7 双主互备、高可用、读写分离 + keepalived 实战演练

    MySQL 5.7 双主互备、高可用与读写分离是数据库系统设计中的重要概念,用于确保数据的稳定性和服务的连续性。在这个实战演练中,我们将深入探讨如何配置和实现这些特性,以及如何结合 keepalived 来增强系统的可用性...

    mysql读写分离实现

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

    MySQL 读写分离实例详解

    MySQL 读写分离是一种常见的数据库优化策略,它将数据库的读操作和写操作分配到不同的服务器上,以提高系统的并发处理能力和响应速度。在大型应用系统中,由于大量的读操作通常远超过写操作,这种分离可以显著提升...

    Mycat+MySQL主从复制读写分离验证安装手册

    ### Mycat+MySQL主从复制读写分离验证安装手册知识点详解 #### 1. 实验环境及准备 在实现Mycat与MySQL的主从复制读写分离之前,需要搭建好实验环境。根据文档中的信息,实验环境由两台机器组成,分别用于充当MySQL...

    企业服务器架构中MySQL读写分离部署运维实践手册

    ### 企业服务器架构中MySQL读写分离部署运维实践手册 #### 一、背景描述及其方案设计 ##### 1、业务背景描述 - **时间范围**:2014年6月至2015年9月 - **产品类型**:互联网动态站点商城 - **用户数量**:10,000至...

    mycat 读写分离 优化

    在深入讨论MyCAT读写分离之前,有必要简要介绍MySQL的两种主流存储引擎——InnoDB和MyISAM。这两种引擎各有优缺点,适用于不同的场景。 ##### 2.1 InnoDB引擎 - **事务支持**:InnoDB是MySQL中唯一支持事务处理的...

    MySQL的HA、读写分离、均衡负载.pdf

    MySQL的高可用性(HA)、读写分离和负载均衡是数据库管理和架构设计中的重要概念,它们对于确保应用高可用性和高性能至关重要。 1. 高可用性(HA):在数据库环境中,高可用性意味着数据库系统能够持续运行,即使在发生...

    mysql读写分离实现.doc

    MySQL 读写分离是一种优化数据库性能的技术,尤其适用于高并发读取操作的场景。通过将数据库的读操作和写操作分配到不同的服务器上,可以显著提高系统的处理能力,减轻主数据库的压力,保证数据的一致性。 在本次...

Global site tag (gtag.js) - Google Analytics