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

baikgd的博客

技术是工具,生活是目的,更好的生活是目标!

 
 
 

日志

 
 

mysql 主从 主主 模式配置  

2009-10-29 10:37:22|  分类: MYSQL |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
一,主从模式
  • Master 端:
创建目录:
mkdir -p /var/log/mysql        
chown -R mysql:mysql /var/log/mysql //创建更新目录并赋予mysql用户权限
 
修改配置文件: 
vi /etc/my.cnf                            //编辑配置文件增加以下内容        
            
log-bin=mysql-bin                     //启动二进制日志系统        
binlog-do-db=test                     //二进制需要同步的数据库名        
server-id= 1                                //本机数据库ID        
log-bin=/var/log/mysql/updatelog        //设定生成log文件名,这里的路径没有mysql目录要手动创建并给于它mysql用户的权限        
binlog-ignore-db=mysql                    //避免同步mysql用户配置,以免不必要的麻烦
 
创建用于同步的用户:
mysql        
GRANT REPLICATION SLAVE,REPLICATION CLIENT,RELOAD,SUPER ON *.* TO 'replication'@'192.168.0.35' IDENTIFIED BY '123456';        
                                        //给从服务器用户replication 的同步权限        
Grant ALL PRIVILEGES ON test.* TO replication@'%' IDENTIFIED BY '123456';        
Flush privileges;                     //创建用户replication,密码123456,允许所有用户访问数据库test,并刷新权限    
 
复制数据到从库:
service mysqld stop        
(或对数据库进行锁操作        
mysql        
FLUSH TABLES WITH READ LOCK;        
)        
tar -cvf /root/db.tar /home/mysql/test    //备份主服务器需同步的数据库        
scp /root/db.tar root@192.168.0.x:/home/mysql     //上传数据到从服务器,这个过程中需要输入从服务器的密码。        
(UNLOCK TABLES;)        
service mysqld start        
mysql        
show master status;    
 
  • Slave 端:
修改配置文件:
vi /etc/my.cnf        
        
server-id=2                         //从服务器ID号        
master-host=192.168.0.30                //主服务器地址        
master-user=replication                 //指定在主服务器上可以进行同步的用户名        
master-password=123456                    //密码        
master-port=3306                        //端口号        
master-connect-retry=60                 //断点重连时间        
replicate-ignore-db=mysql             //屏蔽对mysql库的同步,以免有麻烦        
replicate-do-db=test                        //同步数据库名称    
 
装载主服务器数据库 :
 
tar -xvf /home/mysql/db.tar        
service mysqld start    
 
同步数据: 
mysql        
slave stop;        
CHANGE MASTER TO            
MASTER_HOST='192.168.0.31',        
MASTER_USER='replication',        
MASTER_PASSWORD='123456',        
MASTER_LOG_FILE='centos2-bin.000014',        
MASTER_LOG_POS=188;        
                                        //根据主服务器show master的结果,进行从服务器的二进制数据库记录回归,达到同步的效果。        
slave start;        
show slave status\G;
 
二,主主模式
 
思路,互为对方的从服务器.每台服务器即是对方的主服务器,又是对方的从服务器.
原slave端: 
mkdir -p /var/log/mysql        
chown -R mysql:mysql /var/log/mysql        
        
vi /etc/my.cnf                            //修改Slave配置文件,使之成为主服务器        
        
log-bin=mysql-bin        
log-bin=/var/log/mysql/updatelog        
binlog-do-db=test        
binlog-ignore-db=mysql        
        
mysql        
GRANT REPLICATION SLAVE,REPLICATION CLIENT,RELOAD,SUPER ON *.* TO 'replication'@'192.168.0.30' IDENTIFIED BY '123456';        
                                        //给从服务器用户replication 的同步权限        
Grant ALL PRIVILEGES ON test.* TO replication@'%' IDENTIFIED BY '123456';        
Flush privileges;                     //创建用户replication,密码123456,允许所有用户访问数据库test,并刷新权限    
 
原master端:
 
Master端:        
        
vi /etc/my.cnf        
        
master-host=192.168.0.35                //主服务器地址        
master-user=replication                 //指定在主服务器上可以进行同步的用户名        
master-password=123456                    //密码        
master-port=3306                        //端口号        
master-connect-retry=60                 //断点重连时间        
replicate-ignore-db=mysql             //屏蔽对mysql库的同步,以免有麻烦        
replicate-do-db=test                        //同步数据库名称        
        
        
mysql        
slave stop;        
CHANGE MASTER TO            
MASTER_HOST='192.168.0.30',        
MASTER_USER='replication',        
MASTER_PASSWORD='123456',        
MASTER_LOG_FILE='updatelog.000001',        
MASTER_LOG_POS=98;        
                                        //根据主服务器show master的结果,进行从服务器的二进制数据库记录回归,达到同步的效果。        
slave start;        
show slave status\G;
 

多主互备和主从复制有一些区别,因为多主中 都可以对服务器有写权限,所以设计到自增长重复问题

出现的问题(多主自增长ID重复)
1:首先我们通过A,B的test表结构
2:停掉A,在B上对数据表test(存在自增长ID)执行插入操作,返回插入ID为1
3:后停掉B,在A上对数据表test(存在自增长ID)执行插入操作,返回的插入ID也是1
4:然后 我们同时启动A,B,就会出现主键ID重复

解决方法:
我们只要保证两台服务器上插入的自增长数据不同就可以了
如:A查奇数ID,B插偶数ID,当然如果服务器多的话,你可以定义算法,只要不同就可以了

在这里我们在A,B上加入参数,以实现奇偶插入

A:my.ini上加入参数

DE>auto_increment_offset = 1
auto_increment_increment = 2
DE>
这样A的auto_increment字段产生的数值是:1, 3, 5, 7, …等奇数ID了

B:my.ini上加入参数

DE>auto_increment_offset = 2
auto_increment_increment = 2
DE>
这样B的auto_increment字段产生的数值是:2, 4, 6, 8, …等偶数ID了

可以看出,你的auto_increment字段在不同的服务器之间绝对不会重复,所以Master-Master结构就没有任何问题了。当然,你还可以使用3台,4台,或者N台服务器,只要保证auto_increment_increment = N 再设置一下auto_increment_offset为适当的初始值就可以了,那样,我们的MySQL可以同时有几十台主服务器,而不会出现自增长ID重复。

在这里我们说的是2台MYSQL服务器,你也可以扩展到多台,实现方法类似
A -> B -> C-> D ->A
这样一个环形的备份结构就形成了,最后可要记住 自增长ID(主键)要设计好哦,否则会出错的。

  评论这张
 
阅读(1252)| 评论(0)

历史上的今天

评论

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

页脚

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