主主复制:
我们之前的主从配置中,2台服务器地位有差别:一主一从(从服务器一是起到备份作用,一是起到分担查询压力的作用)
接下来的配置,2台服务器之间将会没有明显的地位差距,两者可以同步对方的内容。原理很简单:就是这两台服务器互为主从,相互同步
具体实现步骤:
①两台服务器的my.conf配置文件中既是主,也是从(server-id要唯一)
②互为主从:
③mysql版本低于5.6注意设置binlog_checksum=none
Last_IO_Error: Got fatal error 1236 from master when reading data from binary log: 'Slave can not h
Binlog中最容易踩到的坑
主主复制主键冲突问题解决方案:
2台mysql地位相等, 假如2个请求同时到达2台服务器。请求A节点,stu的id为1。请求的B节点,stu的id也为1,这时候主键很容易冲突。
让A服务器的主键id从1,3,5,7来增长(从1开始自增,偏移量2)
set global auto_increment_increment = 2;
set global auto_increment_offset = 1;
set session auto_increment_increment = 2;
set session auto_increment_offset = 1;
让B服务器的主键id从2,4,6,8来增长(从2开始自增,偏移量2)
set global auto_increment_increment = 2;
set global auto_increment_offset = 2;
set session auto_increment_increment=2;
set session auto_increment_offset = 2;
假如后期我们还需要加sql服务器,我们还可以用其他办法去限制。比如在oracle有sequnce,序列(序列每次访问,生成递增/递减的数)
以redis为例,我们可以专门构建一个global:userid。每次PHP插入mysql前,执行incr->global:userid, 得到一个递增的userid
被动模式下的主主复制:
是指2台服务器地位一样, 但其中一台为只读,并且业务中也只写某1台服务器.
好处:如果供写入的服务器出了故障,能迅速的切换到从服务器, 或者出于检修等目的,把写入功能切换到另一台服务器也比较方便.
环形结构
即3台服务器,每台服务器均与其前/后的服务器形成master/slave的关系
不好之处:任一台服务器坏了,影响其他2台. 不如2台形成的主主复制稳定.
在客户端中的应用 :
①直接在mysql基类做判断,不需要添加任何软件。比如discuz论坛
②用集群中间件
官方:mysql-proxy
国产:amoeba