2.环境说明

2.1    硬件环境(两台机器的硬件环境相同)

CPU

Inter(R) Pentium(R) Dual CPU E5200 @2.50GHz

内存大小

384MB

硬盘大小

8GB

其它说明

本机器为虚拟机,其有两块网卡,一对网卡直连,一对接入交换机

 

CPU

Inter(R) Pentium(R) Dual CPU E5200 @2.50GHz

内存大小

384MB

硬盘大小

8GB

其它说明

本机器为虚拟机,其有两块网卡,一对网卡直连,一对接入交换机

 

2.2    软件环境(两台机器的软件环境相同)

系统

Server 2003 Enterprise Edition

Java环境

jdk1.6.0

web平台

apache-tomcat-5.0

数据库

MySQL Server 5.0

ldap数据库

Sun ONE Directory Server 5.2

ha软件

蓝科泰达科技Pluswell

 

 

 

2.3    网络环境

主机名

ha001

IP地址

192.168.0.188

子网掩码

255.255.255.0

网关

192.168.0.1

DNS

192.168.0.1

公用虚拟IP

192.168.0.187

IP地址02

192.168.8.188

子网掩码02

255.255.255.0

 

主机名

ha002

IP地址

192.168.0.189

子网掩码

255.255.255.0

网关

192.168.0.1

DNS

192.168.0.1

公用虚拟IP

192.168.0.187

IP地址02

192.168.8.189

子网掩码02

255.255.255.0

 

3  mysql数据同步实现原理:

读写操作在两台服务器上进行,每台服务器即主也是从。当其中的任何一台服务器收到操作请求时,其进行相应的数据变化,并把变化的数据复制到另一台服务器中。

4数据同步实现

4.1    mysql数据双向同步

4.1.1    配置服务器ha001

初始服务器

通过mysql工具连接服务器ha001后,新建两个数据库audit,idm。导入初始化数据库文件,完成数据库的初始化

   给用户授权

从开始菜单中打开mysql5的命令行,输入正确的密码,进入mysql控制台命令行模式后,输入如下命令:

#授权来自192.168.0.189的backup用户拥有对所有库的复制数据的权限,该用户的密码设为123456

GRANT REPLICATION SLAVE ON *.* TO 'backup'@'192.168.0.189' IDENTIFIED BY '123456';

#刷新权限设置

FLUSH PRIVILEGES ;

  修改配置文件

修改主目录中的my.inf文件,在mysqld下面加入如下内容

server-id = 1

log-bin=mysql-bin

binlog-do-db = audit

binlog-do-db = idm

binlog-ignore-db = information_schema

binlog-ignore-db = mysql

binlog-ignore-db = test

 

master-host     = 192.168.0.189

master-user     = backup

master-password = 123456

master-port     = 3306

replicate-do-db = audit

replicate-do-db = idm

master-connect-retry = 60

 

4.1.2    配置服务器ha002

 初始服务器

通过mysql工具连接服务器ha002后,新建两个数据库audit,idm。导入初始化数据库文件,完成数据库的初始化

 给用户授权

从开始菜单中打开mysql5的命令行,输入正确的密码,进入mysql控制台命令行模式后,输入如下命令:

#授权来自192.168.0.188的backup用户拥有对所有库的复制数据的权限,该用户的密码设为123456

GRANT REPLICATION SLAVE ON *.* TO 'backup'@'192.168.0.188' IDENTIFIED BY '123456';

#刷新权限设置

FLUSH PRIVILEGES ;

 

  修改配置文件

修改主目录中的my.inf文件,在mysqld下面加入如下内容

server-id = 2

master-host     = 192.168.0.188

master-user     = backup

master-password = 123456

master-port     = 3306

replicate-do-db = audit

replicate-do-db = idm

master-connect-retry = 60

 

log-bin=mysql-bin

binlog-do-db = audit

binlog-do-db = idm

binlog-ignore-db = information_schema

binlog-ignore-db = mysql

binlog-ignore-db = test

 

4.1.3    启动两台服务器上的mysql从服务

在两台服务器上,均完成如下操作:

从开始菜单中打开mysql5的命令行,输入正确的密码,进入mysql控制台命令行模式后,输入如下命令:

#开启从服务器

slave start;

 

4.1.4    服务状态检查

在两台服务器上,均完成如下操作:

从开始菜单中打开mysql5的命令行,输入正确的密码,进入mysql控制台命令行模式后,输入如下命令:

#显示主服务器状态

Show master status;

#显示从服务器状态

Show slave status /G;

 查看连接配置状态:

Slave_IO_Running: Yes -----此项为No代表与主库连接有问题。

Slave_SQL_Running: Yes ----如果此项为NO代表配置有问题。

 查看对比pos点以及记录文件是否一致:

如果不一致,在从MySQL运行

#改变从服务器的pos点为98,记录文件为mysql-bin.000001

CHANGE MASTER TO Master_Log_File='mysql-bin.000001',Master_Log_Pos=98;

运行此命令前需要stop slave;之后再start slave;

4.1.5    双向同步测试

 检查当在两台机器的任何一台mysql中修改数据时,另外的那台的数据是否也修改

 关闭其中一台mysql的服务后,更新另一台mysql的数据,再启动已停止的那台mysql服务器,查看数据是否修改

4.1.6    特别注意事项

