最近开发了这样一个需求,我做了一个财务软件,当然本人现在是一个小小的出纳,原来我是个电气工程师,现在却变成了一个出纳,中间的来回曲折,一切都是命运使然。我现在想要每个销售都能看到自己的入款数据,我采用了企业微信的自建应用,做一个简单的开票系统,方便销售开发票及查账。这样我就需要把一部分数据放到云服务器里面,而且能自动同步我自己财务软件的数据。对于编程水平比较小白的我,开始觉得似乎有些难度。后来仔细看了一些资料,实现起来发现很简单。
我的思路是这样:
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),我们将立即处理。