MySQL 預設儲存引擎: InnoDB 介紹

mysql_logo

MySQL 是一套眾所皆知的 Database System,今天來簡介 InnoDB 儲存引擎,在 MySQL 5.5.5 之前預設的儲存引擎是 MyISAM,但是為什麼在 5.5 之後官方要將預設儲存引擎換成 InnoDB 呢?大家都知道 InnoDB 用來交易管理非常方便,因為 InnoDB 透過 row lock,相對於 MyISAM 透過 table lock 來的有效率,也避免大量寫入的時候,造成無法讀取資料,這就是 row lock 的優勢,當然用 InnoDB 最主要的原因還有 Full-text search indexes 功能,但是別擔心 MySQL 5.6.4 之後(含此版本) InnoDB 開始支援 Full-text search 功能,另外在使用 MyISAM 時候,如果資料突然出問題,還必須使用 MySQL Binary Log 來恢復資料,如果用 InnoDB 這就沒關係了。大家還在用 MyISAM 嘛?開始升級伺服器,一起體驗 InnoDB 的功能,如果已經上線很久的網站,作者不建議轉換,因為可能會遇到很多雷。

[Read More]

PHP 將長期宣導程式設計師將 ext/mysql 改用 pdo_mysql 和 mysqli

php-logo
今天看到一篇 PHP-Dev 公佈一篇

[PHP-DEV] deprecating ext/mysql,大意就是 PHP 官方未來將打算移除 ext/mysql 的所有相關文件及功能,作者相信很多程式開發者都是用 mysql 套件下去開發,聽到這消息會非常錯愕吧。 官方 documentation team 討論移除的原因在於安全性的考量,在 DK 大神那邊看到是使用 ext/mysql 必須自己處理 mysql_real_escape_string 和 mysql_escape_string,所以官方希望教育使用者不要再使用 ext/mysql 了,底下是官方會做的事情

  • 增加說明指出 ext/mysql 已過時
  • 建議和取代方案
  • 包含取代方案的範例 官方提供了兩個解決方案

pdo_mysqlmysqli,官方列了幾點說明:

  • 從現在開始教育使用者及增加說明文件
  • 在 5.4 版本增加 E_DEPRECATED 訊息,甚至 5.5 6.0 都可以
  • 提供 pdo_mysql 轉換的說明文件
  • 專注於整理 pdo_mysql 跟 mysqli 的線上文件
  • 增加 “The MySQL situation” 的文件說明現況 看完這篇,大家現在趕快轉換到 mysqli 或者是使用 PDO 來開發程式吧
MySQL  PDO  php 

2011 OSDC Day 1 筆記

Update: 補上 OSDC 紀錄影片 2011.06.26 今年很高興可以北上參加 OSDC 2011 (Open Source Developers Conference),由於之前都在南部唸書及工作,沒有機會北上參加聚會,現在人在新竹,終於有機會可以參加了,雖然早上六點就要起床趕電車了,不過到現場聽課感覺就是不同,也可以認識很多新朋友,底下來紀錄上課筆記 微軟與 jQuery 社群的親密接觸 講者: Eric Shangkuan (Microsoft) Slide: 微軟與 jQuery 社群的親密接觸 這是 OSDC 第一場演講,早上九點就開始了,雖然人不多,但是蠻多人還是為了講者而來,首先介紹什麼是 jQuery,以及 jQuery 一些基本用法,像是 CSS selector,如何在 Windows Visual Studio 上面開發 jQuery 及撰寫 plugin 整合進去 ASP.Net,最後介紹三個不錯用的 jQuery Plugin: Templeate, Datalink, Globalzation。 Templeate: 這搭配 Facebook api 可以直接做個人頁面,請參考這裡 Globalzation: 前端多國語系實做 Datalink: 可以快速處理 form,利用 object 跟 jQuery 搭配 如果要研究上述三個 jQuery Plugin 可以參考底下: jQuery Datalink: https://github.com/jquery/jquery-datalink jQuery Templeate: https://github.com/jquery/jquery-tmpl jQuery Globalzation: https://github. [Read More]

[資料庫] 如何轉換 Mysql varchar type 到 int type

先來說明為什麼有時候需要用到轉換 varchar 到 int 型態,就是因為 order by 的問題,幫學校修改 Mysql 錯誤排序,前人設計全部都用 varchar 型態去存資料,當然包含了學生入學年度,以前不會遇到這問題,但是到了民國100年,就會發生排序錯誤,底下來講個例子,這樣大家就可以瞭解了。 建立 test 資料表,並且先增兩個欄位分別是 a(varchar) 跟 b(int),個別輸入 100, 90 兩列資料

mysql> select * from test;
+------+------+
| a    | b    |
+------+------+
| 100  |  100 |
| 90   |   90 |
+------+------+
先針對 varchar 排序 order by a DESC
mysql> select * from test order by a desc;
+------+------+
| a    | b    |
+------+------+
| 90   |   90 |
| 100  |  100 |
+------+------+
再來針對 int 排序 order by b DESC
mysql> select * from test order by b desc;
+------+------+
| a    | b    |
+------+------+
| 100  |  100 |
| 90   |   90 |
+------+------+
[Read More]

[網站] 好站連結 (七) Android, javascript, Css, PHP, Perl, FreeBSD, Linux

Windows C# C# 比較字串 MSDN 比較字串 Request.Form Collection Request Query String / Form Parametrs ASP.NET QueryString Usage Using include files with ASP.NET html [將所有 的內容包到一個 中][7] apache Fixing mod_rewrite and .htaccess on GoDaddy Hosting javascript jQuery Week Calendar Javascript: reference the parent window from a popup How to get and set form element values with jQuery How to check and uncheck a checkbox with jQuery Loop through parameters passed to a Javascript function perl-completion. [Read More]

