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

勇敢的劳尤条

 
 
 

日志

 
 

ubuntu12.04 mysql主从同步(测试成功)-->主主同步(测试成功)  

2013-09-06 11:04:34|  分类: mysql相关 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
首先,简单介绍下mysql主从复制的原理:
        MySQL复制基于主服务器在二进制日志中跟踪所有对数据库的更改(更新、删除等等)。因此,要进行复制,必须在主服务器上启用二进制日志。每个从服务器从主服务器接收主服务器上已经记录到其二进制日志的保存的更新。当一个从服务器连接主服务器时,它通知主服务器定位到从服务器在日志中读取的最后一次成功更新的位置。从服务器接收从那时起发生的任何更新,并在本机上执行相同的更新。然后封锁并等待主服务器通知新的更新。从服务器执行备份不会干扰主服务器,在备份过程中主服务器可以继续处理更新。
        MySQL使用3个线程来执行复制功能,其中两个线程(Sql线程和IO线程)在从服务器,另外一个线程(IO线程)在主服务器。当发出START SLAVE时,从服务器创建一个I/O线程,以连接主服务器并让它发送记录在其二进制日志中的语句主服务器创建一个线程将二进制日志中的内容发送到从服务器。该线程可以即为主服务器上SHOW PROCESSLIST的输出中的Binlog Dump线程从服务器I/O线程读取主服务器Binlog Dump线程发送的内容并将该数据拷贝到从服务器数据目录中的本地文件中,即中继日志第3个线程是SQL线程,由从服务器创建,用于读取中继日志并执行日志中包含的更新。在从服务器上,读取和执行更新语句被分成两个独立的任务。当从服务器启动时,其I/O线程可以很快地从主服务器索取所有二进制日志内容,即使SQL线程执行更新的远远滞后。(所以,主从同步的延时问题,会影响性能,有时候不得不考虑。)
http://www.mike.org.cn/articles/mysql-master-slave-sync-conf-detail/ 这个链接讲得很详细,获益良多。但是我是基于ubuntu实现的,所以只学习了其中的原理部分。
 
********************************************************************************************************************
下面是实现过程。
先介绍环境。我的环境是vmware9.0下安装了两个ubuntu12.04,NAT上网方式。
服务器A:192.168.95.134(作为Master)
服务器B:192.168.95.135(作为slave)
下面介绍配置。首先服务器A和B都已经安装了mysql和kamailio、siremis,所以直接用kamailio数据库进行测试。

服务器A的配置
1)vim /etc/mysql/my.cnf
找到 bind-address = 127.0.0.1,注释掉,目的是为了能够支持网络登录
2)将下面的两句话的注释符号去掉,如下
server-id               = 1
log_bin                 = /var/log/mysql/mysql-bin.log
接着,修改 binlog-do-db = kamailio 需要同步的库
ps:binlog-ignore-db与binlog-do-db正好相反,只想同步几个库,应该使用binlog-do-db,如果不想同步其中的几个,就使用binlog-ignore-db
3)创建一个从机同步账户。
create user slave identified by 'password';
grant replication slave on *.* to 'slave'@'%' identified by 'password';
flush privileges;
4)重启mysql。sudo service mysql restart 或者 sudo /etc/init.d/mysql restart
show master status \G; #\G是为了垂直显示

服务器B的配置
1)与上面十分相似,vim /etc/mysql/my.cnf
server_id =2  #注释,server_id要和master机器的不一样
log_bin=/var/log/mysql/mysql-bin.log
replicate-do-db=kamailio #需要添加,同步的数据库
2)重启mysql。接着进入mysql。
stop slave;
CHANGE MASTER TO MASTER_HOST='192.168.95.134', MASTER_USER='slave',Master_Port=3306,MASTER_PASSWORD='password';
start slave;
show slave status\G;
最后看到一大列信息。如果下面两个数据是yes,那么说明成功。
Slave_IO_Running: Yes
Slave_SQL_Running: Yes 

测试
1)我在服务器A上面,增加、删除、修改数据库,服务器B上面都有相应改变。
2)kamailio的数据用siremis管理。

PS:
如果主库有数据,那么我们必须将主库的数据复制一份到从库。
举例:flush tables with read lock;#锁表,防止赋值到不完整的数据
tar -zcvf mysql-master-kamailio.tar.gz kamailio //将kamailio数据库打包, /var/lib/mysql
unlock tables;#解锁
然后copy一份到从机。解压tar -xzvf mysql-master-kamailio.tar.gz
最后修改权限 chmod -R mysql:mysql kamailio,kamailio的u+g都是mysql。

 

***********************************************************************************************************

最后根据上面的结果,进行mysql的主主同步。
因为服务器A和B的地位是一样的,所以他们的配置也应该一样。

1)vim /etc/mysql/my.cnf
bind-address = 127.0.0.1,注释掉,目的是为了能够支持网络登录
接着,添加(或者修改)下面内容:
server-id               = 1   # 各服务器的id必须不同
log_bin                 = /var/log/mysql/mysql-bin.log
binlog_do_db = kamailio  # 主库想要被同步的数据库
replicate_do_db=kamailio  # 从库想要同步的数据库

2)在每个服务器上,创建一个从机同步账户(因为每个服务器都要做Master)。
create user slave identified by 'password';
grant replication slave on *.* to 'slave'@'%' identified by 'password';
flush privileges;

3)最后一步告诉slave主机在哪里以及其他信息。
stop slave;
CHANGE MASTER TO MASTER_HOST='192.168.95.134', MASTER_USER='slave', Master_Port=3306, MASTER_PASSWORD='password', MASTER_LOG_FILE='mysql-bin-000018', MASTER_LOG_POS=137; #这里,host要选择相应的主机ip,master_log file和pos要根据主机上面show master status 显示的实际内容添加。
start slave;
show slave status\G;

到此完成。

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

历史上的今天

评论

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

页脚

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