Mysql 简单实现远程数据库和本地数据库同步

发表于:2019-3-20 10:24

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:中门科技老刘    来源:今日头条

#
MySQL
#
Mysql
分享:
  最近开发了这样一个需求,我做了一个财务软件,当然本人现在是一个小小的出纳,原来我是个电气工程师,现在却变成了一个出纳,中间的来回曲折,一切都是命运使然。我现在想要每个销售都能看到自己的入款数据,我采用了企业微信的自建应用,做一个简单的开票系统,方便销售开发票及查账。这样我就需要把一部分数据放到云服务器里面,而且能自动同步我自己财务软件的数据。对于编程水平比较小白的我,开始觉得似乎有些难度。后来仔细看了一些资料,实现起来发现很简单。
  我的思路是这样:
  1 首先在云端建立一个需要共享的数据库的一个拷贝
  2 在本地建立一个云端拷贝数据库的映射
  3 在本地数据库上建立触发器,当插入,更新,删除的时候同时操作这个映射的数据库,那云端的数据也就同步更新了
  步骤:
  第一步 在服务器上建立一个可以操作云端这个数据库的授权用户,这样才能在本地连接上这个数据库
  1 进入mysql创建一个普通用户
  CREATE USER '用户名@'%' IDENTIFIED BY '密码'; //注意这个%表示容许任意电脑操作
  2 对这个用户授权
  grant all on 数据表名.* to '用户名'@'%' identified by '密码';
  3 刷新权限
  flush privileges;
  第二步 在云端建立一份数据库拷贝
  1 在navicat上建立一个新的连接
  
  2 选择要拷贝的表,拷贝一份到云端
  工具->数据传输
 
  第三步 建立映射表
  首先要打开federated存储引擎,默认关闭的
  a 在查询或命令行里 show engines 看是否开启(默认是关闭的)
  b 1)windows环境:my.ini文件[mysqld]中加入一行:federated
  2)linux环境:my.cnf文件[mysqld]中加入一行:federated
  c 重启mysql服务
 
  这样就表示打开了
  然后,我们需要建立一个映射表,怎么建立一个一模一样的表呢
  用命令查看一下建表语句,稍微修改就行
   mysql> show create table moneyflow;
  CREATE TABLE `moneyflow` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `createtime1` datetime DEFAULT NULL,
  `account` varchar(255) NOT NULL DEFAULT '',
  `paytype` varchar(255) NOT NULL DEFAULT '',
  `paytime` datetime NOT NULL,
  `otheraccount` varchar(255) NOT NULL DEFAULT '',
  `amount` varchar(255) DEFAULT '',
  PRIMARY KEY (`id`)
  ) ENGINE=InnoDB AUTO_INCREMENT=2231 DEFAULT CHARSET=utf8mb4
  然后改成
   CREATE TABLE `yun_moneyflow` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `createtime1` datetime DEFAULT NULL,
  `account` varchar(255) NOT NULL DEFAULT '',
  `paytype` varchar(255) NOT NULL DEFAULT '',
  `paytime` datetime NOT NULL,
  `otheraccount` varchar(255) NOT NULL DEFAULT '',
  `amount` varchar(255) DEFAULT '',
  PRIMARY KEY (`id`)
  ) ENGINE=FEDERATED DEFAULT CHARSET=utf8mb4 CONNECTION='mysql://用户名:密码@ip:3306/数据库名/表名';
  执行完后,就把云端的表完全映射过来了,无论怎么操作,双边都是同步的
  第四步:在本地数据库需要操作的表上建立三个触发器(插入,删除,更新)
  
  语句很简单,就是简单的插入,更新,删除语句。插入的内容是new.id,new.字段,删除的内容是old.id
  这样就大功告成了。

     上文内容不用于商业目的,如涉及知识产权问题,请权利人联系博为峰小编(021-64471599-8017),我们将立即处理。
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号