[FreeBSD] update apache -> 2.2.15, PHP -> 5.3.2, and MySQL downgrade to 5.1.9

昨天升級了 FreeBSD 的 Apache, PHP, and MySQL,遇到很多地雷阿,最多的就是 PHP 的部份,因為本來自己使用 5.2.11 版本,但是在 commit port 的時候發生去裝 5.3.2 版本,所以就直接砍掉全部重練,先是遇到 MySQL 問題,原先在 database/mysql60-server 已經被 FreeBSD 移除,任何關於 mysql60 的相關 port 都被 remove 掉了,只好 downgrade 到 mysql 5.1.48 版本,移除同時順手把 apache PHP 相關都拿掉了。 移除 apache mysql php 相關 ports -rf 依序找尋相關 Mysql ports 移除 pkg_deinstall -rf mysql60-server 接下來安裝 MySQL 5.1.48 Server and Client,可以找到在 databases/mysql51-server and databases/mysql51-client,直接安裝即可 cd /usr/ports/databases/mysql51-server && make install 安裝 Apache 2.2.15 cd /usr/ports/www/apache22 && make WITH_MPM=worker install 安裝 PHP 5. [Read More]

[MySQL] 必要修正一些預設值 (performance tunning)

參考了一篇:『Fixing Poor MySQL Default Configuration Values』,裡面提到了四個 MySQL 預設值相當沒有意義,所以 Jeremy Zawodny 提出了修改,也解釋了為什麼這四個會降低 MySQL 的效能。 1. max_connect_errors: 當使用者連接 MySQL 出現錯誤,伺服器就會根據 connect_timeout 所設定時間之後,而放棄等待,放棄之後會有 counter 來紀錄連接失敗的次數,當達到 max_connect_errors 設定值,伺服器就會 locked out client 端,這會衍生一個問題,那就是可以惡搞同一台網站,把 MySQL 搞爛,造成封鎖,不過解決方法就是把 max_connect_errors 設定成 (max_connect_errors=1844674407370954751) 2. connect_timeout: 這跟上面 max_connect_errors 是有相當大的關係,MySQL 預設 connect_timeout 是五秒,可是在網路繁忙的時候,也許需要花費比較多的時間來做連接, 但是預設值是五秒的話,這樣會一直 time out,造成 counter 持續增加,屆時會超過 max_connect_errors 設定值,所以必須把 connect_timeout 設定提高到 15 or 20,這樣就可以了 (connect_timeout = 20) 3. skip-name-resolve: 在每次的 MySQL 連線,伺服器端會偵測 Client 的 DNS 反解,這步驟真的有點多餘 綜合上面結論,請加入 my.cnf 一些設定

max_connect_errors = 1844674407370954751
connect_timeout = 20
skip-name-resolve
slave_net_timeout = 30
Reference:

無論如何都應該修改的 MySQL 預設值 線上環境的 MySQL 預設值修改(Jeremy 建議)

[講義]屏科大 PHP & MySQL 基礎教學投影片

這次非常開心受到國立屏東科技大學資管系邀請講課,主題是 PHP & MySQL 基礎介紹,來聽課的學生,就是資管系大三跟碩一的新生,第一次到屏科大,沒想到學校大到很誇張阿,在校園裡面都是騎機車上課,不像在東華大學,只能騎外環道,剩下的只能騎腳踏車,屏科大其實蠻偏僻的,離屏東市有一段距離,大概騎摩托車要 20 分鐘,至少今天回家是被用摩托車送到屏東火車站,感覺屏東還蠻熱鬧的。

這些資管的學生還蠻認真的,基礎實力還不錯,不過還是要在加強一下,看屏科大資管都在學 ASP.net,對於 html 有些基礎,大家好像都蠻喜歡拉物件,說這樣寫程式還蠻快的,不過 PHP 好像沒有類似工具,今天上課蠻順利的,至少大家都聽的懂,課堂作業都有寫出來,還蠻開心的,想聽聽大家對我上課的意見,看來只好等下次上課在問問看他們。

利用 PHP MySQL Quota-Tool 來限制 MySQL 存取空間大小

酷!學園發現這篇,有人問到如何限制 MySQL 的使用空間大小,我第一個想到的就是 Linux quota 指令限制大小,看回文有一篇利用 MySQL 來解決此問題:MySQL Quota-Tool,它利用了 MySQL INSERT 跟 CREATE 的權限控管,來達成限制,當資料庫大小超過您所設定的限制,系統就會拔除您的 INSERT 跟 CREATE 權限,如果沒有超過,就會將權限設定回去,基本上非常簡單,首先要先建立一個專屬控管每個資料庫的 database

CREATE TABLE `Quota` (`Db` CHAR(64) NOT NULL, 
`Limit` BIGINT NOT NULL,
`Exceeded` ENUM('Y','N') DEFAULT 'N' NOT NULL,
PRIMARY KEY (`Db`), UNIQUE (`Db`));
[Read More]

[網站] 好站連結 (四)

PHP How to create Microsoft Office Documents with PHP IP 判斷方式 Get a list of all available constants with PHP Get a list of all available classes with PHP Get a list of all available functions with PHP The Google Analytics API and PHP: A series Google Analytics API PHP Class data method parameters Dynamically Create Menu With PHP DOM Enable the file manager connector with FCKEditor and PHP MySQL [Read More]