mysql配置有两个_mysql双主配置

百度搜索了那么多文章,真正精华的还需要自己去提炼 并且自己去动手。下面给大家分享我的原创。自己动手丰衣足食。

首先说说原理吧,如下:

在主主复制结构中,两台服务器的任何一台上面的数据库存发生了改变都会同步到另一台服务器上,这个改变是基于sql语句的改变,如果删除系统数据库源文件或删除后新创建同名MYSQL表实现同步则无效。这样两台服务器互为主从,并且都能向外提供服务,这就比使用主从复制具有更好的性能.

双主的设置

从原理论来看MySQL也支持双主的设置,即两个MySQL节点互为主备,不过虽然理论上,双主只要数据不冲突就可以工作的很好,但实际情况中还是很容发生数据冲突的,比如在同步完成之前,双方都修改同一条记录。因此在实际中,最好不要让两边同时修改。即逻辑上仍按照主从的方式工作。但双主的设置仍然是有意义的,因为这样做之后,切换主备会变的很简单。因为在出现故障后,如果之前配置了双主,则直接切换主备会很容易。

双主在设置时,只需将上面的一段设置复制一份,分别写入两个MySQL节点的配置文件,但要修改相应的server-id,auto-increment-offset和master-host。auto-increment-offset就是为了让双主同时在一张表中进行添加操作时不会出现id冲突,所以在两个节点上auto-increment-offset设置为不同的值就好。

步骤如下:

实验环境

服务器名

IP

系统

MySQL

A

192.168.1.56

centos6.5

5.5.16

B

192.168.1.55

centos6.5

5.5.16

(一)在ServA上增加一个ServB可以登录的帐号:

Mysql>GRANT all privileges ON *.* TO tongbu@'192.168.1.55' IDENTIFIED BY '123456';

在ServB上增加一个ServA可以登录的帐号:

Mysql>GRANT all privileges ON *.* TO tongbu@'192.168.1.56' IDENTIFIED BY '123456';

(二)修改my.cnf

1、 以root用户登录ServA,修改ServA的my.cnf文件

[root@A ~]# cat /usr/local/mysql55/etc/my.cnf

[mysqld]basedir = /usr/local/mysql55datadir = /usr/local/mysql55/datalog-error = /usr/local/mysql55/log/mysql_error.logpid-file = /usr/local/mysql55/mysql.piduser = mysqltmpdir = /tmp/mysql_tmp#port = 3306log-bin=mysql-binserver-id=1binlog-do-db=mydb            #需要记录进制日志的数据库.如果有多个数据库可用逗号分隔,或者使用多个binlog-do-db选项

binlog-ignore-db=mysql     #不需要记录进制日志的数据库.如果有多个数据库可用逗号分隔,或者使用多个binlog-do-db选项replicate-do-db=mydb        #需要进行同步的数据库.如果有多个数据库可用逗号分隔,或者使用多个replicate-do-db选项binlog-ignore-db=mysql      #不需要同步的数据库.如果有多个数据库可用逗号分隔,或者使用多个replicate-ignore-db选项#同步参数:#保证slave挂在任何一台master上都会接收到另一个master的写入信息

log-slave-updatessync_binlog=1auto_increment_offset=2auto_increment_increment=2slave-skip-errors=all             #过滤掉一些没啥大问题的错误

---------------------------------------------------------------------------------------------

2、以root用户登录ServB,修改ServB的my.cnf文件

root@B etc]# cat my.cnf

[mysqld]

basedir = /usr/local/mysql55

datadir = /usr/local/mysql55/data

log-error = /usr/local/mysql55/log/mysql_error.log

pid-file = /usr/local/mysql55/mysql.pid

user = mysql

tmpdir = /tmp/mysql_tmp

#port = 3306

log-bin=mysql-bin

server-id=2

binlog-do-db=mydb            #需要记录进制日志的数据库.如果有多个数据库可用逗号分隔,或者使用多个binlog-do-db选项

binlog-ignore-db=mysql     #不需要记录进制日志的数据库.如果有多个数据库可用逗号分隔,或者使用多个binlog-do-db选项

replicate-do-db=mydb        #需要进行同步的数据库.如果有多个数据库可用逗号分隔,或者使用多个replicate-do-db选项

binlog-ignore-db=mysql      #不需要同步的数据库.如果有多个数据库可用逗号分隔,或者使用多个replicate-ignore-db选项

#同步参数:

#保证slave挂在任何一台master上都会接收到另一个master的写入信息

log-slave-updates

sync_binlog=1

auto_increment_offset=2

auto_increment_increment=2

slave-skip-errors=all             #过滤掉一些没啥大问题的错误

---------------------------------------------------------------------------------------------------------

㈢ 分别重启服务器A,B上的mysql服务

㈣ 分别在服务器A、B 上查看做为主服务器状态

对于A服务器:

mysql> stop slave;

Query OK, 0 rows affected (0.02 sec)

mysql> flush tables with read lock;

Query OK, 0 rows affected (0.00 sec)

mysql> show master status\G;

*************************** 1. row ***************************

File: mysql-bin.000015

Position: 107

Binlog_Do_DB: mydb

Binlog_Ignore_DB: mysql

1 row in set (0.00 sec)

ERROR:

No query specified

对于B服务器:

mysql> stop slave;

Query OK, 0 rows affected (0.02 sec)

mysql> flush tables with read lock;

Query OK, 0 rows affected (0.00 sec)

mysql> show master status\G;

*************************** 1. row ***************************

File: mysql-bin.000023

Position: 107

Binlog_Do_DB: mydb

Binlog_Ignore_DB: mysql

1 row in set (0.00 sec)

ERROR:

No query specified

㈤ 分别在服务器A、B上用change master语句指定同步位置:

对于A:

change master to master_host='192.168.1.55',master_user='tongbu',master_password='123456',master_log_file='mysql-bin.000023',master_log_pos=107;

注:master_log_file,master_log_pos由上面主服务器查出的状态值中确定master_log_file对应File,master_log_pos对应Position

对于B:

change master to master_host='192.168.1.56',master_user='tongbu',master_password='123456',master_log_file='mysql-bin.000015',master_log_pos=107;

分别在服务器A、B上查看从服务器状态 :

mysql> show slave status\G;*************************** 1. row ***************************主要关注以下 2 个参数:......Slave_IO_Running: YesSlave_SQL_Running: Yes......EVEN上:mysql> show slave status\G;*************************** 1. row ***************************主要关注以下 2 个参数:......Slave_IO_Running: YesSlave_SQL_Running: Yes......

㈦ 测试

在severA上:

mysql> unlock tables;

mysql> use mydb;

mysql> create table abc(id int);

mysql>insert into abc values(1);

在serverB上:

mysql> select * from abc.mydb;

ERROR 1146 (42S02): Table 'abc.mydb' doesn't exist

mysql> select * from mydb.abc;

+------+

| id   |

+------+

|    1 |

+------+

1 row in set (0.00 sec)

mysql> unlock tables;

Query OK, 0 rows affected (0.00 sec)

到此mysql双主配置完成!!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值