MySQL 支持单向、异步复制,复制过程中一个服务器充当主服务器,而一个或多个其它服务器充
当从服务器。主服务器将更新写入二进制日志文件,并维护文件的一个索引以跟踪日志循环。这
些日志可以记录发送到从服务器的更新。当一个从服务器连接主服务器时,它通知主服务器从服
务器在日志中读取的最后一次成功更新的位置。从服务器接收从那时起发生的任何更新,然后封
锁并等待主服务器通知新的更新。
请注意当你进行复制时,所有对复制中的表的更新必须在主服务器上进行。否则,你必须要小心,
以避免用户对主服务器上的表进行的更新与对从服务器上的表所进行的更新之间的冲突。
单向复制有利于健壮性、速度和系统管理:
1. 主服务器/从服务器设置增加了健壮性。主服务器出现问题时,你可以切换到从服务器作为备份
2. 通过在主服务器和从服务器之间切分处理客户查询的负荷,可以得到更好的客户响应时间。
SELECT 查询可以发送到从服务器以降低主服务器的查询处理负荷。但修改
数据的语句仍然应发送到主服务器,以便主服务器和从服务器保持同步。如果非更新查询为主,该
负载均衡策略很有效,但一般是更新查询。
3. 使用复制的另一个好处是可以使用一个从服务器执行备份,而不会干扰主服务器。在备份过程
中主服务器可以继续处理更新。
MySQL 提供了数据库的同步功能,这对我们实现数据库的冗灾、备份、恢复、负载均衡等都是
有极大帮助的。

