主从复制的优点:
主从复制的工作原理:
主从复制的通过3个过程来实现,其中一个过程发生在主服务器上,另两个过程发生在从服务器。
Bin-Log日志以一种更有效的格式,并且是事务安全的方式包含更新日志中可用的所有信息。
Bin-Log日志包含了所有更新了数据或者已经潜在更新了数据(例如,没有匹配任何行的一个DELETE)的所有语句。语句以“事件”的形式保存,它描述数据更改。
注释:Bin-Log日志已经代替了老的更新日志,更新日志在MySQL 5.1中不再使用。
Bin-Log日志还包含关于每个更新数据库的语句的执行时间信息。它不包含没有修改任何数据的语句。如果你想要记录所有语句(例如,为了识别有问题的查询),你应使用一般查询日志。
Bin-Log日志的主要目的是在恢复使能够最大可能地更新数据库,因为Bin-Log日志包含备份后进行的所有更新。
Bin-Log日志还用于在主复制服务器上记录所有将发送给从服务器的语句
在mysql的配置文件(my.cnf)中,添加下面一行。
log-bin = mysql-bin
我这里没有指定存放路径,默认会存放在mysql的数据存放目录,所有的二进制文件都以mysql-bin开头,当然你也可以自己指定mysql bin-log的存放路径和名称。
保存mysql的配置文件,重启mysql
MySQL 赋予用户权限命令的简单格式可概括为:
grant 权限 on 数据库对象 to 用户
grant select, insert, update, delete on testdb.* to user@'%'
grant create,alter,drop on testdb.* to user@'192.168.0.%';
grant references on testdb.* to user@'192.168.0.%';
grant create temporary tables on testdb.* to user@'192.168.0.%';
grant index on testdb.* to user@'192.168.0.%';
grant create routine on testdb.* to user@'192.168.0.%'; grant alter routine on testdb.* to user@'192.168.0.%'; grant execute on testdb.* to user@'192.168.0.%';
grant all privileges on testdb to user@'localhost'
准备六台计算机,一台模拟外网的互联网用户(可以是Linux也可以是Windows),一台模拟Nginx负载均衡服务器(必须是Linux),另四台模拟真实的服务器(Linux)。我们这里使用VMWare安装CentOS5.6作为Nginx负载均衡服务器,另外用VMWare再clone四台CentOS5.6作为Real Server。用WMWare安装windows(我这里用的是windows2003)作为外网的互联网用户,做实验时,请将防火墙关掉。
在CentOS5.6关机状态下,进行克隆。右击VM->Manage->Clone->Next....
这里我将3个虚拟机命名为:CentOS5.6.11,CentOS5.6.12,CentOS5.6.13,CentOS5.6.14
根据上面的拓扑图可知,CentOS5.6作为LVS服务器,需要两个IP地址,所以我们给这个虚拟机在添加一个网卡。在CentOS5.6启动状态下:VM->Setting->Add->Network Adapter->Next->Finish
将CentOS5.6(LVS)的一块网卡设置为vmnet0,用于与外网通信,一块设置为vmnet1,用于与RealServer通信,windows2003作为外网的互联网用户,网卡设为vmnet0。CentOS5.6.11,CentOS5.6.12,CentOS5.6.13,CentOS5.6.14作为RealServe,网卡都设为vmnet1。我是在Ubuntu上安装的vmware,我的vmware配置如图:
nginx的upstream目前支持5种方式的分配
每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。
指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。例如:
upstream bakend { server 192.168.0.14 weight=10; server 192.168.0.15 weight=10; }
每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。例如:
upstream bakend { ip_hash; server 192.168.0.14:88; server 192.168.0.15:80; }
按后端服务器的响应时间来分配请求,响应时间短的优先分配。例如:
upstream backend { server server1; server server2; fair; }
按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。