วิธีกู้ข้อมูลจากฐานข้อมูล MySQL ประเภท innodb by heha
Apr1
เรื่องมีอยู่ว่าวันหนึ่ง server cloud ของผมจู่ๆ ก็เกิดอะไรไม่ทราบได้ ขณะที่ server auto optimize table ตาม schedule ที่ cron ตั้งไว้ อยู่ๆ database ก็ corrupt อ่าว… ฉิบหายแล้วไง อาการเป็นยังไง? อาจเป็นไปได้ดังนี้
- ไม่สามารถ alter table หรือ mysqldump ใดๆ กับ table ที่เสียได้ หรือ SELECT * ก็ไม่ได้เช่นกัน ถ้าทำจะปรากฎข้อความประมาณว่า “MySQL server has gone away” หรือ “Lost connection to MySQL server during query“
- ถ้าถึงขั้นเลวร้าย (แบบผม) database จะไม่สามารถเปิดขึ้นมาทำงานได้เลย โดยปรากฎข้อความใน error.log ของ mysql ประมาณว่า (ประมาณว่ามีคำว่า corruption และ start database ขึ้นมากี่ทีๆ ก็ดับทุกครั้ง)
InnoDB: Database page corruption on disk or a failed
InnoDB: file read of page 7.
InnoDB: You may have to recover from a backup.
ซึ่งโดยปกติแล้ว หากใช้ InnoDB จะมีโอกาสที่ database เสียหายฝั่ง software น้อยมาก เพราะ InnoDB มีระบบ auto recover หากเกิดอะไรขึ้นกลางทางให้ ทำให้ recover row ที่อาจ insert ไม่สมบูรณ์ได้โดยอัตโนมัติ แต่หากเป็นความผิดพลาดที่เกิดจาก Hardware แล้วละก็ software เทพแค่ไหนก็ช่วยอะไรไม่ได้ ถ้ายังรัน mysql ได้ ให้หยุดทุกคำสั่งที่จะ write ลงตารางที่มีความเสียหายลงทั้งหมด เพิ่อเพิ่มโอกาสที่จะกู้ข้อมูลได้ให้สูงขึ้น จนกว่าการกู้ข้อมูลจะเสร็จสิ้น ซึ่งในทางปฏิบัติเราสามารถ copy ไฟล์ข้อมูล database ตาม config my.cnf ส่วน datadir ซึ่งเป็นข้อมูลบน physical drive ไปกู้ที่เครื่องอื่นได้เลย (ก่อน copy ต้อง stop service mysql ก่อนนะครับ ไม่งั้นข้อมูลอาจพังได้เช่นกันตอนย้ายไปกู้ที่เครื่องอื่น) โชคดีที่ innodb มีลักษณะการเก็บข้อมูลแบบ platform independent ซึ่งหมายความว่าคุณสามารถ copy ไปใส่ที่อีกเครื่องได้เลยโดยไม่ต้องทำการแปลงข้อมูลใดๆ แม้จะเป็นการ copy ข้าม OS ก็ไม่เป็นไร ต่อไปเป็นวิธีกู้ข้อมูลมีดังนี้
- กู้โดยวิธีถึก วิธีนี้จะง่ายกว่าวิธีที่สองมาก ถ้าใช้วิธีแรกแล้วไม่พบ row ข้อมูลที่หายไป หรือ row ที่หายไปไม่ใช่ row ที่สำคัญก็แนะนำให้ใช้วิธีนี้ครับ
- กู้โดยใช้ Percona Data Recovery Tool for InnoDB วิธีนี้ขั้นตอนค่อนข้างยุ่งยากพอสมควรครับ แต่จะมีโอกาสกู้ข้อมูลได้สูงกว่าวิธีแรกมาก และวิธีนี้ยังใช้กู้ข้อมูลที่เผลอลบทิ้งไปเองโดยไม่ได้ตั้งใจได้อีกด้วย!!
ก่อนอื่นขอบอกว่าคำสั่ง CHECK TABLE และ REPAIR TABLE นั้นไม่สามารถช่วยอะไรเราได้หากเราใช้ innodb (ใช้ได้เฉพาะ MYISAM เท่านั้น) เพราะถ้าสั่ง CHECK TABLE กับ innodb มันจะบอกว่า OK ไม่พบปัญหา (อ้าว) สำหรับขั้นตอนกู้ข้อมูลมีดังนี้
การยื่นแบบภาษี ภงด.91, 90 ให้พนักงานในฐานะนายจ้าง และวิธี setup โปรแกรมยื่นภาษีใน Windows 7 by heha
Mar0
ปีนี้เป็นปีแรกที่ทดลองยื่นผ่านเน็ต พอดาวน์โหลดโปรแกรมมาเสร็จปุ๊บก็ได้เรื่องเลยทีนี้ เปิดไม่ขึ้น - -” สำหรับใครที่ใช้ Windows 7, Vista อยู่ลองอ่านดูเผื่อจะช่วยได้ครับดังนี้ (จริงๆ กรอกในเว็บโดยตรงก็ได้ แต่ถ้า net ดับ session หลุด timeout บลาๆๆๆ จะเศร้าได้ แนะนำให้กรอกผ่านโปรแกรมดีกว่า เวลายื่นผ่านเน็ตก็แค่ upload ขึ้นไปก็เรียบร้อย)
วิธีทำให้รูปที่โหลดมาโดย tag mx:Image เป็น anti-alias โดยอัตโนมัติ by heha
Feb0
ใน Flex นั้นโดยปกติจะมี tag ที่ใช้โหลดรูปเข้ามาในตัว app ได้อย่างง่ายๆ โดยแค่ใช้
<mx:Image id=”imgReward” source=”image.png” />
ก็สามารถโหลดรูปมาแสดงได้ทันที ไม่ต้องสร้าง Loader มาโหลดให้วุ่นวายถ้าใช้เป็น as3 เพียวๆ และใน Flex 4 จะมี tag
<s:BitmapImage ai:embed=”1″ smooth=”true” source=”@Embed(’image.png’)” />
ใช้โหลดรูปเข้ามาเช่นกัน แถมยังทำ Anti-Alias ให้ด้วย เพียงแต่ว่ามันใช้กับรูปในลักษณะของ Embed มาตั้งแต่ตอน compile ได้เท่านั้น ไม่สามารถสั่ง Load path ที่ต้องการขณะ Run-time ได้จึงเป็นที่มาของปัญหานี้ ในบทความนี้เราจะแนะนำวิธีทำให้ <mx:Image> สามารถทำ Anti-Alias ได้ในตัวครับ

