Sunday, October 23, 2005

อัพเกรด MySQL 4.0.25 -> 4.1.14

จากที่ได้แต่มอง Linux ค่ายอื่นๆเขาใช้ mySQL 4.1 กันมาสักพักแล้ว ตอนนี้ในที่สุด
Gentoo ก็ปล่อย mySQL 4.1.14 มาให้อัพเกรดกันแล้ว ความจริงมันก็มีให้ลง แต่มัน
mask package ไว้ คือไม่ stable นั่นเอง แต่ตอนนี้ถ้าใครสั่ง emerge sync และ
สั่ง emarge mysql มันก็จะอัพเกรดเป็น mySQL 4.1.14 ทันที

แต่อย่าได้ทำอย่างั้นเชียวครับ ถ้าใครคิดอัพเกรดให้ลองบนเครื่องตนเองก่อนอย่าได้ลอง
ลงบนเครื่อง Production Server เชียวเพราะมันเปลี่ยนไปเยอะเหมือนกันครับ
วิธีการอัพเกรดก็ใช่ว่าจะแค่ emerge เท่านั้นนะครับ มันจะยุ่งยากกว่านั้นหน่อย
ให้ลองดูวิธีการอัพเกรดที่ทางเว็ป Gentoo ทำไว้ครับ ตามลิงก์ด้านล่างเลย

http://www.gentoo.org/doc/en/mysql-upgrading.xml

เท่าที่ผมได้ลองอัพเกรดเครื่องที่บ้านดูก็ไม่มีปัญหาครับ เพียงแต่ mySQL 4.1.x นี่
จะมีเรื่อง Charset เข้ามาเกี่ยวข้อง และเว็ปไซต์ที่มีการเก็บข้อมุลเป็นภาษาไทย
หลังจากอัพเกรดตามเอกสารของ Gentoo แล้ว Charset ของฐานข้อมูลจะเป็น Latin1
ซึ่ง script เดิมๆทั่วไป อย่าง IPB นี่ยังใชห้งานภาษาไทยได้อยู่เหมือนเดิมครับ
แต่การแสดงผลภาษาไทยใน phpmyadmin จะเห็นเป็นภาษาต่างดาว เท่านั้นเอง

ผมทดลองพยายามเปลี่ยน charset ของ database เป็น TIS620 และ UTF-8 เท่าที่ลอง
ตอนแรกๆก็ไม่สามาถทำให้ phpmyadmin แสดงผลข้อมุลที่เป็นภาษาไทยได้ถูกต้อง
แต่ถ้าเซ้ตให้ phpmyadmin แสดงผลข้อมูลภาษาไทยใน database ถูกต้อง การแสดงผล
ภาษาไทยใน script อย่าง IPB ก็จะแสดงผลไม่ถูกต้อง - -"

จนสุดท้ายผมเลยลอง emarge mysql ใหม่ โดยใช้คำสั่งด้านล่างนี้ครับ
(อย่าลืม backup database ก่อนนะครับ)

USE="utf8" emerge mysql


เสร็จแล้วก็เปิดไฟล์ /etc/mysql/my.cnf ขึ้นมาแล้วให้เปลี่ยนค่าต่างๆในบรรดทัดเหล่านี้

character-sets-dir=latin1
default-character-set=latin1



มี่กี่ที่ให้เปลี่ยน latin1 เป็น utf8 ให้หมดเลยครับ แล้วจัดการ restart mySQL ซะ

/etc/init.d/mysqld restart



หลังจากนี้ลองดูใน phpmyadmin เปิดฐานข้อมุลที่มีข้อมุลภาษาไทยดูจะเห็นว่ามันยัง
ไม่ถูกต้องอยู่ ไม่ต้องตกใจเพราะ ให้เรา convert ไฟล์ .sql ที่เรา backup ไว้เป็น UTF8
ผมใช้ KWRITE เปิดไฟล์แล้ว save as โดยเลือก encode format เป็น UTF-8
จากนั้นผมก็ import ฐานข้อมูลกลับเข้าไป ขั้นตอนนี้ถ้าฐานข้อมูลไม่ใหญ่จะใช้ phpmyadmin
ก็ได้ครับ แต่ผมใช้คำสั่ง command line เอา รูปแบบคำสั่งก็ตามด้านล่างเลยครับ

mysql -u -p dbname < backup.sql



ซึ่งหลังจากทำทั้งหมดเสร็จแล้ว คราวนี้การแสดงผลภาษาไทยก็จะถูกต้องแล้วครับ
อย่าลืมนะครับว่า script php นั้นต้องแสดงผลด้วย encode UTF-8 ถ้าเคยใช้เป็น TIS-620
ก็เปลี่ยนด้วยครับ

ปล1. รีบเขียนไปหน่อยอ่านแล้วถ้ามึนๆ ต้องขอโทษด้วยครับ
ปล2. สำหรับเว็ปนี้ เครื่อง server ผมยังไม่ได้อัพเกรด mySQL นะครับ ยังเสียวๆ
เพราะบนเครื่องนี้มีหลายเว็ป และหลายโปรแกรมที่ใช้งาน mySQL เลยรอไปก่อนสักพัก
ถึงค่อยอัพเกรด

1 comment:

ปุ๋ย said...

ขอบคุณมากครับสำหรับความรู้ เพราะผมกำลังมึนๆเรื่อง
ทำอย่างไรให้ phpadmin แสดงตัว อักษร utf8 ให้เป็น
ภาษาไทยอยู่พอดีครับ เสิชจากกูเกิ้ล เข้ามาอ่านเลยครับ
เด๋วผมไปลองทำดูก่อน ยังไงก็พอเข้าใจแล้วครับ