MySQL 实现双向复制的方法指南
简介
我知道有很多文章和指南介绍在互联网上实现主-从复制。在主-从复制中,主机影响从机。但从数据库中的任何更改不会影响主数据库,这篇文章将帮助你实现双向复制。(即,无论是主机还是从机的更改都将影响这两个服务器)。
背景
你能参考AadharJoshi的这篇文章实现主从复制,或者您可以按照以下简单的步骤:
参考一下:
在机器A配置主机(192.168.1.30)
在机器B配置从机(192.168.1.29)
我们可以使用下面的步骤来实现这一点
步骤1:机器A设置主机
在主机中打开配置文件,默认文件位置为C:\ProgramFiles\MySQL\MySQLServer5.0\my.ini
在服务端部分用[mysqld]替换[mysqld]
server-id=1 log-bin=mysql-bin innodb_flush_log_at_trx_commit=1 sync_binlog=1 binlog_do_db=demo port=3306
保存配置文件然后关闭
重启mysql服务使其生效。
Step2:机器B设置从机:
在从机中打开mysql配置文件,默认位置为C:\ProgramFiles\MySQL\MySQLServer5.0\my.ini
在服务端部分用下面代码替换[mysqld]
[mysqld] server-id=2 log-bin=mysql-bin innodb_flush_log_at_trx_commit=1 sync_binlog=1
保存配置文件,关闭
重启mysql服务使之生效。
where:
server-id=1→服务的唯一标识.在主从中必须不同。
log-bin=mysql-bin→要在InnoDB复制设置中使用事务,保证最好的持久性和一致性,你应该使用innodb_flush_log_at_trx_commit=1andsync_binlog=1.
binlog_do_db=demo→要复制的数据库
port=3306→默认数据库端口
Step3:主机中创建用户
打开mysql命令行
mysql>GRANTREPLICATIONSLAVEON*.*TO'replicator'@'%'IDENTIFIEDBY'replication';
现在我们用这个命令‘showmasterstatus'来确定当前二进制日志文件的文件名和位置。记住这个细节!在我们的事例中得到以下输出:
mysql>showmasterstatus;
+------------------+----------+--------------+------------------+ |File|Position|Binlog_Do_DB|Binlog_Ignore_DB| +------------------+----------+--------------+------------------+ |mysql-bin.000153|106||| +------------------+----------+--------------+------------------+ 1rowinset(0.00sec)
继续:mysql>FLUSHPRIVILEGES;
选择数据库:mysql>USEnewdatabase;
锁数据库防止任何新的更改:FLUSHTABLESWITHREADLOCK;
Step4:连接主从:
打开mysql命令行
停止从机:Stopslave;
执行命令
mysql>CHANGEMASTERTO ->MASTER_HOST='192.168.1.30', ->MASTER_USER='replicator', ->MASTER_PASSWORD='replication', ->MASTER_LOG_FILE='mysql-bin.000153', ->MASTER_LOG_POS=106;
4.重启从机开始复制:StartSlave;
同样可以点Master-SlaveReplication.
实现双向复制的方法
第一步:在从机创建主机用户
打开从机的mysql命令行(192.168.1.29)
mysql>GRANTREPLICATIONSLAVEON*.*TO'master_replicator'@'%'IDENTIFIEDBY'master';
现在我们用这个命令‘showmasterstatus'来确定当前二进制日志文件的文件名和位置。记住这个细节!在我们的事例中得到以下输出:
showmasterstatus;
+------------------+----------+--------------+------------------+ |File|Position|Binlog_Do_DB|Binlog_Ignore_DB| +------------------+----------+--------------+------------------+ |mysql-bin.000153|106||| +------------------+----------+--------------+------------------+ 1rowinset(0.00sec)
继续:mysql>FLUSHPRIVILEGES;
选择数据库:mysql>USEnewdatabase;
锁数据库防止任何新的更改:FLUSHTABLESWITHREADLOCK;
Step2:用主机用户连接从机(192.168.1.30):
在主机上打开mysql命令行
停止从机:Stopslave;
执行命令
mysql>CHANGEMASTERTO ->MASTER_HOST='192.168.1.29', ->MASTER_USER='master_replicator', ->MASTER_PASSWORD='master', ->MASTER_LOG_FILE='mysql-bin.000153', ->MASTER_LOG_POS=106;
4.重启从机开始复制:StartSlave;
下面命令检查系统状态:
SHOWSLAVESTATUS\G;
你可以看到192.168.1.30:
mysql>SHOWSLAVESTATUS\G; ***************************1.row*************************** Slave_IO_State:Waitingformastertosendevent Master_Host:192.168.1.29 Master_User:slave_user Master_Port:3306 Connect_Retry:60 Master_Log_File:mysql-bin.000013 Read_Master_Log_Pos:98 Relay_Log_File:PC-relay-bin.000074 Relay_Log_Pos:235 Relay_Master_Log_File:mysql-bin.000013 Slave_IO_Running:Yes Slave_SQL_Running:Yes Replicate_Do_DB:demo Replicate_Ignore_DB: Replicate_Do_Table: Replicate_Ignore_Table: Replicate_Wild_Do_Table: Replicate_Wild_Ignore_Table: Last_Errno:0 Last_Error: Skip_Counter:0 Exec_Master_Log_Pos:98 Relay_Log_Space:235 Until_Condition:None Until_Log_File: Until_Log_Pos:0 Master_SSL_Allowed:No Master_SSL_CA_File: Master_SSL_CA_Path: Master_SSL_Cert: Master_SSL_Cipher: Master_SSL_Key: Seconds_Behind_Master:0 1rowinset(0.01sec)
ERROR: Noqueryspecified
感兴趣的方面
现在你能做些数据库操作,像插入删除更新删表截断等,也可以检查数据库是否正常工作。
重点记住:
1.在主机和从机中server_Id必须不同
2.验证日志文件是正确的设置
3.用这些命令检查
SHOWSLAVESTATUS\G;
Slave_IO_Running:Yes Slave_SQL_Running:Yes Slave_IO_State:Waitingformastertosendevent
以上就是本文的全部内容了,希望大家能够喜欢。
请您花一点时间将文章分享给您的朋友或者留下评论。我们将会由衷感谢您的支持!