MySQL 难题求思路:怎样用 PHP 每日内网同步一个 4.3G 的表?

2017-08-17 22:36:42 +08:00
 ericgui
2 台机器,一台 Windows Server 2012,运行一个 mysql 5.0,对,你没看错,mysql 5.0

另一台 Ubuntu,mysql 5.7

框架 Yii2

内网(阿里云同一安全组,默认内网)

Windows 这个机器,有一张表,4.3G ,存的都是 PDF DOC 之类的文件,每日都有新增、更新操作,记录有最后一次操作的时间戳
那么,需要每天把这张表,同步到 Ubuntu 机器上来,这台小鸡只有 1G 内存

请问,应该怎么做?

我们考虑到用 php_fork,但据说它的底层的 pcntl_fork 不适用于生产环境。
如果单线程执行同步脚本,那要执行到什么时候啊。


是不是还要用到 yield 关键字,用一下协程?否则我们这 1G 小鸡是不是就很容易挂了?

第一次玩这么刺激的,求指教。谢谢
6728 次点击
所在节点    程序员
62 条回复
ericgui
2017-08-17 23:31:09 +08:00
@lujiajing1126 正在研究你说的,学习了,谢谢
shiny
2017-08-17 23:33:31 +08:00
你们是直接把文件存数据库里了?
GreatHumorist
2017-08-17 23:34:19 +08:00
4g 不算大,我之前爬虫爬的数据 10 个 g,dump 出来内网传过去再导入不超过半小时
GreatHumorist
2017-08-17 23:34:53 +08:00
而且用主从同步不是更好的选择吗
ericgui
2017-08-17 23:39:44 +08:00
@GreatHumorist 我要每日更新一次,这样合适吗?
ericgui
2017-08-17 23:40:44 +08:00
@shiny 20 楼
ZXCDFGTYU
2017-08-17 23:44:04 +08:00
主从啊我去。。你用 php 做这个的意义何在?
hcymk2
2017-08-17 23:50:27 +08:00
gouchaoer
2017-08-18 00:11:48 +08:00
主从没那么好配置,你直接写过 php 脚本放 cron 里面每天备份就完了,多简单的事。。。而且表才几个 g,你就算几个 t 也没问题。。。另外把 pdf 之类的存成 mysql 的 binary 并没有什么问题,简单好管理比存文件好,反正数量也不多
bear2017
2017-08-18 01:06:40 +08:00
直接把文件直接存数据库!?
同步的还是主从吧。关键你还 2 个系统,MySQL 版本还差那么大,设置主从的话,有点困难。。。
msg7086
2017-08-18 02:13:21 +08:00
说句实话,区区 4.3G 的数据,每日才同步一次,这个随便找个脚本回来改改都行的,搞这么麻烦?
你问单线程执行到什么时候?
按照(我猜的)内网 1Gbps 的速度来说,就算每天你把这 4.3G 的数据全更新一遍,也只要 1 分钟就能同步完。
别说每日一次了,每日一百次都轻轻松松跑的。

另外文件存数据库没问题。存在磁盘上,文件系统也是数据库。我网站种子库里存了十几万种子,效率不比存文件差。
SlipStupig
2017-08-18 06:15:17 +08:00
两种方案:
1.用 binlog 设置主从同步,一天才 4g 一点也不多
2.记录最后一天数据的 id,然后从那个地方然后定时 dump 出 sql 文件,让导入到另外一个数据库里面,如果不是实时的话,完全没问题
cxbeat
2017-08-18 08:24:22 +08:00
提出一个新思路:如果 io 不大的话,创建一个新表,每次读写都把操作写入新表,就只需要同步新表就行了
miaoever
2017-08-18 08:44:02 +08:00
每天 4GB 数据量不算大。你需要: https://github.com/alibaba/DataX
aru
2017-08-18 08:50:45 +08:00
@cxbeat 这个做法才叫坑人无极限
wekw
2017-08-18 09:03:11 +08:00
mysqldump 多大都能搞
vtwoextb
2017-08-18 09:15:18 +08:00
首先说你数据库就不能存 doc pdf 这样的文件,其次要真想同步 简单的 shell 一行就可以了
viakiba
2017-08-18 09:24:17 +08:00
@ericgui 思路都一样,就是边读取边传输,读取速度视传输而定。
ericgui
2017-08-18 09:39:52 +08:00
@viakiba 嗯,这是目前为止最符合我预想的方案。不过这是用 java 实现的,我要用 php 实现出来,我要好好想想。谢谢。
Aluhao
2017-08-18 09:43:48 +08:00
数据库备份:只有一张表我觉得容易搞定吧,目录服务器建立一个计划任务远程去连接远程数据库,直接把当日更新的 SELECT 插入进本地数据表呀,计划任务在大半夜进行。
文件同步直接用:rsync 也是可以用计划任务。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/383809

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX