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 小鸡是不是就很容易挂了?

第一次玩这么刺激的,求指教。谢谢
6766 次点击
所在节点    程序员
62 条回复
Aluhao
2017-08-18 09:45:10 +08:00
MYSQL 主从同步优先考虑呀,但是你这 MYSQL 版本不一至,应该是配置不了。
clino
2017-08-18 09:54:53 +08:00
为什么要把文件存数据库啊...
fenglangjuxu
2017-08-18 10:01:38 +08:00
先吧 a 鸡数据 scp 一份到 b 鸡,然后 a 鸡有新数据,先写入到 redis 队列,然后 b 从 redis 获取,在入库到 b
xjmroot
2017-08-18 10:29:58 +08:00
有那么复杂么,感觉就第一次同步慢点,第一次全量同步,后面都是增量啦
增量一天能增加多少数据呢
shingoxray
2017-08-18 10:53:39 +08:00
非要用 PHP 解决的话,写个 PHP 文件(比如 sync.php )同时连这两个库,按时间戳把新操作的记录从 Win 鸡更新到 U 鸡。
然后随便哪只鸡上做个任务,定时>php.exe sync.php 就可以吧?
jyf
2017-08-18 10:59:27 +08:00
用 mysql 的主从同步 但是不要用 binlog 可以考虑文本语句的那种 只要没用版本相关的语句应该没啥问题
dangyuluo
2017-08-18 11:14:38 +08:00
@miaoever 问个小问题,如果仅仅是 MySQL 主从同步的话,是不是就没有必要上 datax 了?
yw9381
2017-08-18 11:17:14 +08:00
我觉得,文件还是别放在数据库里吧,以实际的文件放在硬盘里,
数据库记录文件的相对位置,大小,md5 这些信息。
每天根据差异生成 sql,在小机上跑一下,小机跑的时候,自动从目标服务器吧文件同步到本机
这样每天需要拉的数据就会小很多。对于每天的全量备份实在是划不来
全量的话,每周,或是半月,一月来一次
scys
2017-08-18 11:29:31 +08:00
#1 source: mysqldump to data.sql.gz
#2 scp data.sql.gz to dest
#3 dest: echo data.sql.gz | mysql

完毕,自动化脚本,估计就 10 分钟不够,4.3G ,不够 mysqldump 塞牙缝
janxin
2017-08-18 11:33:09 +08:00
改改代码存文件不好吗...
DRcoding
2017-08-18 11:35:52 +08:00
Windows Server 2012 上试试 kettle 吧,PHP 还是算了。
msg7086
2017-08-18 11:36:08 +08:00
上面这群说存文件里的,有多少人真的试过在 EXT4 和数据库里存几十万几百万文件?
janxin
2017-08-18 11:42:32 +08:00
@msg7086 数据库没试过,ext4 下面文件有 200w 个,然后呢?
msg7086
2017-08-18 13:59:06 +08:00
@janxin 我们 ext4 下一个目录几十万文件已经卡死了。
Felldeadbird
2017-08-18 13:59:32 +08:00
这么大文件,别依赖 PHP 了、
janxin
2017-08-18 14:09:08 +08:00
@msg7086 =,=我就知道你们会这样
msg7086
2017-08-18 14:12:22 +08:00
@janxin 以前我司有个很厉害的程序员。
打日志按照 pid 起文件名。
后来,每个模块都有 30000+个 log。
后来,这个目录就没法 ls 了……
loveCoding
2017-08-18 14:16:03 +08:00
@msg7086 #54 存的时候按天或者按每周这样切分目录效果会有提升不
msg7086
2017-08-18 14:21:39 +08:00
@loveCoding 切分会好很多。
如果是大量小文件的话,存数据库效率是很好的。
文件系统不是为了超大量文件设计的(除非用 Reiser 家族),而数据库可以轻松处理上千万上亿行数据。
romisanic
2017-08-18 16:14:08 +08:00
如果只是数据库的同步 跟你们网站用啥做的并没有什么太大关系吧?

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

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

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

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

© 2021 V2EX