1、环境说明
192.168.228.15 test1
192.168.228.16 test2
以上2台机器在cetos 6.5下,已安装mysql5.5.37
2、配置mysql
1) 在两台机器上给对方授权
在192.168.228.15上授权test2
mysql>GRANT ALL PRIVILEGES ON *.* TO 'rep1'@'192.168.228.16' IDENTIFIED BY 'password';
在192.168.228.16上授权给test1
mysql>GRANT ALL PRIVILEGES ON *.* TO 'rep1'@'192.168.228.15' IDENTIFIED BY 'password';
2)配置主配置文件
配置数据库配置文件my.cnf,系统默认位置:/etc/my.cnf
源码编译安装,按照安装路径位置查找
在test1上
[mysqld]
server-id = 1
log-bin = mysql-bin
log-slave-updates
auto-increment-increment = 2
auto-increment-offset = 1
binlog-ignore-db=mysql
replicate-ignore-db=mysql
在test2上
[mysqld]
server-id = 2
log-bin = mysql-bin
log-slave-updates
auto-increment-increment = 2
auto-increment-offset = 2
binlog-ignore-db=mysql
replicate-ignore-db=mysql
注:二库都只有server-id不同和 auto-increment- offset不同
auto-increment-offset是用来设定数据库中自动增长的起点的,回为这两能服务器都设定了一次自动增长值2,所以它们的起点必须得不同,这样才能避免两台服务器数据同步时出现主键冲突
replicate-do-db 指定同步的数据库,我们只在两台服务器间同步mydb数据库
binlog-do-db= #需要记录二进制日志的数据库.如果有多个数据库可用逗号分隔,或者使用多个binlog-do-db选项
binlog-ignore-db=mysql #不需要记录进制日志的数据库.如果有多个数据库可用逗号分隔,或者使用多个binlog-ignore-db选项
replicate-do-db= #需要进行同步的数据库.如果有多个数据库可用逗号分隔,或者使用多个binlog-do-db选项
replicate-ignore-db=mysql,information_schema #不需要同步的数据库.如果有多个数据库可用逗号分隔,或者使用多个binlog-do-db选项
#同步参数:
#保证slave挂在任何一台master上都会接收到另一个master的写入信息
log-slave-updates
sync_binlog=1
auto_increment_offset=2
auto_increment_increment=2
slave-skip-errors=all #过滤掉一些没啥大问题的错误
另:auto-increment-increment的值应设为整个结构中服务器的总数,本案例用到两台服务器,所以值设为2
#配置完成后,重启两台数据库
service mysqld restart 或者命令重启(源码编译安装时)
3、同步两台数据库
本列以安装的默认数据库test测试
分别在两台数据库中,执行下命令,查看potion,以及binlog。(因为我的两台数据库都是新安装的,所以binlog以及potion都一样,如果是使用已有的数据库,首先需要把两台数据库同步,可以使用mysqldump工具。然后查看binlog,以及potion的位置。)
mysql> show master status;
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000004 | 324 | | |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)
##在 test1 上 (若是配置主从复制,以test1为主服务器,此处不用配置)
mysql> stop slave;
mysql> CHANGE MASTER TO master_host='192.168.228.16', master_user='rep1', mysql> master_password='password', MASTER_LOG_FILE='mysql-bin.000004', MASTER_LOG_POS=324;
mysql> start slave;
##在 test2 上mysql> stop slave;
mysql> CHANGE MASTER TO master_host='192.168.228.15', master_user='rep1', master_password='password', MASTER_LOG_FILE='mysql-bin.000004', MASTER_LOG_POS=324; (若是配置主从复制,此处的MASTER_LOG_FILE='mysql-bin.000004', MASTER_LOG_POS=324为主服务器test1的状态信息)
mysql> start slave;
##分别查看两台数据库的slave状态。
mysql> show slave status\G
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
##都为yes就ok了
4、验证mysql主主
###好了现在我们来验证吧。。。
在test1的test数据库中创建表
mysql>use test;
mysql>create table haifengtest ( name varchar(15) not null, city varchar(15) not null, birth date not null);
在test2的mysqldb数据库中能够查看到该表
mysql> show tables;
+-------------------+
| Tables_in_mysqldb |
+-------------------+
| haifengtest |
+-------------------+
1 row in set (0.00 sec)
在test2中向表haifengtest插入数据
insert into haifengtest values ("haifeng","beijing","1986-12-09");
在test1中查看表haifengtest
mysql> select * from haifengtest;
+---------+---------+------------+
| name | city | birth |
+---------+---------+------------+
| haifeng | beijing | 1986-12-09 |
+---------+---------+------------+
1 row in set (0.00 sec)
###好了 第一步 mysql主主大公告成。。。。