mysql-master-slave

本文介绍MySQL Master-Slave单向异步复制的概念及其在实际环境中的配置过程。包括搭建测试环境、安装数据库、配置主从服务器等步骤,并提供了一个简单的实例教程。

1.概述

MySQL Master-Slave是指MySQL单向、异步复制,复制过程中一个服务器充当主服务器,而一个或多个其它服务器充当从服务器。主服务器将更新写入二进制日志文件,并维护文件的一个索引以跟踪日志循环。这些日志可以记录发送到从服务器的更新。当一个从服务器连接主服务器时,它通知主服务器从服务器在日志中读取的最后一次成功更新的位置。从服务器接收从那时起发生的任何更新,然后封锁并等待主服务器通知新的更新。请注意当你进行复制时,所有对复制中的表的更新必须在主服务器上进行。否则,你必须要小心,以避免用户对主服务器上的表进行的更新与对从服务器上的表所进行的更新之间的冲突。通过在主服务器和从服务器之间切分处理客户查询的负荷,可以得到更好的客户响应时间。SELECT查询可以发送到从服务器以降低主服务器的查询处理负荷。但修改数据的语句仍然应发送到主服务器,以便主服务器和从服务器保持同步。如果非更新查询为主,该负载均衡策略很有效,但一般是更新查询。使用复制的另一个好处是可以使用一个从服务器执行备份,而不会干扰主服务器。在备份过程中主服务器可以继续处理更新。 

2.与MySQL Cluster对比

2.1 原理

M-S使用的单向,异步的复制方法。而Cluster采用的是无共享的系统中部署内存中数据库的簇。

M-S 是概念上的“同步”,而Cluster是真正意义上的同步,MySQLCluster是类似与DB2的无共享集群,易于扩展。

2.2 性能

M-S 倾向与数据的更新与查询的分离,如果master宕机了整个应用就瘫痪了。

Cluster 各个节点是相对独立的任何一个节点宕机都不会影响其他节点的使用。  

 

3.测试服务器环境

 

节点

IP地址

Master服务器

192.168.130.237

Slave1服务器

192.168.130.238

由一台机器上的vmware提供的2台系统为redhat5 linux的虚拟机(主机环境2003,主机ip地址192.168.130.231)。

4.简单实例

4.1数据库的安装

mysql-cluster-gpl-6.3.20-linux-i686-glibc23.tar.gz 多数文档都说下载MySQL-max,但是在超过5.1版本中只提供了mysql-cluster 效果应该一样。(使用非cluster版本的mysql数据库也可以)

根据数据库版本和开发环境的不同,安装方法有很多种,具体方法请访问。

http://dev.mysql.com/doc/refman/5.1/zh/installing.html 本文以二进制包的安装为例。

 

shell> groupadd mysql

shell> useradd -g mysql mysql

shell> cd /usr/local

shell> gunzip < /path/to/mysql-VERSION-OS.tar.gz | tar xvf -

shell> ln -s full-path-to-mysql-VERSION-OS mysql

shell> cd mysql

shell> scripts/mysql_install_db --user=mysql

shell> chown -R root  .

shell> chown -R mysql data

shell> chgrp -R mysql .

shell> bin/mysqld_safe --user=mysql &

4.2mysql-master-slave的配置

1)  配置/etc/my.cnf

       server-id = 1 #  master_id

       log-bin # = mysql-bin 二进制日志 (文档上加了= mysql-bin,不加也成功了,可能是文件前缀)

       binlog_do_db = ibatis #要同步的数据库

2)  创建用于复制的账号。

       mysql>GRANT REPLICATION SLAVE ON *.* TO 'slavel'@'192.168.130.%' IDENTIFIED BY '111111';

3)  清空所有表和块写入语句

         mysql> FLUSH TABLES WITH READ LOCK;

4)  对主服务器上的数据进行快照

         shell> tar -cvf /tmp/mysql-snapshot.tar .

         (其中“.”代表当前目录,数据库的存储路径,本例中为:/usr/local/mysql/data/)

5)  复制快照到从服务器中,并覆盖从服务器的data目录。

       shell>ftp

         ftp>open 192.168.130.238

         ftp>用户名

         ftp>密码

         ftp>put /tmp/mysql-snapshot.tar /tmp/mysql-snapshot.tar (复制到相同目录中)

         操作从服务器:

         shell>cd /usr/local/mysql/data/

         shell> tar -xvf /tmp/mysql-snapshot.tar

6)  FLUSH TABLES WITH READ LOCK所置读锁定有效时,读取主服务器上当前的二进制日志名和偏移量值,并且记住FilePosition的值,设置从服务器时需要。

         mysql > SHOW MASTER STATUS;

+---------------+----------+--------------+------------------+
| File          | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+---------------+----------+--------------+------------------+
| mysql-bin.003 | 73       | test         | manual,mysql     |
+---------------+----------+--------------+------------------+

7)  停止用于从服务器的服务器并在其my.cnf文件中添加下面的行:

       [MYSQLD]

       server-id = 2 # 如果多个服务器则需要保持id唯一。

       master-user=slave1

       master-password=111111

       master-port=3306

       master-host=192.168.130.237

       master-connect-retry=60 # 当前连接不可用时,每隔多少秒进行一次重试。

       replicate-do-db=ibatis #复制的库名。

8)  启动从服务器。(确保服务器对data目录有读写权限)

9)  根据实际情况完成下面语句并且在从服务器上执:

       Mysql>CHANGE MASTER TO MASTER_HOST='192.168.130.237', MASTER_USER='slave1',        MASTER_PASSWORD='111111',MASTER_LOG_FILE='sql199-bin.000001',MASTER_LOG_POS      =107;

10)启动master服务器。

5.测试

1)      masterslave网络及服务都正常情况下,master端变化数据后,slave端浏览数据,检视是否有进行replication?!

2)      模拟slave当机,或是slave不一定需要一直跟master有连接.将由master端变化数据后,slave端浏览数据,slave点应该是没有数据变化的在其他存储节点和sql节点上重复上述操作。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值