实验环境:
RHEL 6 mysql5.1.52
master 192.168.0.11
slave1 192.168.0.12
slave2 192.168.0.13
mysql 的 AB 复制
注: mysql 数据库的版本,两个数据库版本要相同,或者 slave 比 master 版本高!
在 master slave 上安装 mysql 软件
mysql 软件可以在 http://www.mysql.com[/上下载,源码或是 rpm 包都可以,由于 RHEL6 自带
mysql 软件包,直接 yum 安装。
# yum install mysql mysql-server -y
master server 配置
1)配置 /etc/my.cnf 配置文件
在[mysqld]下添加一下参数
log-bin=mysql-bin #启动二进制日志系统
binlog-do-db=test #二进制需要同步的数据库名,如果需要同步多个库,例如要再同步 westos
库,再添加一行“binlog-do-db=westos”,以此类推
server-id=1 #必须为 1 到 232–1 之间的一个正整数值
binlog-ignore-db=mysql #禁止同步 mysql 数据库
2 ) 启动 master
# service mysqld start
3)创建同步帐户,并给予权限
mysql> GRANT REPLICATION SLAVE,RELOAD,SUPER ON *.* TO westos@'192.168.0.12'
IDENTIFIED BY 'westos';
mysql>Flush privileges;
调试:
在 master 上用下面的命令查看
mysql> show master status;
+---------------------+-----------+----------------+--------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+---------------------+-----------+----------------+--------------------+
| mysql-bin.000001| 106 | test | mysql  |
+---------------------+-----------+----------------+--------------------+
记录 File 和 Position 的值,下面会用到。
slave1server 配置
1 )配置 /etc/ my.cnf 文件
在[mysqld]下添加一下参数
server-id=2 #从服务器 ID 号,不要和主 ID 相同,如果设置多个从服务器,每个从服务器必
须有一个唯一的 server-id 值,必须与主服务器的以及其它从服务器的不相同。
可以认为 server-id 值类似于 IP 地址:这些 ID 值能唯一识别复制服务器群集
中的每个服务器实例。
2 ) 启动 slave
# service mysqld start
3) 在 slave1 上执行一下命令
mysql> change master to master_host='192.168.0.11', master_user='westos',
master_password='westos', master_log_file='mysql-bin.000001', master_log_pos=106;
Query OK, 0 rows affected (0.28 sec)
mysql> slave start;
Query OK, 0 rows affected (0.00 sec)
mysql> show slave status\G;
.....
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
.....
如果都是 yes,表示从库的 I/O,Slave_SQL 线程都正确开启.表明数据库正在同步
你也可以通过在 master server 上的 test 库中添加数据,看 slave server 是否同步,更多详细信息以及
参数设置,请参考 MySQL Manual 手册.
注意:在同步之前确保 master 与 slave 上的数据一致性。
相关文件作用:
1. mysql-bin.index:服务器一旦开启二进制日志,会产生一个与二日志文件同名,但是以.index 结尾
的文件。它用于跟踪磁盘上存在哪些二进制日志文件。MySQL 用它来定位二进制日志文件。
2. mysqld-relay-bin.index:该文件的功能与 mysql-bin.index 类似,但是它是针对中继日志,而不是
二进制日志。
3. master.info:保存 master 的相关信息。不要删除它,否则,slave 重启后不能连接 master。
4. relay-log.info:包含 slave 中当前二进制日志和中继日志的信息。
如果写操作较少,而读操作很多时,可以采取这种结构。你可以将读操作分布到其它的 slave,从而减小
master 的压力。但是,当 slave 增加到一定数量时,slave 对 master 的负载以及网络带宽都会成为一个严重
的问题。这种结构虽然简单,但是,它却非常灵活,足够满足大多数应用需求。
当设置 log_slave_updates 时,你可以让 slave 扮演其它 slave 的 master。此时,slave 把 SQL 线程执行的事
件写进行自己的二进制日志(binary log),然后,其它的 slave 可以获取这些事件并执行它,从而有效缓解
master 的压力。如下:
添加一个 slave2:
1. 由于 master 上已经有数据,而新加的 slave2 没有,必须在配置复制前同步数据。
1)在 master 上执行一下命令
mysql> FLUSH TABLES WITH READ LOCK; #锁表
mysql> mysqldump --all-databases --lock-all-tables > backup.db
mysql> UNLOCK TABLES;  #表解锁
2)如果你仅使用 MyISAM 表,你可以使用 mysqlhotcopy 拷贝,即使服务器正在运行。
# mysqlhotcopy -u root -p westos mysql bakcup
2. 在 slave1 上加入以下设置:
# vi /etc/my.cnf
….
server-id=2
log-bin=mysql-bin
binlog-ignore-db=mysql
binlog-do-db=test
log-slave-updates
….
# /etc/init.d/mysqld restart
3. 在 slave1 上创建同步帐户,并给予权限
mysql> GRANT REPLICATION SLAVE,RELOAD,SUPER ON *.* TO westos@'192.168.0.12'
IDENTIFIED BY 'westos';
mysql>Flush privileges;
mysql> show master status;
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000001 | 217 | test | mysql |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)
4. 在 slave2 上添加配置:
# vi /etc/my.cnf
server-id=3
# /etc/init.d/mysqld start
5. 在 slave2 上执行一下命令
mysql> change master to master_host='192.168.0.12', master_user='westos',
master_password='westos', master_log_file='mysql-bin.000001', master_log_pos=217;
mysql> slave start;
mysql> show slave status\G;
.....
Slave_IO_Running: Yes
Slave_SQL_Running: Yes

