PHP使用SWOOLE擴充套件實現定時同步 MySQL 資料
南寧公司和幾個分公司之間都使用了呼叫系統,然後現在需要做一個呼叫通話資料分析,由於分公司的呼叫伺服器是在內網,通過技術手段映射出來,分公司到南寧之間的網路不穩定,所以需要把分公司的通話資料同步到南寧。
本身最簡單的方法就是直接配置MySQL的主從同步就可以同步資料到南寧來了。但是銷售呼叫系統那邊的公司不給MySQL許可權我們。 所以這個方法只能放棄了。
於是我們乾脆的想,使用PHP來實現定時一個簡易的PHP定時同步工具,然後PHP程序常駐後臺執行,所以首先就先到了一個PHP元件:SWOOLE,經過討論,分公司的每天半天生成的資料量最大在5000條左右,所以這個方案是可行,就這樣幹。
我們使用PHP SWOOLE 做一個非同步的定時任務系統。
本身MySQL資料庫的主從同步是通過解析Master庫中的binary-log來進行同步資料到從庫的。然而我們使用PHP來同步資料的時候,那麼只能從master庫分批查詢資料,然後插入到南寧的slave庫來了。
這裡我們使用的框架是 ThinkPHP 3.2
.
首先安裝PHP擴充套件: SWOOLE,因為沒有使用到特別的功能,所以這裡我們使用pecl來快速安裝:
1 |
|
安裝完成後在 php.ini
裡面加入 extension="swoole.so"
phpinfo()
來檢查是否成功了.
安裝成功了,我們就來寫業務.
服務端
1、首先啟動一個後臺的服務端,監聽埠9501
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
|
2、接收和投遞任務
1 2 3 4 5 6 7 8 9 |
|
3、任務執行,資料從master庫查詢和寫入到slave資料庫
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
|
4、任務完成時候呼叫
1 2 3 4 |
|
客戶端推送任務
到此基本完成,剩下來我們來寫客戶端任務推送
1 2 3 4 5 6 7 8 9 10 11 |
|
至此基本完成了,剩下的我們來寫一個shell指令碼定時執行:/home/wwwroot/sync_db/crontab/send.sh
1 2 3 4 5 6 |
|
使用crontab定時任務,我們把指令碼加入定時任務
1 2 3 4 |
|
Tips: 最好推薦在裡面加入寫日誌操作,這樣好知道是任務推送、執行是否成功。
至此基本完成,程式有待優化~~~,各位看客有更好的方法歡迎提出。
參考文獻: