mysql、sqlserver数据库之间的数据同步
Windows 操作系统
需要Mysql 3.23.15以后的版本。
假设数据库A为主机,数据库B为从机(A向B提供同步服务,即B中的数据来自A)
A机器:IP=10.10.151.166
B机器:IP=10.10.151.156
下面看单向同步的配置步骤:
1 在机器A中建立一个新的数据库,sql语句:
[sql] view plain copy
CREATE DATABASE backup_db;
USE test;
CREATE TABLE backup_table
(id
int(11) NOT NULL auto_increment,name
varchar(20) character set utf8 NOT NULL,sex
varchar(2) character set utf8 NOT NULL,
PRIMARY KEY (id
)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
2 打开A机器的mysql安装目录下的my.ini文件,在文件最后添加:
[plain] view plain copy
server-id=1
log-bin=c:\mysqlback #启动同步事件的日志记录文件
binlog-do-db=test #提供数据同步服务的数据库
3 在机器B中建立一个和机器A结构相同的数据库,sql语句:
[plain] view plain copy
CREATE DATABASE backup_db;
USE test;
CREATE TABLE backup_table
(id
int(11) NOT NULL auto_increment,name
varchar(20) character set utf8 NOT NULL,sex
varchar(2) character set utf8 NOT NULL,
PRIMARY KEY (id
)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
注:机器A和B的数据库结构必须一致,否则无法构成同步
4 打开B机器的mysql安装目录下的my.ini文件,在文件最后添加:
[plain] view plain copy
server-id=2
master-host=10.10.151.166 #主机A的地址
master-user=ym #主机A提供给B的用户,该用户中需要包括数据库test的权限
master-password=ym #访问密码
master-port=3306 #端口,主机的MYSQL端口
master-connect-retry=60 #重试间隔60秒,当主从服务器连接意外断开时数据库每隔60秒进行一个重新连接
replicate-do-db=test #同步的数据库
5 完成以上配置之后,在机器A的mysql控制台中输入:
[plain] view plain copy
GRANT REPLICATION SLAVE,RELOAD,SUPER ON . TO ym@10.10.151.156 IDENTIFIED BY ‘ym’ ;
#这句是为让从服务器有足够的权限从主服务器是哪个接收二进制日志文件
6 重启机器A和B的mysql数据库,
[plain] view plain copy
在机器B的mysql控制台:
Mysql>slave start;
如果想查看同步配置的情况,可以按如下输入:
机器A的mysql控制台:
Mysql>show master status;
机器B的mysql控制台:
Mysql>show slave status;
7 在机器A中test数据库中的backup_table表中插入一些数据,查看机器B中test数据库中的backup_table表应该同步实现了数据的改动。
下面是双向的数据同步配置步骤:
1还是上面使用的机器A和机器B,这是B是主机,A是从机,保持上面的配置不要改在机器A 的mysql安装目录下的my.ini文件最后添加:
master-host=10.10.151.156 #主机B的地址
master-user=ym #主机B提供给A的用户,该用户中需要包括数据库test的权限
master-password=ym #访问密码
master-port=3306 #端口,主机的MYSQL端口
master-connect-retry=60 #重试间隔60秒当主从服务器连接意外断开时数据库每隔60秒进行一个重新连接
replicate-do-db=test #同步的数据库
在机器B的mysql安装目录下的my.ini文件最后添加
log-bin=c:\mysqlback #启动同步事件的日志记录文件
binlog-do-db=test #提供数据同步服务的数据库
2 机器B的mysql控制台输入:
GRANT REPLICATION SLAVE,RELOAD,SUPER ON *.* TO ym@10.10.151.166 IDENTIFIED BY 'ym' ;
3 重启机器A和机器B的mysql数据库
在机器B中test数据库中的backup_table表中插入一些数据,查看机器A中test数据库中的backup_table表应该同步实现了数据的改动。但不会导致循环
注:实现mysql数据库的数据同步,须将俩台windows操作系统的windows防火墙关闭
Mysql 数据同步的原理:
Mysql的数据同步,在Mysql官方网站文档上,叫replication字面意思是重作,这个很准确的表明了Mysql数据库操作的实质,是重作同样的操作,以保持主数 据库服务器没事master与从属数据库服务器slave之间的数据保持一致。
从MySQL3.23.15以后,Mysql支持单向的异步复制。也就是说,1台Mysql服务器充当Master(主库),1台或多台Mysql服务器充当Slaves(从库),数据从 Master向Slaves进行异步复制。注意,这种复制是异步的,有别于Mysql的同步复制实现(这种实现称做Mysql集群,Mysql Cluster)。
当主库有更新的时候,主库会把更新操作的SQL写入二进制日志(Bin log它记录了所有更新了数据或者已经潜在更新了数据的所有语句),并维护一个二进制日志 文件的索引,以便于日志文件轮回(Rotate)。在从库启动异步复制的时候,从库会开启两个I/O线程,其中一个线程连接主库,要求主库把二进制日志的变化部 分传给从库,并把传回的日志写入本地磁盘。另一个线程则负责读取本地写入的二进制日志,并在本地执行,以反映出这种变化保证主从数据库之间的数据同步。 较老的版本在复制的时候只启用一个I/O线程,实现这两部分的功能。这种方法是利用了Mysql数据库主(master)和从(slave)异步复制功能,来实现数据库 之间的同步。
Windows系统中,Mysql安装目录下my.ini文件中:
log-bin=c:\mysqlback;