Leaderboard (728 x 90)

Wednesday, September 30, 2009

เราจะสามารถทราบ root password ของ mysql ใน plesk ได้อย่างไร

ขึ้นอยู่กับชนิดของ database server ที่ใช้เก็บฐานข้อมูลของ plesk

============================================
กรณีที่เป็น Microsoft Access
============================================
Start >>Run ใส่ %plesk_dir%\admin\db\ แล้วกด Enter
เปิดไฟล์ psa.mdb ด้วยโปรแกรม Microsoft Access
============================================
กรณีที่เป็น Microsoft SQL Server
============================================
เปิดโปรแกรม Microsoft SQL Management Studio เพื่อเชื่อมต่อไปยัง Database Server แล้วเลือก database ที่ชื่อ psa
============================================
กรณีที่เป็น MySQL
============================================
ให้เปิด command prompt แล้วรันคอมมานด์
cd %plesk_dir%\Databases\MySQL\bin
mysql -P8306 -uadmin -p psa
============================================

จากนั้นให้เปิดดู table ที่ชื่อ DatabaseServers เพื่อดูข้อมูล admin ที่ใช้จัดการ database server

mysqldump ข้อมูลภาษาไทยเพี้ยน จะกู้กลับคืนมาได้อย่างไร

การใช้คำสั่ง mysqldump ข้อมูลภาษาไทยเพี้ยน จะ Import เข้าไปได้อย่างไร ในการแก้ปัญหาเรื่องภาษาไทยเพี้ยน จำเป็นต้องมีความรู้ความเข้าใจใน character set เป็นอย่างดีพอสมควร อ่านได้ที่ ความรู้เรื่อง mysql ตอน ปัญหาภาษาไทย กับ character set

ในบทความนี้ผมจะไม่กล่าวถึงเรื่องเกี่ยวกับ character set แต่จะกล่าวถึงวิธีการกู้ข้อมูลที่ผิดเพี้ยนไปนั้นกลับขึ้นมา

โดยก่อนอื่นให้ดูจากไฟล์ที่ dump ขึ้นมาว่ามีความผิดปกติในการเข้ารหัสข้อมูลภาษาไทยอย่างไรบ้าง

เช่น ถ้าตัวอักษรภาษาไทยกลายเป็นชุดอักษรสามตัวที่ขึ้นต้น ภหมายความว่ามีการเข้ารหัสด้วย utf8 แต่ถอดรหัสด้วย latin1

วิธีแก้ไข คือ
1. import ข้อมูลเดิมเข้าไปโดยไม่ต้องสนใจภาษาที่ผิดเพี้ยน
2. export อีกครั้งโดยเลือก default charset เป็น latin1 ด้วยคำสั่ง

mysqldump -u root -ppassword --default-character-set=latin1 --skip-set-charset -B dbname > dbname.sql

3. import ข้อมูลที่ export มาใหม่ โดยเลือก default charset เป็น utf8 ด้วยคำสั่ง

mysql -u root -ppassword --default-character-set=utf8 < dbname.sql

จะเห็นได้ว่า keyword ของการกู้ข้อมูลที่มีการเข้ารหัสผิดพลาด คือจะต้องทราบว่าข้อมูลผ่านการเข้ารหัสมาด้วย charset อะไรบ้าง นั่นเอง

เพื่อให้เข้าใจง่ายยิ่งขึ้น
ให้ นึกภาพข้อมูลที่รับส่งกันภายในคอมพิวเตอร์หรือระหว่างคอมพิวเตอร์ จะส่งกันเป็นข้อมูลไบนารี ดังนั้นเมื่อต้องการส่งข้อมูลที่เป็นตัวอักษรต่างๆ จะต้องมีการเข้ารหัสตัวอักษรให้เป็นตัวเลขฐานสองหรือข้อมูลไบนารีก่อน จากนั้นจึงส่งไปยังปลายทาง จากนั้นเมื่อผู้รับได้รับข้อมูลที่เป็นไบนารี จึงถอดรหัสข้อมูลไบนารีเป็นข้อมูลตัวอักษรอีกที

ดูตารางการเข้ารหัสสำหรับ UTF8
ดูตารางการเข้ารหัสสำหรับ TIS620
ดูตารางการเข้ารหัสสำหรับ LATIN1

จะ เห็นว่า ตัวอักษร ก เมื่อเข้ารหัสด้วย utf8 จะได้ข้อมูล 3 ไบต์ คือ 0xe0 0xb8 0x81 (เลขฐานสิบหก) จากนั้นเมื่อนำมาถอดรหัสด้วย latin1 จะได้ e0=à b8=¸ 81=ไม่มีค่า เป็นต้น

บทความที่เกี่ยวข้อง
mysqldump ข้อมูลภาษาไทยเพี้ยน จะกู้กลับคืนมาได้อย่างไร
ความรู้เรื่อง mysql ตอน ปัญหาภาษาไทย กับ character set
mysql: เมื่อภาษาไทยกลายเป็น ?????????

การ dump ข้อมูลใน MySQL ให้ถูกต้องตาม Character-set

สำหรับบันทึกนี้ขอกล่าวถึงเคล็ดลับในการแปลงฐานข้อมูลจากเดิมที่เป็น latin1 หรือ tis620 ให้เป็น utf8 นะครับ

มี เงื่อนไขเบื้องต้นว่า หาก character-set ของฐานข้อมูลเป็น tis620 หรือ latin1 (ความจริงเป็น tis620 ครับ เพราะ latin1 ไม่ใช่ character-set ของภาษาไทย) ต้องไม่กำหนดค่า

default-character-set=utf8

ใน my.cnf (สำหรับ Linux อยู่ที่ /etc/my.cnf หรือ /etc/mysql/my.cnf)

หลาย คนอาจจะชินกับการใช้ phpMyAdmin หากใช้แล้วไม่มีปัญหาก็ใช้ต่อไปครับ โดยปกติ เวลาจะ dump ข้อมูลโดยใช้ phpMyAdmin ก็ใช้วิธี export ออกมาเป็น SQL จะดีที่สุด วิธีที่จะดูว่า มีปัญหาหรือไม่ ก็คือ ลองเปิดไฟล์ที่ Export ออกมานั้นด้วย Text Editor ดู หรือใช้ command อื่นๆ เปิดดูก็ได้ครับ หากสามารถอ่านออกเป็นภาษาไทยได้ ก็แสดงว่า ไม่มีปัญหาครับ

ใน ที่นี้อยากแนะให้ใช้คำสั่ง mysqldump ซึ่งเป็น command line tool ที่นิยมใช้ใน Linux ครับ เข้าใจว่า ใน MS WIndows ก็มีเหมือนกัน วิธีใช้ก็ไม่น่าจะต่างกันมากครับ

ในการ dump ข้อมูล สิ่งที่ต้องทราบคือ character-set ของข้อมูลคือ อะไร ส่วนใหญ่จะไม่หนีจาก 3 ตัวนี้ครับ คือ latin1, tis620 และ utf8

หากไม่ทราบ ก็ลองด้วยการกำหนด character-set ไปเรื่อยๆ

วิธีการใช้คำสั่งก็ คือ

mysqldump --default-character-set=latin1 -h MySQLserver -u username -p DBName >DBName.sql

ตัว สีแดงคือ ค่าที่ต้องกำหนดให้ถูกต้องครับ หากเครื่องที่ทำการเรียกคำสั่ง mysqldump เป็นเครื่องเดียวกับ MySQL Server ก็ไม่ต้องมี "-h MySQLserver" ก็ได้ครับ

username คือ ชื่อ user ที่มีสิทธิ์ในการ access ฐานข้อมูล DBName

หาก โปรแกรมจัดการฐานข้อมูลที่ใช้อยู่แสดงผลเป็น character-set 8 bits (พวก tis-620, windows-874, iso-8859-11) การกำหนด --default-character-set=latin1 มักจะไม่มีปัญหาครับ ซึ่งหมายถึงอ่านออกเป็นภาษาที่ถูกต้องแน่นอนครับ

แต่สิ่งที่ต้องทราบต่อไปก็คือ ภาษาไทยที่แสดงนั้น มี character-set ที่แท้จริงเป็น tis620 ครับ ไม่ใช่ latin1 ครับ

หากเปิดไฟล์ DBName.sql ดู จะพบว่า ที่หัวไฟล์มีหลายบรรทัดเป็น

-- MySQL dump 10.9
--
-- Host: localhost Database: moodle
-- ------------------------------------------------------
-- Server version 4.1.20

ส่วน 5 บรรทัดข้างบนนี้ เป็น comment จะไม่สนใจก็ได้ครับ

/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES latin1 */;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 *
/;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;

หลาย บรรทัดเหล่านี้ดูเหมือนจะเป็น comment แต่ไม่ใช่ครับ มันมีความหมายครับ เช่น 40101 หมายถึง MySQL รุ่น 4.1.1 และ 40014 หมายถึง MySQL รุ่น 4.0.14 และในแต่ละบรรทัดก็มีความหมายว่า หากเป็น MySQL รุ่นเท่ากับหรือสูงกว่าที่บอกไว้ต้นบรรทัด ก็จะ run คำสั่งที่ตามมา เช่น

/*!40101 SET NAMES latin1 */; ก็หมายถึง หากเรา import ข้อมูล DBName.sql เข้า MySQL Server รุ่นที่เท่ากับหรือสูงกว่า 4.1.1 ก็จะมีการสั่งให้ SET NAMES latin1 ซึ่งหมายถึงการตั้งค่าการสื่อสารข้อมูลด้วย character-set lantin1 แต่ถ้าเป็นการ import ข้อมูลเข้า MySQL Server รุ่นที่ต่ำกว่า 4.1.1 บรรทัดนั้นก็จะถูกข้ามไปครับ

สิ่งที่สำคัญในที่นี้ก็คือ การกำหนดให้เป็น latin1 ในที่นี้ อาจจะทำให้ import ข้อมูลผิดพลาด หากไม่แน่ใจก็ให้ลบบรรทัดนี้ทิ้งไป

ส่วนที่จะเป็นปัญหาต่อมา คือ ในส่วนของไฟล์ที่เกี่ยวกับการสร้างตาราง เช่น

CREATE TABLE `mdl_assignment` (
`id` int(10) unsigned NOT NULL auto_increment,
`course` int(10) unsigned NOT NULL default '0',
`description` text NOT NULL,
`format` tinyint(2) unsigned NOT NULL default '0',
`resubmit` tinyint(2) unsigned NOT NULL default '0',
`type` int(10) unsigned NOT NULL default '1',
`maxbytes` int(10) unsigned NOT NULL default '100000',
`timedue` int(10) unsigned NOT NULL default '0',
`grade` int(10) NOT NULL default '0',
`timemodified` int(10) unsigned NOT NULL default '0',
PRIMARY KEY (`id`),
KEY `course` (`course`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

ให้สังเกตที่บรรทัดสุดท้ายครับ ตรงนี้ ให้ทำการลบ DEFAULT CHARSET=latin1 ออกให้หมด

ตรวจสอบไฟล์ให้แน่ใจว่า สามารถอ่านได้เป็นปกติ โดยที่เป็น tis-620

ขั้นตอนต่อมา คือ การ import ข้อมูลเข้า MySQL Server ที่กำหนด default-character-set=utf8 ใน my.cnf แล้ว

โดยปกติ ก็ใช้คำสั่ง

mysql --default-character-set=tis620 -h MySQLserver -u username -p DBName < DBName.sql

สังเกต ว่า การกำหนด --default-character-set=tis620 ในคำสั่งนี้ ต้องระบบ character-set ของไฟล์ให้ตรงกัน โดยไม่จำเป็นต้องแปลงไฟล์ให้เป็น utf8 ครับ เพราะ MySQL Server จะทำการแปลงให้เอง

สิ่งสำคัญต่อไป ก็คือ โปรแกรมที่ใช้จัดการฐานข้อมูลครับ ต้องใช้ character-set เหมือนกับของฐานข้อมูลเท่านั้นครับ และก็มีเคล็ดลับอีกเล็กน้อย ซึ่งจะได้กล่าวในบันทึกอื่นต่อไปครับ

ที่มา: http://share.psu.ac.th/blog/myopensource/5425

Tuesday, September 29, 2009

ติดตั้ง ASP.NET 32 bit ใน Windows 64 bit อย่างไร

ในการติดตั้งซอฟต์แวร์บางตัว เช่น Report Service ของ SQL Server 2005 32 bit จะต้องทำงานร่วมกับ ASP.NET 2.0 32 bit เท่านั้น หรือ
ใน กรณีทีต้องการติดตั้ง ASP.NET 1.1 บน Windows 64 bit จะเกิดปัญหา คือไม่สามารถทำงานได้ถูกต้อง เพราะ ASP.NET 1.1 จะทำงานได้เฉพาะบนโหมด 32 bit เท่านั้น

โดยปกติ IIS 6.0 บน Windows 64 bit จะทำงานรองรับทั้งโหมด 32 bit และ 64 bit แต่จะทำงานได้แค่โหมดใดโหมดหนึ่งเท่านั้น ซึ่งโดยค่าตั้งต้นจะทำงานในโหมด 64 bit

เช่นเดียวกันกับ ASP.NET 2.0 ซึ่งสามารถทำงานได้ทั้งในโหมด 32 bit และ 64 bit แต่จะทำงานได้ในโหมดใดโหมดหนึ่งเท่านั้น

แต่ ASP.NET 1.1 จะทำงานได้เฉพาะบนโหมด 32 bit เท่านั้น

คำ ถามก็คือ ในกรณีที่ต้องการติดตั้งใช้งาน ASP.NET 1.1 ร่วมกับ ASP.NET 2.0 พร้อมกัน จะสามารถทำได้อย่างไร หรือในกรณีที่ต้องการติดตั้ง Report Service ของ SQL Server 2005 32 bit บน Windows 64 bit จะสามารถทำได้อย่างไร คำตอบก็ชัดเจนครับ นั่นก็คือ ต้องเปลี่ยนโหมดของ IIS และ ASP.NET 2.0 ไปทำงานในโหมด 32 บิต ครับ

ขั้นตอนการสลับโหมดการทำงานของ IIS 6.0 บน Windows 64 bit
คลิกที่ Start คลิก Run พิมพ์ cmd แล้วคลิก OK
ถ้าต้องเปิดใช้งาน IIS 6.0 โหมด 32 bit ให้พิมพ์คำสั่งต่อไปนี้:
cscript %SYSTEMDRIVE%\inetpub\adminscripts\adsutil.vbs SET W3SVC/AppPools/Enable32bitAppOnWin64 1
ถ้าต้องเปิดใช้งาน IIS 6.0 โหมด 64 bit ให้พิมพ์คำสั่งต่อไปนี้:
cscript %SYSTEMDRIVE%\inetpub\adminscripts\adsutil.vbs SET W3SVC/AppPools/Enable32bitAppOnWin64 0

ขั้นตอนการสลับโหมดการทำงานของ ASP.NET 2.0
คลิกที่ Start คลิก Run พิมพ์ cmd แล้วคลิก OK

ถ้าต้องการติดตั้ง ASP.NET 2.0 โหมด 32 bit ให้พิมพ์คำสั่งต่อไปนี้
%SYSTEMROOT%\Microsoft.NET\Framework\v2.0.50727\aspnet_regiis.exe -i
ไปที่ Control Panel >> Administrative Tools >> Internet Information Services Manager
ในรายการ Web Service Extensions ให้ตรวจสอบว่าสถานะของ ASP.NET v.2.0.50727 (32 bit) มีค่าเป็น Allowed หรือไม่ ถ้าไม่ ให้เปลี่ยน สถานะเป็น Allowed

ถ้าต้องการติดตั้ง ASP.NET 2.0 โหมด 64 bit ให้พิมพ์คำสั่งต่อไปนี้
%SYSTEMROOT%\Microsoft.NET\Framework64\v2.0.50727\aspnet_regiis.exe -i
ไปที่ Control Panel >> Administrative Tools >> Internet Information Services Manager
ในรายการ Web Service Extensions ให้ตรวจสอบว่าสถานะของ ASP.NET v.2.0.50727 มีค่าเป็น Allowed หรือไม่ ถ้าไม่ ให้เปลี่ยน สถานะเป็น Allowed