我们以前用到时的主从复制然而区别不同的是
主从:备份的作用 服务器的地位是不一样的
主主:备份作用+分担查询压力的作用 服务器的地位是一样的
大致思路
1:2台服务器都设置上2进制日志和relay日志
2:都设置上replcation账号
3:都设置对方为自己的master
具体配置:两台配置一样唯一不同的是server-id
1.找到mysql的配置文件编辑
vim /etc/my.cnf
加上图片所示的内容如:
[mysqld]
# 开启binlog的日志功能
log-bin=mysql-bin
# binlog日志的格式
binlog_format=mixed
# 给服务一个编号注意不能重复
server-id = 74
# #开启relaylog
relay-log=mysql-relay
都配置完成之后该设置账号了 同样的是两台服务器都要设置
grant replication client ,replication slave on *.* to 'test'@'192.168.1.%' identified by 'test';
grant replication client ,replication slave on *.* to 'man'@'192.168.1.%' identified by 'man';
然后设置自己的master账号 同样的是两台服务器都要设置 注意账号密码
change master to
master_host='192.168.1.72',
master_user='test',
master_password='test',
master_log_file='mysql-bin.000001',
master_log_pos=106;
然而有些依据是有一定的一句在你的mysql器中
show master status;
会出现如图所示的内容
然后开启我们的slave 检查我们是否配置正确 如图所示是ok的
start slave;
show slave status \G
然后创建一个数据库测试一下
create database ce;
use ce;
CREATE TABLE `ce` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` char(4) DEFAULT NULL,
PRIMARY KEY (`id`)
);
#分别在不同的mysql中添加数据
insert into ce values(null,'a'),(null,'b');
然后查询这张表类似于这种效果
我们来考虑这样一个问题就是
如果是同时插入数据会是什么样的情况呢!
答:肯定要出错所谓的主键冲突
解决方案:
只要不让主键重复什么样的办法都是好办法 通常用到的一下的方法 也是两台服务器
set global auto_increment_increment = 2;
set global auto_increment_offset = 1;
set global auto_increment_increment = 2;
set global auto_increment_offset = 2;
MySQL的中AUTO_INCREMENT类型的属性用于为一个表中记录自动生成ID功能,可在一定程度上代替Oracle,PostgreSQL等数据库中的sequence 然而这样的效率没有像Oracle数据库效率高
注:auto-increment-increment 和 auto-increment-offset 要写到配置文件中,防止下次重启后失效.