MYSQL5.5 主从复制

回复 收藏
本帖最后由 iiwoai 于 2012-11-14 10:37 编辑

MYSQL5.5加强的复制功能
5.5较5.1对复制功能进行了增强,从而提供了更好的实用性:
• 确保主服务器和从服务器之间数据的一致性
• 如果复制不能正常工作,立即检测
• 允许崩溃的从服务器依据主服务器的中继日志(Relay Log)自动恢复
• 允许用户为特定的服务器过滤各种事件
• 正确转换主服务器和从服务器之间的数据类型

默认情况下,MySQL5.5的复制功能是异步的,这意味着当谈到数据一致性时,主服务器及其从服务器是独立的。如果在主服务器或从服务器端发生故障,会造成主服务器/从服务器数据的不一致,甚至在恢复时造成数据丢失。
MySQL5.5引入了一种半同步复制功能,该功能可以确保主服务器和访问链中至少一台从服务器之间的数据一致性和冗余。在这种配置结构中,一台主服务器和其许多从服务器都进行了配置,这样在复制拓扑中,至少有一台从服务器在父主服务器进行事务处理前,必须确认更新已经收到并写入了其中继日志(Relay Log)。当出现超时,源主服务器必须暂时切换到异步复制模式重新复制,直到至少有一台设置为半同步复制模式的从服务器及时收到信息。

1.jpg


半同步复制模式必须在主服务器和从服务器端同时启用,否则主服务器默认使用异步复制模式。MySQL5.5使用一种全新的插件构架实现了半同步复制模式。
设置如下:

首先设置异步复制
一、Master 设置:
1)、vi /etc/mysql/my.cnf
  1. server-id               = 1                  
  2. log_bin                = mysql-bin
  3. log-slave-updates
2)、添加复制用户,给权限
  1. GRANT REPLICATION SLAVE ON *.* TO 'root'@'202.96.49.%' IDENTIFIED BY 'badpwd';
二、Slave设置:
1)、vi /etc/mysql/my.cnf
  1. server-id               = 2                  
  2. //server-id=2 与mdb1不重复
  3. log_bin                 = mysql-bin
  4. log-slave-updates
三、主从设置
1)、先将主库锁表
  1. flush tables with read lock;
2)、查看主库上日志文件和pos
  1. show master status;
3)、在从上配置
  1. change master to master_host='202.96.49.72',master_port=3306,master_user='root',master_password='badpwd',master_log_file='mysql-bin.000010',master_log_pos=107;
  2. //此处pos与log file对应上面的show master status;
  3. start slave;
  4. show slave status\G;
4)、主库上设置,将表解锁
  1. unlock tables;
5)、从库上查看状态
  1. show slave status\G;Slave_IO_Running: Yes
  2. Slave_SQL_Running: Yes
  3. //确认以下两项参数都为yes
主从配置完成

在异部同步的基础上,配置半同步复制
一、Master 设置:
1)、首先安装半同步插件
  1. Sql>install plugin rpl_semi_sync_master soname 'semisync_master.so';
2)、修改配置文件,将半同步复制设为可用
  1. vi my.cnf
  2. rpl_semi_sync_master_enabled=1
  3. rpl_semi_sync_master_timeout=1000
  4. innodb_flush_log_at_trx_commit=1
  5. sync_binlog=1
  6. //注意:为了使用事务的InnoDB在复制中最大的持久性和一致性,你应该指定innodb_flush_log_at_trx_commit=1,sync_binlog=1选项
3)、查看状态
  1. Show variables like 'rpl_semi_sync%'  ;
2.jpg


二、Slave设置:
1)、首先安装半同步插件
  1. Sql>INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';
2)、修改配置文件
  1. rpl_semi_sync_slave_enabled=1
3)、重新启动从的IO线程
  1. sql> STOP SLAVE IO_THREAD; START SLAVE IO_THREAD;
  2. //如果复制还没有在运行,那么不需要停止并重启从机的IO线程,只需要输入START SLAVE。
4)、查看状态
  1. Show variables like 'rpl_semi_sync%'  ;
3.jpg


半同步复制配置完成

三、配置完成后
1)、主上查看:
  1. mysql> show status like 'Rpl_%';
  2. +--------------------------------------------+---------------+
  3. | Variable_name                              | Value         |
  4. +--------------------------------------------+---------------+
  5. | Rpl_semi_sync_master_clients               | 1             | #semi slave 数量
  6. | Rpl_semi_sync_master_net_avg_wait_time     | 803           | #网络平均等待时间
  7. | Rpl_semi_sync_master_net_wait_time         | 803           | #网络等待总时间
  8. | Rpl_semi_sync_master_net_waits             | 1             | #网络等待次数
  9. | Rpl_semi_sync_master_no_times              | 1             | #
  10. | Rpl_semi_sync_master_no_tx                 | 1             | #同步失败事务数量
  11. | Rpl_semi_sync_master_status                | ON            | #同步状态
  12. | Rpl_semi_sync_master_timefunc_failures     | 0             | #
  13. | Rpl_semi_sync_master_tx_avg_wait_time      | 879           | #事务平均的等待时间
  14. | Rpl_semi_sync_master_tx_wait_time          | 879           | #事务等待总时间
  15. | Rpl_semi_sync_master_tx_waits              | 1             | #事务等待次数
  16. | Rpl_semi_sync_master_wait_pos_backtraverse | 0             |    #
  17. | Rpl_semi_sync_master_wait_sessions         | 0             |  #
  18. | Rpl_semi_sync_master_yes_tx                | 1             | #同步成功事务数量
  19. | Rpl_status                                 |AUTH_MASTER    |   
  20. +--------------------------------------------+---------------+
2)、从上查看
  1. mysql> show status like 'rpl_semi%';
  2. +----------------------------+-------+
  3. | Variable_name              | Value |
  4. +----------------------------+-------+
  5. | Rpl_semi_sync_slave_status | ON    |
  6. +----------------------------+-------+
注:虽然半同步有监控功能 ,但.随着并发数和事务数量的增加,semi将消耗更多的时间在等待slave的响应。使用semi将降低系统10%~30%的事务处理能力
1.jpg 2.jpg
2012-11-14 10:36 举报
已邀请:
0

阿铭 管理员

赞同来自:

没有整太明白,这个东西。以后用到了再好好研究下吧。
0

iiwoai

赞同来自:

lishiming2009 发表于 2012-11-14 16:17 static/image/common/back.gif
没有整太明白,这个东西。以后用到了再好好研究下吧。

你笨蛋{:4_112:}

回复帖子,请先登录注册

退出全屏模式 全屏模式 回复
评分
可选评分理由: