牛刀小试MySQL学习—MySQL 双主
2024-08-26 04:29:01
双主其实说白了也是一个replication,只是推出一些新的拓扑结构
主-主的复制有两种模式:
主动-主动模式下的主-主复制(Master-Master in Active-Active Mode)
模式下的主-主复制(Master-Master in Active-Passive Mode)
当然还有,环形和有从服务器的主-主复制,不过都是上面的延生。
关于第一种的双主模式,肯定是会产生数据冲突的。虽然可以使用配置
auto_increment_increment=2和auto_increment_offset=1可以解决
自动插入的问题,允许同时插入数据的话,数据还是会不一致的。例如:
下面的两个命令同时执行:
第一个主服务器:
mysql>update tbl set col=col +1;
第二个主服务器:
mysql>update tbl set col=col*2;
结果是什么?一个服务器的值为4,而另外一个为3.并且根本没有replication的错误。
所以,个人建议主动-被动的双主模式,只让一台服务器写就行了,让它对外服务,
另外一台作为备用。只接受数据。
下面开始进入正题,如何配置双主。
第一步,启动来台数据库的时候,mysql.cnf都得配置下面的语句
3306:
server-id = 323306
log_slave_updates = 1
auto_increment_increment=2
auto_increment_offset=1
3307:
server-id = 323307
log_slave_updates = 1
auto_increment_increment=2
auto_increment_offset=2
read-only(保证只读)
当然每台服务器的port,user,socket,pid-file,basedir,datadir,tmpdir以及与log相关的:log-bin(这个是必须开启的),slow_query_log_file(当然也要开启)等等。就不说了。
这里最重要的就是log_slave_updates,没有它,双主是配不成的,关于它的详细介绍。在如下网址:
http://dev.mysql.com/doc/refman/5.5/en/replication-options-slave.html#option_mysqld_log-slave-updates
说白了,就是可以A -> B -> C,保证A可以作为master,复制到B,B可以作为master,复制到C.所以呢,如果A和B互相的话,就是双主了。
第二步,接着就是两台服务器都配上repl用户。
mysql> CREATE USER 'repl'@'192.168.1.50' IDENTIFIED BY 'repl';
mysql> GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.1.50';
备注:'192.168.1.50'这个IP,是告诉来自于这个IP的主机有REPLICATION SLAVE的权限。
第三步,就跟配置replication是一样的。保证一致性的备份。
SHOW MASTER STATUS;知道对应的binlog.
再在slave上面进行change master to
mysql>CHANGE MASTER TO
MASTER_HOST = '192.168.1.40',
MASTER_PORT = 3306,
MSTER_USER = 'repl',
MASTER_PASSWORD = 'repl',
MASTER_LOG_FILE = 'mysql-bin.000004',
MASTER_LOG_POS = 107;
接着换过来,由于slave接受了master的binlog,自己又设置了log_slave_updates而且binlog也同时打开了,所以salva也可以看到自己的binlog。接着把上面的事情,同样再做一遍。即可
这样,双主就算配置成功。(没有什么太详细的步骤,不过基本上都说到位了。配置的话,跟mysql replication一致。http://blog.chinaunix.net/uid-26446098-id-3267475.html可以参考此文)
最新文章
- golang枚举类型 - iota用法拾遗
- No zuo no die:DDD 应对具体业务场景,Domain Model 重新设计
- 实战Java虚拟机之三“G1的新生代GC”
- 关于C++的递归(以汉诺塔为例)
- AlwaysOn 同步时间的测试
- 百度浏览器+hao123评价
- keepalived工作原理和配置说明 腾讯云VPC内通过keepalived搭建高可用主备集群
- C#:绘图问题
- mysql数据类型最大长度记录
- Python: 无参数的函数装饰器
- SQL优化(Oracle)
- VC编程命名方法
- Python网络编程——设定并获取默认的套接字超时时间
- cocos2d-x游戏开发系列教程-中国象棋06-游戏规则
- 一个网友写的栈,问为啥不能迭代。具有__iter__ 和next方法的对象叫迭代器-七七巴巴黄页网
- PHP集成环境自定义设置PHP版本,同时运行多个php版本,700个PHP版本随时切换,一键开启常用模块。
- 03_TortoiseGit冲突和补丁演示,补丁冲突
- 8 款macOS 分屏应用让你的桌面窗口不再乱糟糟
- blfs(systemv版本)学习笔记-编译安装i3-wm平铺式窗口管理器
- 工控安全入门之Modbus(转载)