Mysql的主从复制至少是需要两个Mysql的服务,当然Mysql的服务是可以分布在不同的服务器上,也可以在一台服务器上启动多个服务。
(1)首先确保主从服务器上的Mysql版本相同,我使用的是mysql5.6.14版本
一、MYSQL安装
http://blog.csdn.net/u010969226/article/details/44152755
二、场景描述:
服务器A:192.168.10.1,MySQL已经安装,并且无应用数据。
服务器B:192.168.10.2,MySQL已经安装,并且无应用数据。
三、服务器A
1、创建同步帐号
mysql> GRANT REPLICATION SLAVE ON *.* TO 'mysync'@'192.168.10.2' IDENTIFIED BY '123456';
mysql> flush privileges;
2、开启归档日志
修改主数据库的配置文件my.cnf,开启BINLOG,并设置server-id的值,修改之后必须重启Mysql服务
[mysqld]
log-bin = mysql-bin
server-id=1
binlog-do-db=test #指定数据库生成binlog日志,默认所有
replicate-do-db=test #复制的数据库,默认所有
binlog-ignore-db=mysql #不对mysql库进行日志记录操作,默认所有
replicate-ignore-db=mysql #不复制的数据库,默认所有
relay-log=mysql-relay-bin
relay-log-index=mysql-relay-bin
3、获取主服务器当前二进制日志名和偏移量,这个操作的目的是为了在从数据库启动后,从这个点开始进行数据的恢复
mysql> show master status\G;
*************************** 1. row ***************************
File: mysql-bin.000001
Position: 143
Binlog_Do_DB:
Binlog_Ignore_DB:
1 row in set (0.00 sec)
4、设置服务器B信息
mysql>change master to
master_host='192.168.10.2',
master_user='mysync',
master_password='123456',
master_log_file='mysql-bin.000001',
master_log_pos=243;
5、启动slave进程
mysql> start slave;
四、服务器B
1、创建同步帐号
mysql> GRANT REPLICATION SLAVE ON *.* TO 'mysync'@'192.168.10.1' IDENTIFIED BY '123456';
mysql> flush privileges;
2、开启归档日志
修改主数据库的配置文件my.cnf,开启BINLOG,并设置server-id的值,修改之后必须重启Mysql服务
[mysqld]
log-bin = mysql-bin
server-id=2
binlog-do-db=test #指定数据库生成binlog日志,默认所有
replicate-do-db=test #复制的数据库,默认所有
binlog-ignore-db=mysql #不对mysql库进行日志记录操作,默认所有
replicate-ignore-db=mysql #不复制的数据库,默认所有
relay-log=mysql-relay-bin
relay-log-index=mysql-relay-bin
3、获取主服务器当前二进制日志名和偏移量,这个操作的目的是为了在从数据库启动后,从这个点开始进行数据的恢复
mysql> show master status\G;
*************************** 1. row ***************************
File: mysql-bin.000001
Position: 243
Binlog_Do_DB:
Binlog_Ignore_DB:
1 row in set (0.00 sec)
4、设置服务器A信息
mysql>change master to
master_host='192.168.10.1',
master_user='mysync',
master_password='123456',
master_log_file='mysql-bin.000001',
master_log_pos=143;
5、启动slave进程
mysql> start slave;
五、测试主主数据库配置
1、查看服务器A
mysql> SHOW SLAVE STATUS\G
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: localhost
Master_User: root
Master_Port: 3306
Connect_Retry: 3
Master_Log_File: mysql-bin.003
Read_Master_Log_Pos: 79
Relay_Log_File: gbichot-relay-bin.003
Relay_Log_Pos: 548
Relay_Master_Log_File: mysql-bin .003
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
2、查看服务器B
mysql> SHOW SLAVE STATUS\G
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: localhost
Master_User: root
Master_Port: 3306
Connect_Retry: 3
Master_Log_File: mysql-bin.003
Read_Master_Log_Pos: 79
Relay_Log_File: gbichot-relay-bin.003
Relay_Log_Pos: 548
Relay_Master_Log_File: mysql-bin .003
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
到此,主主数据库已经配置好了。
在数据操作的ddl及dml操作,都会同步到另外一个数据库,并且不会循环。
答:slave 端从master端binlog中读取到的日志存放在自己的relay-log文件中,然后转化成可以执行的sql语句进行执行,这样就不存在无限循环的问题。