pdo擴(kuò)展為php訪問(wèn)數(shù)據(jù)庫(kù)定義了一個(gè)輕量級(jí)的、一致性的接口,它提供了一個(gè)數(shù)據(jù)訪問(wèn)抽象層,這樣,無(wú)論使用什么數(shù)據(jù)庫(kù),都可以通過(guò)一致的函數(shù)執(zhí)行查詢和獲取數(shù)據(jù)。
成都創(chuàng)新互聯(lián)主要為客戶提供服務(wù)項(xiàng)目涵蓋了網(wǎng)頁(yè)視覺(jué)設(shè)計(jì)、VI標(biāo)志設(shè)計(jì)、營(yíng)銷推廣、網(wǎng)站程序開發(fā)、HTML5響應(yīng)式成都網(wǎng)站建設(shè)公司、手機(jī)網(wǎng)站制作設(shè)計(jì)、微商城、網(wǎng)站托管及成都網(wǎng)站維護(hù)公司、WEB系統(tǒng)開發(fā)、域名注冊(cè)、國(guó)內(nèi)外服務(wù)器租用、視頻、平面設(shè)計(jì)、SEO優(yōu)化排名。設(shè)計(jì)、前端、后端三個(gè)建站步驟的完善服務(wù)體系。一人跟蹤測(cè)試的建站服務(wù)標(biāo)準(zhǔn)。已經(jīng)為成都門窗定制行業(yè)客戶提供了網(wǎng)站營(yíng)銷推廣服務(wù)。
在一些php管理系統(tǒng)需要開啟pdo和pdo_mysql擴(kuò)展,方法很簡(jiǎn)單:
1、找到php.ini文件
2、打開后,搜索
extension=php_pdo.dll
和
extension=php_pdo_mysql.dll
,去掉前面“;”的注釋。
最終這兩行配置內(nèi)容如下:
extension=php_pdo.dll
extension=php_pdo_mysql.dll
重新啟動(dòng)apache或者iis后,在phpinfo函數(shù)中查看,是否開啟。
1,去php網(wǎng)站上下載mysql擴(kuò)展
2,解壓并使用phpize工具初始化,編譯:
#解壓
tar xzvf mysql-45881bd.tar.gz
#進(jìn)入mysql擴(kuò)展目錄
cd mysql-45881bd/
#使用phpize初始化,我的phpize在/opt/目錄
/opt/php/bin/phpize
#編譯mysql擴(kuò)展,使用mysql native driver作為mysql鏈接庫(kù)
./configure --with-php-config=/opt/php/bin/php-config --with-mysql=mysqlnd
make make install
5,編輯php.ini文件,把mysql.so拷貝到php.ini的extension_dir中,然后在php.ini中加入extension=mysql.so
6,重啟php
mysql在線擴(kuò)容和縮容一般涉及到的內(nèi)容,主要包括三個(gè)方面,1.在線也就意味著需要把增量的數(shù)據(jù)重新分布到新的拓?fù)浣Y(jié)構(gòu)中,我們一般稱做增量復(fù)制,2.原有的數(shù)據(jù)需要一條不漏的掃出來(lái)重新分布到新的拓?fù)浣Y(jié)構(gòu)中,這個(gè)一般叫做全量復(fù)制,3.全量做完,增量正在同步,把應(yīng)用的數(shù)據(jù)路由拓?fù)淝械叫碌穆酚赏負(fù)渖蟻?lái),并且做到無(wú)數(shù)據(jù)丟失,這個(gè)我們叫做停寫切換。做好這三個(gè)方面的工作,能夠達(dá)到的效果就是應(yīng)用在最后切換數(shù)據(jù)分布拓?fù)涞臅r(shí)刻,只要停寫非常短的時(shí)間(秒級(jí)別)就能夠做到無(wú)數(shù)據(jù)丟失的擴(kuò)容和縮容。
增量同步一般有2種方式,一種是應(yīng)用端或者數(shù)據(jù)庫(kù)前端做trigger,記錄變更數(shù)據(jù)的特征值log(比如pk,sharding key),然后異步復(fù)制到新的拓?fù)浣Y(jié)構(gòu)中。另外一種方式是通過(guò)分析mysql的binlog再進(jìn)行不同數(shù)據(jù)拓?fù)涞膹?fù)制。兩者本質(zhì)上來(lái)說(shuō)應(yīng)該是一樣的,后者可能更加簡(jiǎn)便,并且對(duì)應(yīng)用無(wú)侵入,前者雖然也能夠做到,實(shí)際實(shí)現(xiàn)或者推廣和操作上都有不少阻力,最起碼解析binlog方式是mysql一上去,更新的log已經(jīng)天然存在與binlog中了。
增量同步的兩種方式如果要考慮到同步的可伸縮性(也就是多臺(tái)機(jī)器可以同時(shí)消費(fèi)相同的變更日志),需要在原數(shù)據(jù)中添加數(shù)據(jù)的版本信息防止更新亂序,或者通過(guò)唯一鍵進(jìn)行復(fù)制機(jī)器的sharding,也就是不同進(jìn)程(線程)同時(shí)消費(fèi)相同的更新日志,必須讓同一條記錄的更新落在同一個(gè)線程里面,如果還需要保證復(fù)制的事務(wù),那么實(shí)現(xiàn)會(huì)非常復(fù)雜,一般不會(huì)去支持多線程下復(fù)制的事務(wù)。
全量復(fù)制,也就是掃描需要復(fù)制的表的數(shù)據(jù)進(jìn)行重新分布,主要存在的問(wèn)題是復(fù)制速度和對(duì)數(shù)據(jù)庫(kù)的寫入壓力的矛盾,其實(shí)能夠做到整個(gè)拓?fù)溥B數(shù)據(jù)庫(kù)都全部換掉,來(lái)達(dá)到對(duì)正在使用數(shù)據(jù)庫(kù)的0影響,這個(gè)是一種可行的方案,另外是分時(shí)段調(diào)整復(fù)制線程數(shù),一般單線程復(fù)制對(duì)于數(shù)據(jù)庫(kù)的影響不會(huì)很大,在凌晨再轉(zhuǎn)換成多線程方式達(dá)到提速的目標(biāo)。
擴(kuò)容或者縮容在最后階段如何切換,這個(gè)涉及到的問(wèn)題主要是如何避免新更新進(jìn)來(lái)以至于增量沒(méi)完沒(méi)了,方式有很多,最簡(jiǎn)單的方法就是停掉應(yīng)用,一般時(shí)間只有幾分鐘是可以接受的。另外一種是邏輯停寫,因?yàn)槲覀冞w移的時(shí)候是有一個(gè)規(guī)則去重新散列數(shù)據(jù),也就是如果新的規(guī)則和舊的規(guī)則兩者算出來(lái)的結(jié)果不一致,那么這個(gè)數(shù)據(jù)就是需要被遷移的,如果在停寫的時(shí)刻,向前端拋錯(cuò)即可。邏輯停寫最大的好處就是避免PE的介入,并且配合動(dòng)態(tài)的數(shù)據(jù)路由數(shù)據(jù)推送,可以完全避免重新發(fā)布達(dá)到擴(kuò)容或者縮容,這個(gè)就是真正的在線擴(kuò)容,停寫不可避免(等待延遲的增量同步完成),但是不影響讀。
數(shù)據(jù)擴(kuò)容或者縮容,我們覺(jué)得不應(yīng)該排入業(yè)務(wù)的開發(fā)日程中,而是由數(shù)據(jù)管理團(tuán)隊(duì)對(duì)應(yīng)用透明地進(jìn)行這種操作,最后介入的人員只是DBA而已。但是不像一些nosql一樣按容量或者完全透明的split,數(shù)據(jù)庫(kù)的sharding還是按照應(yīng)用的數(shù)據(jù)特性(pk,user_id,gmt_create等等不同字段,自選策略)進(jìn)行sharding,應(yīng)用知道他們的某條數(shù)據(jù)具體存在哪個(gè)機(jī)器哪張表上,這個(gè)無(wú)論對(duì)于開發(fā)還是測(cè)試或者DBA都是一件不錯(cuò)的事情。