重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
mysql怎么实时同步两个数据库
创新互联,是一家集策划、设计、技术开发一体的专业互联网产品服务公司,致力于为企业信息化提供驱动力。技术团队10年来致力于为客户提供企业网站定制,成都手机网站制作。先后服务了成百上千客户,包括各类中小企业、高校、政府。 创新互联将利用公司在过去10年的资源积累,力争为客户打造真正革命性的口碑产品!
实现两个Mysql数据库之间同步同步原理:
MySQL 为了实现replication 必须打开bin-log 项,也是打开二进制的MySQL 日志记录选项。MySQL 的bin log 二
进制日志,可以记录所有影响到数据库表中存储记录内容的sql 操作,如insert / update / delete 操作,而不记录
select 这样的操作。因此,我们可以通过二进制日志把某一时间段内丢失的数据可以恢复到数据库中(如果二进制日
志中记录的日志项,包涵数据库表中所有数据,那么, 就可以恢复本地数据库的全部数据了)。 而这个二进制日志,
如果用作远程数据库恢复,那就是replication 了。这就是使用replication 而不用sync 的原因。这也是为什么要设
置bin-log = 这个选项的原因。
IP的设置:A主机 IP:10.10.0.119;Mask:255.255.0.0;B主机 IP:10.10.8.112;Mask:255.255.0.0
在IP设置完成以后,需要确定两主机的防火墙确实已经关闭。可以使用命令service iptables status查看防火墙状态。如果防火墙状态。
为仍在运行。使用service iptables stop来停用防火墙。如果想启动关闭防火墙,可以使用setup命令来禁用或定制。最终以两台主机可以相互ping通为佳。
3.2 配置A主(master) B从(slave)模式;3.2.1 配置A 为master。
增加一个用户同步使用的帐号:
GRANT FILE ON *.* TO ‘backup’@'10.10.8.112' IDENTIFIED BY ‘1234’;
GRANTREPLICATION SLAVE ON *.* TO ‘backup’@'10.10.8.112' IDENTIFIED BY ‘1234’。
赋予10.10.8.112也就是Slave机器有File权限,只赋予Slave机器有File权限还不行,还要给它REPLICATION SLAVE的权限才可以。
增加一个数据库作为同步数据库:create database test;
创建一个表结构:create table mytest (username varchar(20),password varchar(20));
修改配置文件:修改A的/etc/my.cnf文件。
在my.cnf配置项中加入下面配置:
server-id = 1 #Server标识
log-bin
binlog-do-db=test #指定需要日志的数据库
重起数据库服务:
service mysqld restart
查看server-id:
show variable like ‘server_id’。
第一个mysql的my.ini文件默认是在如下路径
C:\Documents and Settings\All Users\Application Data\MySQL\MySQL Server 5.5\my.ini
copy该ini文件存放到E:\MySQL\mysql_base,这个路径可以随意定义,并修改如下内容:[client]port=3307#第一个数据库的默认端口是3306 这里需要另外启用一个端口
# The TCP/IP Port the MySQL Server will listen onport=3307# Path to installation directory. All paths are usually resolved relative to this.
basedir="E:\MySQL\MySQL Server 5.5\"
#第二个数据库basedir
# Path to the database root
#第二个数据库datadir
Mysql主从配置,实现读写分离
原理:主服务器(Master)负责网站NonQuery操作,从服务器负责Query操作,用户可以根据网站功能模特性块固定访问Slave服务器,或者自己写个池或队列,自由为请求分配从服务器连接。主从服务器利用MySQL的二进制日志文件,实现数据同步。二进制日志由主服务器产生,从服务器响应获取同步数据库。
具体实现:
1、在主从服务器上都装上MySQL数据库,windows系统鄙人安装的是mysql_5.5.25.msi版本,Ubuntu安装的是mysql-5.6.22-linux-glibc2.5-i686.tar
windows安装mysql就不谈了,一般地球人都应该会。鄙人稍微说一下Ubuntu的MySQL安装,我建议不要在线下载安装,还是离线安装的好。大家可以参考 这位不知道大哥还是姐妹,写的挺好按照这个就能装上。在安装的时候可能会出现几种现象,大家可以参考解决一下:
(1)如果您不是使用root用户登录,建议 su - root 切换到Root用户安装,那就不用老是 sudo 了。
(2)存放解压的mysql 文件夹,文件夹名字最好改成mysql
(3)在./support-files/mysql.server start 启动MySQL的时候,可能会出现一个警告,中文意思是启动服务运行读文件时,忽略了my.cnf文件,那是因为my.cnf的文件权限有问题,mysql会认为该文件有危险不会执行。但是mysql还会启动成功,但如果下面配置从服务器参数修改my.cnf文件的时候,你会发现文件改过了,但是重启服务时,修改过后的配置没有执行,而且您 list一下mysql的文件夹下会发现很多.my.cnf.swp等中间文件。这都是因为MySQL启动时没有读取my.cnf的原因。这时只要将my.cnf的文件权限改成my_new.cnf的权限一样就Ok,命令:chmod 644 my.cnf就Ok
(4)Ubuntu中修改文档内容没有Vim,最好把Vim 装上,apt-get install vim,不然估计会抓狂。
这时候我相信MySQL应该安装上去了。
2、配置Master主服务器
(1)在Master MySQL上创建一个用户‘repl’,并允许其他Slave服务器可以通过远程访问Master,通过该用户读取二进制日志,实现数据同步。
最简单的办法就是用个ACCESS,无论你用什么代码来写,或者直接操作SQL,
如果是直接操作SQL那更简单,他可以直接建立操作查询,两个地方的数据库也可以用OpenRowSet关键词来取得联系。如果是用代码来编译程序做这样的操作,我的建议是用如PetShop和直接用个ACCESS来做跨数据库的数据表操作。
ACCESS直接做远程网络连接表(SQL远程数据库可以是任意地方的,只样能与当前主机能PING上)在ACCESS里做查询语句,或者直接做一个更新查询,代码调用的时候直接查询更新查询就达到了你的目的。如果是不借助ACCESS或者是借助ACCESS要用纯代码也有办法:
一个是用ACCESS的ODBC()库功能他的表结构是:
Select * from 表名 IN ODBC[ODBC:Driver={SQL Server};Server=服务器IP地址;UID=数据库用户名;PWD=密码;DataBase=数据库名称]
你把上面的查询当成一个表,把要插入的表和目的表用上面的格式写下来,拼接字符串就达到了目的。
OpenROWSET是SQL官方提供的一种办法,两个异地数据库,可以用OPENROWSET关键字来做连接,网上代码多的是。
PETSHOP是.Net提供的一种方法,直接用.NET连接数据库,用PETSHOP象ACCESS查询视图一样做查询表,但是我觉得这样做不好,程序运行效率低,而且相当不灵活。
一个表更新到另一个表要做更新检查,一边插入查询以便做连接查询匹配没有的数据才可以查询,重复的不允许插入,代码这么写:
INSERT INTO 目的表 SELECT 字段名称, 字段名称1, ... FROM 处理表 INNER JOIN 目的表 ON 处理表.匹配字段=目的表.匹配字段 WHERE ((目的表.字段) IS NULL)
把筛选好的表插入你的目的表,数据库问题解决了,插入检查还要解决啊,你琢磨一下。
1、首先我们打开Workbench创一个建数据库(这里都使用闪电1执行选定命令行)。
2、先创建Student学生表。
3、再创建course课程表。
4、然后就可以创建sc关联表了我们先写上Student的主键和course的主键,并写上sc自己的属性成绩。
5、再写上主键约束,以及把sc表的学号属性和Studnet的学号关联、课程号属性和course的课程号关联。
6、再次运行就可以看到我们成功创建了学生表和课程表的关联表sc。