<rhel6 mysql replication>的更多相关文章

  1. 简单物联网:外网访问内网路由器下树莓派Flask服务器

    最近做一个小东西,大概过程就是想在教室,宿舍控制实验室的一些设备. 已经在树莓上搭了一个轻量的flask服务器,在实验室的路由器下,任何设备都是可以访问的:但是有一些限制条件,比如我想在宿舍控制我种花 ...

  2. 利用ssh反向代理以及autossh实现从外网连接内网服务器

    前言 最近遇到这样一个问题,我在实验室架设了一台服务器,给师弟或者小伙伴练习Linux用,然后平时在实验室这边直接连接是没有问题的,都是内网嘛.但是回到宿舍问题出来了,使用校园网的童鞋还是能连接上,使 ...

  3. 外网访问内网Docker容器

    外网访问内网Docker容器 本地安装了Docker容器,只能在局域网内访问,怎样从外网也能访问本地Docker容器? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Docker容器 ...

  4. 外网访问内网SpringBoot

    外网访问内网SpringBoot 本地安装了SpringBoot,只能在局域网内访问,怎样从外网也能访问本地SpringBoot? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装Java 1 ...

  5. 外网访问内网Elasticsearch WEB

    外网访问内网Elasticsearch WEB 本地安装了Elasticsearch,只能在局域网内访问其WEB,怎样从外网也能访问本地Elasticsearch? 本文将介绍具体的实现步骤. 1. ...

  6. 怎样从外网访问内网Rails

    外网访问内网Rails 本地安装了Rails,只能在局域网内访问,怎样从外网也能访问本地Rails? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Rails 默认安装的Rails端口 ...

  7. 怎样从外网访问内网Memcached数据库

    外网访问内网Memcached数据库 本地安装了Memcached数据库,只能在局域网内访问,怎样从外网也能访问本地Memcached数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装 ...

  8. 怎样从外网访问内网CouchDB数据库

    外网访问内网CouchDB数据库 本地安装了CouchDB数据库,只能在局域网内访问,怎样从外网也能访问本地CouchDB数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Cou ...

  9. 怎样从外网访问内网DB2数据库

    外网访问内网DB2数据库 本地安装了DB2数据库,只能在局域网内访问,怎样从外网也能访问本地DB2数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动DB2数据库 默认安装的DB2 ...

  10. 怎样从外网访问内网OpenLDAP数据库

    外网访问内网OpenLDAP数据库 本地安装了OpenLDAP数据库,只能在局域网内访问,怎样从外网也能访问本地OpenLDAP数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动 ...

随机推荐

  1. 记录对定时任务调度器的小小改进 - API调度计划

    之前记录过一篇 [开源一个定时任务调度器 webscheduler],这是一个看似简单的小工具,昨天部署到服务器上开始试用下,听听反馈. 项目经理看过后,立马反馈说这个使用 Cron表达式 的计划太难 ...

  2. idea崩溃导致的svn插件丢失问题, maven dependencies视图丢失问题

    Idea丢失Svn解决办法 今天打开Idea,习惯用ctrl+t来更新svn,杯具出现了,快捷键失效了,我觉得可能是其他的什么软件占用了这个快捷键,于是重启了一下,发现还是不行,svn信息怎么没了,c ...

  3. Structuring Machine Learning Projects 笔记

    1 Machine Learning strategy 1.1 为什么有机器学习调节策略 当你的机器学习系统的性能不佳时,你会想到许多改进的方法.但是选择错误的方向进行改进,会使你花费大量的时间,但是 ...

  4. [#413c] Fountains

    http://codeforces.com/contest/799/problem/C 解题关键:树状数组取最大值,注意先搜索,后加入,此种情况可以取出最大值. 为什么可以取到最大值? 1.当分别用两 ...

  5. 使用showConfirmDialog显示确认框

    ------------------siwuxie095                                 工程名:TestJOptionPane 包名:com.siwuxie095.s ...

  6. 《精通Spring4.X企业应用开发实战》读后感第六章(引用Bean的属性值)

  7. C# 写 LeetCode easy #28 Implement strStr()

    28.Implement strStr() Implement strStr(). Return the index of the first occurrence of needle in hays ...

  8. C# 写 LeetCode easy #26 Remove Duplicates from Sorted Array

    26.Remove Duplicates from Sorted Array Given a sorted array nums, remove the duplicates in-place suc ...

  9. 利用MVC的Area作为二级域名

    此处使用的域名是我改了系统的hosts文件达到的 测试成功! 全局的注册方式 在Area的注册文件里进行配置 一个Area和一个外部的Controller 废话不多说,提供DEMO 下载地址

  10. 线程池和Thread

    1.线程池 创建线程需要时间.如果有不同的短任务要完成,就可以事先创建许多线程,在应完成这些任务时发出请求.这个线程数最好在需要更多线程时增加,在需要释放资源时减少.不需要自己创建这样一个列表.该列表 ...