注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

A small step

Judgement Must

 
 
 

日志

 
 
关于我

不要因为急着赶路,让自己的步伐杂乱。远方是既定的目标,但路上才是最重要的经历!

网易考拉推荐

mysql 主从测试  

2015-07-23 14:29:35|  分类: Database |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
1、mysql5.5 主从配置
Mysql的主从复制至少是需要两个Mysql的服务,当然Mysql的服务是可以分布在不同的服务器上,也可以在一台服务器上启动多个服务。
(1)首先确保主从服务器上的Mysql版本相同
(2)在主服务器上,设置一个从数据库的账户,使用REPLICATION SLAVE赋予权限,如:
mysql> GRANT REPLICATION SLAVE ON *.* TO 'slave001'@'172.16.10.143' IDENTIFIED BY '123456';
Query OK, 0 rows affected (0.13 sec)
(3)修改主数据库的配置文件my.cnf,开启BINLOG,并设置server-id的值,修改之后必须重启Mysql服务
(4)之后可以得到主服务器当前二进[mysqld]
log-bin = /home/mysql/log/mysql-bin.log
server-id=1
制日志名和偏移量,这个操作的目的是为了在从数据库启动后,从这个点开始进行数据的恢复
mysql> show master status\G;
*************************** 1. row ***************************
File: mysql-bin.000003
Position: 243
Binlog_Do_DB:
Binlog_Ignore_DB:
1 row in set (0.00 sec)
(5)好了,现在可以停止主数据的的更新操作,并生成主数据库的备份,我们可以通过mysqldump到处数据到从数据库,当然了,你也可以直接用cp命令将数据文件复制到从数据库去
注意在导出数据之前先对主数据库进行READ LOCK,以保证数据的一致性
mysql> flush tables with read lock;
Query OK, 0 rows affected (0.19 sec)
之后是mysqldump
mysqldump -h127.0.0.1 -p3306 -uroot -p test > /home/chenyz/test.sql
最好在主数据库备份完毕,恢复写操作
mysql> unlock tables;
Query OK, 0 rows affected (0.28 sec)
(6)将刚才主数据备份的test.sql复制到从数据库,进行导入
(7)接着修改从数据库的my.cnf,增加server-id参数,指定复制使用的用户,主数据库服务器的ip,端口以及开始执行复制日志的文件和位置
server-id       = 2 
log-bin=mysql-bin  
replicate-do-db=test   
replicate-do-db=bbs 
mysql>stop slave;
mysql>researt slave;
mysql>change master to master_host = 'VMS00782',
master_user = 'replication',
master_password = 'ReplPass@123456',
master_port = 3306,
master_log_file = 'VMS00782-bin.000001',
master_log_pos = 120;
mysql>start slave;
mysql>show slave status;
2、 读写分离

一般我们从服务器端是只负责客户的读请求的,主服务端负责写请求的。那么配置下吧!
首先查看下从服务器端的只读方式是否打开。
mysql> show global variables like 'read%';
+----------------------+---------+
| Variable_name        | Value   |
+----------------------+---------+
| read_buffer_size     | 1048576 |
| read_only            | OFF     |
| read_rnd_buffer_size | 4194304 |
+----------------------+---------+
3 rows in set (0.00 sec)
打开我们的只读方式有两种
一种是在mysql服务器端的全局模式下配置,但是在全局模式下配置mysql重启之后就会失效;
一种是在/etc/my.cnf配置文件中配置,这个配置是永久生效;这里我们选择第二种。
给/etc/my.cnf配置文件添加一行如下:
[root@slave1 ~]# vim /etc/my.cnf 
read_only = ON
然后重启启动下我们的mysql服务器。
[root@slave1 ~]# service mysqld restart
Shutting down MySQL......                                  [  OK  ]
Starting MySQL..................                           [  OK  ]
进入mysql服务测试下是否启动只读模式。    
 
主服务器端执行了写操作,日志文件立即同步到从服务器端,设置这些是为了保证事务的完整性。
在主服务器端[mysqld]添加skip_slave_start = 1 

3、 mysql5.5 半同步

一 、MySQL5.5 除了支持内置的异步复制机制,还提供了接口支持半同步复制的机制。
异步复制的缺点: MySQL复制默认是异步复制,Master将事件写入binlog,但并不知道Slave是否或何时已经接收且已处理。在异步复制的机制的情况下,如果Master宕机,事务在Master上已提交,但很可能这些事务没有传到任何的Slave上。假设有Master->Salve故障转移的机制,此时Slave也可能会丢失事务。
半同步复制的概念:
i.
当Slave主机连接到Master时,能够查看其是否处于半同步复制的机制。
ii. 当Master上开启半同步复制的功能时,至少应该有一个Slave开启其功能。此时,一个线程在Master上提交事务将受到阻塞,直到得知一个已开启半同步复制功能的Slave已收到此事务的所有事件,或等待超时。
iii.
当一个事务的事件都已写入其relay-log中且已刷新到磁盘上,Slave才会告知已收到。
iv.  如果等待超时,也就是Master没被告知已收到,此时Master会自动转换为异步复制的机制。当至少一个半同步的Slave赶上了,Master与其Slave自动转换为半同步复制的机制。
v.
半同步复制的功能要在Master,Slave都开启,半同步复制才会起作用;否则,只开启一边,它依然为异步复制。

二、半同步的定义:主服务器端执行了写操作,必须往从服务器端复制一份,才能给客户端返回提交状态。
这里我们需要在主服务器端安装semisync_master.so从服务器端安装semisync_slave.so
具体步骤如下:
主服务器端:
mysql> install plugin rpl_semi_sync_master SONAME 'semisync_master.so';
Query OK, 0 rows affected (0.36 sec)
安装好之后看下是否启动如果没有启动我们启用下。
          mysql>show global variables like '%rpl%';
 
