1.概述
MySQL Master-Slave是指MySQL单向、异步复制,复制过程中一个服务器充当主服务器,而一个或多个其它服务器充当从服务器。主服务器将更新写入二进制日志文件,并维护文件的一个索引以跟踪日志循环。这些日志可以记录发送到从服务器的更新。当一个从服务器连接主服务器时,它通知主服务器从服务器在日志中读取的最后一次成功更新的位置。从服务器接收从那时起发生的任何更新,然后封锁并等待主服务器通知新的更新。请注意当你进行复制时,所有对复制中的表的更新必须在主服务器上进行。否则,你必须要小心,以避免用户对主服务器上的表进行的更新与对从服务器上的表所进行的更新之间的冲突。通过在主服务器和从服务器之间切分处理客户查询的负荷,可以得到更好的客户响应时间。SELECT查询可以发送到从服务器以降低主服务器的查询处理负荷。但修改数据的语句仍然应发送到主服务器,以便主服务器和从服务器保持同步。如果非更新查询为主,该负载均衡策略很有效,但一般是更新查询。使用复制的另一个好处是可以使用一个从服务器执行备份,而不会干扰主服务器。在备份过程中主服务器可以继续处理更新。
2.与MySQL Cluster对比
2.1 原理
M-S使用的单向,异步的复制方法。而Cluster采用的是无共享的系统中部署“内存中”数据库的簇。
M-S 是概念上的“同步”,而Cluster是真正意义上的同步,MySQL的Cluster是类似与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所置读锁定有效时,读取主服务器上当前的二进制日志名和偏移量值,并且记住File和Position的值,设置从服务器时需要。
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) master跟slave网络及服务都正常情况下,由master端变化数据后,到slave端浏览数据,检视是否有进行replication?!
2) 模拟slave当机,或是slave不一定需要一直跟master有连接.将由master端变化数据后,到slave端浏览数据,slave点应该是没有数据变化的在其他存储节点和sql节点上重复上述操作。
本文介绍MySQL Master-Slave单向异步复制的概念及其在实际环境中的配置过程。包括搭建测试环境、安装数据库、配置主从服务器等步骤,并提供了一个简单的实例教程。
505

被折叠的 条评论
为什么被折叠?



