mysql数据库双向与单向同步
2.环境说明2.1 硬件环境(两台机器的硬件环境相同)CPUInter(R) Pentium(R) Dual CPU E5200 @2.50GHz内存大小384MB硬盘大小8GB其它说明本机器为虚拟机,其有两块网卡,一对网卡直
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_Running,Slave_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_Running,Slave_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
更多推荐
所有评论(0)