`

Mysql 主从复制,读写分离

阅读更多

 

一个简单完整的 Mysql 主从复制,读写分离的示意图。

 


1. 首先搭建 Mysql 主从架构,实现 将 mater 数据自动复制到 slave

 

MySQL 复制的工作方式很简单,一台服务器作为主机,一台或多台服务器作为从机。主机会把数据库的变化记录到日志。一旦这些变化被记录到日志,就会立刻(或者以设定的时间间隔)被送到从机。

 


使用MySQL 复制提供扩展大型网站的能力,这些大型网站的数据库主要是读操作(SELECTs)。从机用於复制主机的銷秏是很少的(通常每个从机1%的开销),在大型网站中每个主机部署30 个从机也是常见的。

 

异步复制与同步复制

 

异步复制:MySQL本身支持单向的、异步的复制。异步复制意味着在把数据从一台机器拷贝到另一台机器时有一个延时 – 最重要的是这意味着当应用系统的事务提交已经确认时数据并不能在同一时刻拷贝/应用到从机。通常这个延时是由网络带宽、资源可用性和系统负载决定的。然而,使用正确的组件并且调优,复制能做到接近瞬时完成。

 

同步复制:同步复制可以定义为数据在同一时刻被提交到一台或多台机器,通常这是通过众所周知的“两阶段提交”做到的。虽然这确实给你在多系统中保持一致性,但也由于增加了额外的消息交换而造成性能下降。

 

使用MyISAM或者InnoDB存储引擎的MySQL本身并不支持同步复制,然而有些技术,例如分布式复制块设备(简称DRBD),可以在下层的文件系统提供同步复制,允许第二个MySQL服务器在主服务器丢失的情况下接管(使用第二服务器的复本)。要了解更多信息,请参见:http://www.drbd.org/

 



 

 异步复制方案:

 

1. Mysql 数据库安装

 

安装过程省略: 详细参见:http://pengranxiang.iteye.com/admin/blogs/1138059

 

服务器 Master :192.168.14.131

Mysql 安装目录: /home/mysql/mysql   (使用源码安装,独立目录)

 

服务器 Slave    :192.168.14.132

Mysql 安装目录 :/home/mysql/mysql

 

2. 修改配置

 

为了不影响原来的配置文件: /etc/my.cnf

 

创建新的配置文件,

 

cp /etc/my.cnf  /home/mysql/mysql/conf/master.cnf

 

cp /etc/my.cnf  /home/mysql/mysql/conf/slave.cnf

 

修改 master.cnf,  增加下面的设置 ,

(官方说明:为了使用事务的InnoDB在复制中最大的持久性和一致性,你应该指定innodb_flush_log_at_trx_commit=1,sync_binlog=1选项。)

 

log-bin=mysql-bin #slave会基于此log-bin来做replication
server-id=1           #master的标示

innodb_flush_log_at_trx_commit=1

sync_binlog=1
 

 

修改 slave.cnf

 

[mysqld]

server-id=2 #slave的标示
 

3. 启动服务

 

# Master

# 如果 Mysql 已启动,先关掉。

/home/mysql/mysql/bin/mysqladmin -u root -p shutdown 

# 使用修改过的 master.cnf 启动 mysql

/home/mysql/mysql/bin/mysqld_safe --defaults-file=/home/mysql/mysql/conf/master.cnf & 

 

 

# Slave

# 如果 Mysql 已启动,先关掉。

/home/mysql/mysql/bin/mysqladmin -u root -p shutdown 

# 使用修改过的 slave.cnf 启动 mysql

/home/mysql/mysql/bin/mysqld_safe --defaults-file=/home/mysql/mysql/conf/slave.cnf & 

 

4. 在 Master 上创建一个专门用于复制的账号 repl_user


5. 启动主从复制功能

 

需要查看 Master 中的  Master status

 

mysql> show master status;

 

然后再 Slave 中,启动复制

 


 

 

上面窗口是连接 Master , 下面窗口连接 Slave

 

6. 测试复制

 

在 Master 中插入一条数据, 然后在 Slave 中查询。 可以验证。


2 简单的读写分离实现

 

读写分离可以直接在 客户端 实现, 也可以通过 代理服务器 实现。

 

代理服务器一般可以选择:

 

官方的:mysql proxy  地址:http://dev.mysql.com/downloads/mysql-proxy/#downloads

 

国产开源项目:amoeba

Amoeba开发者博客: http://amoeba.meidusa.com

Amoeba开源项目地址: http://www.sourceforge.net/projects/amoeba
amoeba 中文文档下载地址:http://amoeba.meidusa.com/amoeba.pdf

 

这里只演示最简单的方案: JDBC 直接实现 读写分离。

 

package prx.dao;

import java.sql.Connection;
import java.sql.ResultSet;
import java.util.Properties;

import com.mysql.jdbc.ReplicationDriver;

public class Test {

	public static void main(String[] args) throws Exception {
		ReplicationDriver driver = new ReplicationDriver();

		Properties props = new Properties();

		// We want this for failover on the slaves
		props.put("autoReconnect", "true");

		// We want to load balance between the slaves
		props.put("roundRobinLoadBalance", "true");

		props.put("user", "foo");
		props.put("password", "bar");

		//  
		// Looks like a normal MySQL JDBC url, with a
		// comma-separated list of hosts, the first
		// being the 'master', the rest being any number
		// of slaves that the driver will load balance against
		//  

		Connection conn = driver.connect(
				"jdbc:mysql://master,slave1,slave2,slave3/test", props);

		//  
		// Perform read/write work on the master
		// by setting the read-only flag to "false"
		//
		// 通过 conn 的 readOnly 是否为 true 来判断,要取 connection 连接的数据库是 主数据库,还是从数据库
		// false 为 主数据库的连接
		// true 为 从数据库的连接
		
		conn.setReadOnly(false);

		conn.setAutoCommit(false);
		conn.createStatement().executeUpdate("UPDATE some_table ....");
		conn.commit();

		//  
		// Now, do a query from a slave, the driver automatically picks one
		// from the list
		//  

		conn.setReadOnly(true);

		ResultSet rs = conn.createStatement().executeQuery(
				"SELECT a,b FROM alt_table");

	}
}

 

JDBC 连接更详细的情况可以查看这篇 讨论: http://www.iteye.com/topic/205926

  • 大小: 24.3 KB
  • 大小: 127.5 KB
  • 大小: 88.4 KB
  • 大小: 62.5 KB
  • 大小: 55.4 KB
  • 大小: 49.2 KB
5
3
分享到:
评论
2 楼 j19800824 2013-08-26  
lz你用的是什么连接工具啊
1 楼 liuxuejin 2012-04-02  
验证过了没有的!放完假决定试试

相关推荐

    MySQL主从复制 读写分离

    根据提供的文件信息,我们可以总结出以下关于MySQL主从复制与读写分离的相关知识点: ### MySQL主从复制原理 MySQL主从复制是一种数据同步机制,它允许将一个MySQL服务器(主服务器)上的数据自动复制到一个或多个...

    mysql 主从复制读写分离实现

    mysql 主从复制读写分离实现

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

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

    mysql 主从复制 读写分离

    1.环境准备:mysql主服务器IP:192.168.60.5 Mysql从1服务器IP:192.168.60.10 mysql从2服务器IP:192.168.60.11 Amoeba代理服务器IP;192.168.60.20 客户机IP:192.168.60.30 ...主从复制 读写分离 经本人测试已成功

    MySQL主从复制读写分离.zip

    MySQL主从复制与读写分离是数据库架构中的重要策略,用于提高系统性能和可用性。在高并发的互联网应用中,这种设计模式尤为常见。本文将深入探讨这两个概念及其实施方法。 **一、MySQL主从复制** MySQL主从复制是...

    mysql主从复制读写分离

    MySQL的主从复制和读写分离是数据库高可用性和负载均衡的重要策略,它们可以提高数据库系统的性能和稳定性。以下是对这一主题的详细说明: **主从复制** 是一种数据库复制技术,它允许数据从一个主数据库(Master)...

    基于mycat的Mysql主从复制读写分离笔记

    4. Mysql主从复制配置 2 1) 配置主库 2 A. 修改主库配置文件 3 B. 重启mysql 3 C. 查看主库状态 3 D. 分配一个从库复制的账号 3 E. 查看从库复制账号 3 2) 配置从库 4 A. 修改从库配置文件 4 B. 重启mysql从服务器 4...

    MySQL主从复制读写分离 .pdf

    MySQL的主从配置,读写分离,详细完整教程,pdf文档思维导图

    Mysql主从复制读写分离实现

    下面将详细介绍MySQL主从复制中的读写分离实现步骤。 1. **安装MySQL** 在主从服务器上,首先都需要安装MySQL。这里以Linux环境为例,通过编译源码的方式进行安装。创建一个名为`mysql`的用户,解压MySQL的源代码...

    MySQL主从复制与读写分离

    MySQL主从复制与读写分离是数据库架构中的重要策略,旨在提高系统的可用性、扩展性和数据安全性。在大型系统中,随着数据量的增长和访问压力的增加,单一数据库服务器往往无法满足性能需求。主从复制和读写分离是...

    MySQL主从复制与读写分离.docx

    MySQL 主从复制与读写分离 MySQL 主从复制是指将一个 MySQL 服务器的数据实时同步到另一个 MySQL 服务器中,以实现数据的高可用性和读写分离。下面是 MySQL 主从复制与读写分离的详细知识点: MySQL 主从复制 ...

    SpringBoot第 12 讲:SpringBoot+MySQL主从复制、读写分离

    在本讲中,我们将深入探讨如何使用SpringBoot与MySQL实现主从复制以及读写分离的架构设计。这一技术方案在大型分布式系统中尤为常见,它能够有效地提高数据库系统的可用性和性能。 首先,让我们理解主从复制的核心...

    Mysql主从复制及读写分离

    一、Mysql5.7的版本优势; 二、数据库集群的概述; 三、Mysql数据库的主从复制; 四、Mysql数据库的读写分离; 五、案例:搭建Mysql数据库集群(主从复制--二进制日志文件...七、案例:实现Mysql主从复制+读写分离;

    linux Mysql mycat主从复制读写分离部署完成

    linux Mysql mycat主从复制读写分离部署完成 技术:mycat mysql集群 linux mycat读写分离 说明包含: mysql数据库服务安装包 mysql+mycat主从复制读写分离部署帮助文档 mysql+mycat主从复制读写分离使用帮助...

    详解MySQL主从复制读写分离搭建

    MySQL主从复制读写分离是一种常见的数据库高可用性解决方案,通过在主服务器上进行数据的写操作,在从服务器上执行数据的读操作,从而分散服务器压力,并提供数据备份。本文将详细介绍如何搭建MySQL主从复制和读写...

    基于数据库中间件Mycat的MySQL主从与读写分离配置详解与示例

    本文将深入探讨基于Mycat的MySQL主从配置与读写分离的详细步骤,并结合【心跳问题heartbeat bug #393】和【bug407:修复主从状态监控和读写分离】的修复进行讲解。 首先,理解Mycat的工作原理至关重要。Mycat作为...

Global site tag (gtag.js) - Google Analytics