主服务器端开启semi_sync功能,并设置等待时候为3秒。
mysql> set global rpl_semi_sync_master_enabled =1;
Query OK, 0 rows affected (0.02 sec)
mysql> set global rpl_semi_sync_master_timeout = 3000 ;
Query OK, 0 rows affected (0.00 sec)
 mysql>show global variables like '%rpl%';
从服务器端:
mysql> install plugin rpl_semi_sync_slave  SONAME 'semisync_slave.so';
Query OK, 0 rows affected (0.28 sec)
  mysql>show global variables like '%rpl%';
从服务器端开启semi_sync功能。
mysql> set global rpl_semi_sync_slave_enabled =1;
Query OK, 0 rows affected (0.03 sec)
重启服务
stop slave io_thread 
start slave io_thread
 mysql>show global variables like '%rpl%';
验收从主服务端:    
  mysql>show global status like 'rpl%;
半同步复制是如果从服务端没有开启的话,主服务端第一次会延迟3秒中之后提交,之后主服务端会降低延迟不再等待从服务端。从服务端开启之后在追赶上主服务端让后在实现半同步。
实现演示下:
1、先关闭从服务端。
mysql> stop slave;
Query OK, 0 rows affected (0.02 sec)
2、主服务端创建一个semidb数据库
mysql>create database  semidb;
 
3、从服务端启动服务。
mysql> start slave;
Query OK, 0 rows affected (0.03 sec)    
mysql> show slave status\G     

4、压力测试

当数据库连接数不断增加时(从100~1600,每次递增300),MySQL平均每秒处理事务(读写混合模式和只读模式)的能力。该测试方案中, 表的大小不变,始终是100万行;表的类型是myisam;测试过程是否完成以处理的事务数来计算,即MySQL完成了10万次的事务数(读或写)后,测 试完成。

/opt/sysbench/bin/sysbench --test=oltp --mysql-user=root --mysql-socket=/tmp/mysql.sock --oltp-table-size=1000000 --mysql-db=test --oltp-table-name=sbtest  --max-requests=100000  --num-threads=100~1000  --mysql-table-engine=myisam prepare run cleanup

Number of threads          r/w requests(per sec)         ro requests(per sec)
100                           4734.55                      24596.17
400                           3732.46                      22627.83
700                           3678.04                      21794.66
1000                          3685.92                      21107.07
1300                          4262.79                      20345.05
1600                          8026.09                      19586.69                                                    

当数据库中表的行数不断增加时(从50万~1000万,每次递增50万行),MySQL平均每秒处理事务(读写混合模式和只读模式)的能力。该测试 方案中,表的连接数始终为100;表的类型是myisam;测试过程是否完成以时间来计算,即测试时间到达5分钟时,测试结束.
/opt/sysbench/bin/sysbench --test=oltp --mysql-user=root --mysql-socket=/tmp/mysql.sock --mysql-db=test --oltp-table-name=sbtest --max-requests=0 --num-threads=100 --mysql-table-engine=myisam --max-time=300  --myisam-max-rows=50000000~ --oltp-table-size=500000~10000000 prepare

Number of rows(万)     r/w requests(per sec)         ro requests(per sec)
50                        3899.91                       19639.40
100                       3569.73                       19173.30
150                       3177.89                       18837.35
200                       3505.84                       18925.25
250                       3495.07                       19296.95
300                       4158.19                       19268.41
350                       3176.43                       19074.28
400                       3331.61                       19311.28
450                       3092.27                       19254.23
500                       3349.67                       19035.88
550                       3393.28                       19163.05
600                       3194.04                       19292.97
650                       3010.47                       19151.33
700                       2627.54                       19130.74  
750                       2584.28                       19114.10
800                       3080.34                       18917.16 
850                       2410.97                       18931.09
900                       2409.68                       18929.79
950                       2552.35                       18757.52




当数据库连接数不断增加时(从100~1600,每次递增300),MySQL平均每秒处理事务(读写混合模式和只读模式)的能力。该测试方案中, 表的大小不变,始终是100万行;表的类型是innodb;测试过程是否完成以处理的事务数来计算,即MySQL完成了10万次的事务数(读或写)后,测 试完成。


Number of threads          r/w requests(per sec)         ro requests(per sec)
100                           16236.56                     17830.93
400                           15264.16                     16887.94
700                           14451.64                     16098.99
1000                          13205.48                     15585.24
1300                          11515.82                     15003.21
1600                          11174.15                     14853.42                                


当数据库中表的行数不断增加时(从50万~1000万,每次递增50万行),MySQL平均每秒处理事务(读写混合模式和只读模式)的能力。该测试 方案中,表的连接数始终为100;表的类型是innodb;测试过程是否完成以时间来计算,即测试时间到达5分钟时,测试结束.


Number of rows(万)     r/w requests(per sec)         ro requests(per sec)

50                        10540.20                      16035.51
100                       8682.30                       19386.30
150                       7305.14                       18139.83
200                       6167.34                       18412.11 
250                       5249.51                       16992.13
300                       5310.19                       16580.87 
350                       5117.60                       16345.63
400                       4910.79                       16271.11
450                       4873.36                       15967.92
500                       3801.04                       15822.00
550                       2673.22                       15616.34
600                       3452.95                       15492.08
650                       4292.84                       15592.77
700                       4032.98                       15665.26  
750                       4405.47                       15600.65
800                       3841.63                       15428.73
850                       3601.08                       15537.42
900                       3818.06                       15562.98
950                       2654.81                       15454.84

  评论这张
 
阅读(12)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018