รูปก่อนทำ Anti-Alias
ก่อนอื่นให้สร้าง function ขึ้นมาใส่ไว้ใน class ที่เก็บ function ที่ใช้งานบ่อยๆ ของเราเอง (มันใช้บ่อยแน่ๆ ละครับ) แล้วใส่ function ดังนี้ (ของผมใช้ชื่อ class EffectHelper)
public static function smoothImage(evt:Event):void{
var myBitmap:Bitmap = ((evt.target as Image).content as Bitmap);
if (myBitmap != null) {
myBitmap.smoothing = true;
}
}
ทีนี้ตอนเรียกใช้งาน ก็เรียกแบบนี้ครับ
<mx:Image id=”imgReward” source=”image.png” complete=”EffectHelper.smoothImage(event)” />
บรรทัดเดียวก็ “เอาอยู่” ละครับ
ชีวิตง่ายขึ้นเยอะจริงๆ

รูปหลังทำ Anti-Alias
วิธี config และใช้ nginx + php-fpm + fast-cgi เบื้องต้นให้ใช้งานกับ Codeigniter by heha
Dec0
เนื่องด้วยทั่วๆ ไปแล้ว web server มาตรฐานทั่วๆ ไปที่ใช้งานกันคือ Apache แต่ว่า Apache นั้นบริโภค Memory อย่างไม่ไยดี และถ้าเว็บเรามีการใช้งาน static file จำพวกรูปภาพหรือ css, js มากๆ ก็จะกิน Memory หนักขึ้นไปอีก หลักการของ nginx จึงเปรียบเสมือนการเป็นป้ายบอกทางว่าถ้าเป็น static file ให้เรียกไฟล์นั้นๆ ขึ้นมาตรงๆ เลยไม่ต้องผ่าน apache หรือตัวกลางอื่นๆ แต่ถ้าเป็น Dynamic file เช่น PHP ก็ให้ส่งไปยัง Fast-cgi แทน ซึ่ง Fast-cgi จะทำหน้าที่อ่าน PHP เพียงอย่างเดียว ไม่ต้องเผื่อรองรับ static file จึงกิน Memory น้อยกว่านั่นเอง สุดท้ายจึงทำให้สามารถรองรับการใช้งานเว็บไซต์ที่มี traffic หนักๆ ได้อย่างสบายๆ กว่า apache มากหลายเท่าตัว
อันที่จริงแล้ว Apache ก็ไม่ได้มีแต่ข้อเสียขนาดนั้น ข้อดีของ Apache คือเหมือนเป็น All-in-one machine ติดตั้งตัวเดียว ทำงานได้ทุกอย่าง ถ้ามีคนใช้งานไม่มาก เราจะแทบไม่ต้องไปยุ่งกับการปรับ config เลยด้วยซ้ำไป เพียงแต่ว่าเมื่อเราต้องการให้รองรับการใช้งานหนักๆ ได้ เราจึงจำเป็นต้องใช้ “ผู้เชี่ยวชาญเฉพาะด้าน” ซึ่งในที่นี้คือ fast-cgi นั่นเอง และจะมี php-fpm คอยควบคุมสั่งการอีกทอดหนึ่งซึ่งแน่นอนว่าการ config เพื่อใช้งานจึงยุ่งยากกว่า แต่ก็แลกมากับประสิทธิภาพที่น่าพอใจ
รู้จักกับ config ที่น่าสนใจของ php ในไฟล์ php.ini by heha
Nov0
PHP มี config ต่างๆ มากมาย หากอยากรู้ว่า server ของเราเซ็ต config อะไรไว้อยู่บ้างให้ทดสอบด้วยการสั่ง phpinfo(); ในไฟล์ php ไฟล์ใดก็ได้ ระบบจะแสดง config ออกมาให้เห็นทั้งหมด รวมไปถึงหากต้องการทราบว่าไฟล์ php.ini อยู่ที่ไหนก็ดูได้จาก phpinfo(); เช่นกัน

ตัวอย่าง phpinfo()
สำหรับการ setup php ตั้งแต่เวอร์ชั่น 5.3 เป็นต้นไป จะมีไฟล์ php.ini-development เอาไว้เป็น sample ให้ copy เป็น php.ini ถ้าต้องการใช้ทดสอบโปรแกรมเฉยๆ และไฟล์ php.ini-production เอาไว้ใช้ใน server ที่ให้บริการกับลูกค้าจริง