请在任何时候都不要非法关机,否则将会造成同步数据的错乱。

 当出现了非法关机时,为不影响数据,请执行如下操作

在该非法关机的机器启动后,检查该机器,查看数据是否与一直正常运行的机器一致了。确认其数据一致后。进入一直正常运行的机器,从开始菜单中打开mysql5的命令行,输入正确的密码,进入mysql控制台命令行模式后,输入如下命令:

#关闭slave服务

Slave stop;

#开启slave服务

Slave start;

通过这步后,一切即恢复正常

如果数据已经完全错乱,请先在两台机器上停止slave服务,然后将数据正常的服务器上的数据导入到不正常的服务器上,保证两边的服务器数据一致。然后到数据正常的服务器的mysql控制台下输入:

#显示主服务器状态

Show master status;

获取其状态后,根据这个状态到数据不正常服务器上,通过命令:

#改变从服务器的pos点为xx,记录文件为mysql-bin.0000xx

CHANGE MASTER TO Master_Log_File='mysql-bin.0000xx',Master_Log_Pos=xx;

修改其参数后,再通过

#开启从服务器

Start slave;

#显示从服务器状态,检查是否和主一致。

#检查Slave_IO_RunningSlave_SQL_Running状态是否正常

Show slave status /G;

确保一切正常后。再到数据不正常的服务器的mysql控制台下输入:

#显示主服务器状态

Show master status;

获取其状态后,根据这个状态到数据正常的服务器上,通过命令:

#改变从服务器的pos点为xx,记录文件为mysql-bin.0000xx

CHANGE MASTER TO Master_Log_File='mysql-bin.0000xx',Master_Log_Pos=xx;

修改其参数后,再通过

#开启从服务器

Start slave;

#显示从服务器状态,检查是否和主一致。

#检查Slave_IO_RunningSlave_SQL_Running状态是否正常

Show slave status /G;

确保也正常。最后在到两台服务器上修改数据,查看数据是否已经同步同步一旦配置好后,请不要修改服务器机器名


  由于MySQL不同版本之间的(二进制日志)binlog格式可能会不一样,因此最好的搭配组合是Master的MySQL版本Slave的版本相同或者更低,Master的版本肯定不能高于Slave版本。
本文中,我们假设主服务器(以下简称Master)和从服务器(以下简称Slave)的版本都是5.0.27,操作系统是RedHat Linux 9。
假设同步Master的主机名为:A(IP:192.168.0.1),Slave主机名为:B(IP:192.168.0.2),2个MySQL的basedir目录都是/usr/local/mysql,datadir都是:/var/lib/mysql。

二、设置同步服务器

1、设置同步Master

修改 my.cnf 文件,在
# Replication Master Server (default)
# binary logging is required for replication
添加如下内容:
log-bin=/var/log/mysql/updatelog
server-id = 1
binlog-do-db=test
binlog-ignore-db=mysql

重启MySQL,创建一个MySQL帐号为同步专用

GRANT REPLICATION SLAVE,RELOAD,SUPER, ON *.* TO back@192.168.0.2 IDENTIFIED BY 'back' ;
FLUSH PRIVILEGES ;

2、设置同步Slave

修改my.cnf文件,添加
server-id = 2
master-host = 192.168.0.1
master-user = back
master-password = back
master-port = 3306

replicate-ignore-db=mysql
replicate-do-db=test

重启MySQL

3、启动同步

在主服务器A MySQL命令符下:
show master status;
显示(当然这个是我机器的情况,你的不可能跟我一样哈,只是个例子):
+------------------+----------+-------------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+-------------------+------------------+
| updatelog.000028 | 313361 | test | mysql | 
+------------------+----------+-------------------+------------------+

在从服务器A MySQL命令符下:
slave stop;
CHANGE MASTER TO MASTER_LOG_FILE='updatelog.000028',MASTER_LOG_POS=313361;
slave start;

用show slave status\G;看一下从服务器的同步情况
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
如果都是yes,那代表已经在同步

往表里面写点数据测试一下看是否同步成功,如果不成功,绝对不是你的RP问题,再检查一下操作步骤!


4、设置双向同步

修改B服务器的my.cnf,添加
log-bin=/var/log/mysql/updatelog
binlog-do-db=test
binlog-ignore-db=mysql

重启MySQL,创建一个MySQL帐号为同步专用

GRANT REPLICATION SLAVE,RELOAD,SUPER, ON *.* TO back@192.168.0.1 IDENTIFIED BY 'back' ;
FLUSH PRIVILEGES ;

修改A服务器的my.cnf,添加
master-host = 192.168.0.2
master-user = back
master-password = back
master-port = 3306

replicate-ignore-db=mysql
replicate-do-db=test

重启MySQL

在主服务器B MySQL命令符下:
show master status;
+------------------+----------+-------------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+-------------------+------------------+
| updatelog.000028 | 13753 | test | mysql | 
+------------------+----------+-------------------+------------------+

在服务器A MySQL命令符下:
slave stop;
CHANGE MASTER TO MASTER_LOG_FILE='updatelog.000028',MASTER_LOG_POS=13753;
slave start;

其实也就是A->B单向同步的反向操作!双向同步,就这么简单啦!

参考资料:
http://dev.cbw.com/otherdb/mysql/20055271808_3748372.shtml
http://www.linuxmine.com/5994.html
http://www.lslnet.com/linux/dosc1/14/linux-170464.htm

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