Posts Tagged ‘MySQL’

Split MySQL Query แยก RO/RW

Posted by อัทศักดิ์ วงศ์กิตตะ on Sunday, June 8th, 2008

วันนี้มีปัญหาขึ้นมาครับ เนื่องจาก MySQL Cluster ที่ใช้งบานนั้นลองทดสอบความเร็วแล้วสู้ MySQL แล้วใช้ Local Engine ไม่ได้เลย งานนี้เลยต้องหาทางออกครับ ผมเลยไปมอง เรื่อง MySQL Replication หลังจาก Setup และ Tuning เสร็จ ก็มาลองทดสอบความเร็ว มัน Query เร็วกว่า MySQL Cluster หลายเท่าเลยครับ

ทีนี้ก็มาดูเรื่อง Codeing ปัญหาคือมันเป็นโปรแกรมที่เค้าเขียนมานานละ ผมเข้าไปแก้อะไรไม่ค่อยได้ หรือถ้าแก้จริงๆ อยาจจะเป็น Bug อีกก็ได้ คิดไปๆมาๆ อ่าเจอทางออกแล้ว

ปัญหา
- MySQL Cluster ช้า ต้องไปใช้ MySQL Replication แทน
- ไล่แก้ Code ลำบาก เพระา code ค่อนข้างมาก
- Query ต้องเร็วและเพิ่ม MySQL Server ได้ในอนาคต

ทางแก้
- MyQL-Proxy ส่วนนี้ผมลองเอามาใช้แล้วครับ ลอง Query ดูมันก็ยังช้ากว่า Connect เข้า DB ตรงๆถึง 5 - 10 เท่า
- Edit Query ผมเลือกทางนี้ครับ แต่มันมีวิธีลักไก่หน่อย แนวคิดคือต้องไม่ไปยุ่งกะ Code มาก ผมเลยทำการสร้าง php function ใหม่ขึ้นมาครับ โดยทำหน้าที่ check sql ก่อนที่จะ Query ว่าเป็น SELECT, UPDATE, INSERT, DELETE แล้วให้ function ที่สร้างขึ้นมา เลือกที่จะไป query กะ mysql เครื่องไหน

1. สร้าง function mysql_do_query

function mysql_do_query( $sql, $count_rw=null)
{
	global $conn_ro, $count_rw, $count_ro;
	if ( ! empty( $sql))	
	{
		if ( ereg("^SELECT(.*)", strtoupper( $sql)))
		{
			$count_ro++;
			return mysql_query( $sql, $conn_ro);
		} else {
			$count_rw++;
			return mysql_query( $sql);
		}
	}
}

2. ทำการ edit *.php แล้วทำการ replace mysql_query -> mysql_do_query โดยผมใช้ คำสั่ง sed ใน shell script เพื่อแก้ไขไฟล์

#!/bin/bash
for fl in *.php; do
mv $fl $fl.old
sed 's/mysql_query/mysql_query/g' $fl.old > $fl
rm -f $fl.old
done

เสร็จแล้วก็รันครับ shell script จะทำการ find หา *.php แล้วทำการเปลี่ยน function ให้ ต่อไปเวลา ให้ programmer เขียน codeing ก็ให้ทำการ ใช้ function mysql_do_query() แทนครับ

MySQL Cluster on Debian AMD64

Posted by อัทศักดิ์ วงศ์กิตตะ on Friday, June 6th, 2008

สวัสดีเพื่อนๆรวมโลกทุกท่าน วันนี้ก็ได้โอกาศมาเขียนบทความเรื่อง MySQL Cluster สะที หลังจากที่ได้ทำการติดตั้ง และงมกะ Config มาหลายวันจริงๆผมต้องย้าย Database ให้เสร็จตั้งแต่วันที่ 2/6/2008 แต่จนถึงวันนนี้ก็ยังไม่ได้ย้าย

Database เลย เหตุผลหลักคือ

1. Database ค่อนข้างใหญ่ ประมาณ 7G และมี Redcord อยู่ประมาณ 38 ล้าน Redcord
2. ตอน Import Data ผม Dump database มาผิดแบบ
3. MySQL ตอนที่ผม Lab test + ใช้งานจริงเป็นคนละ Version

ด้วยเหตุผลเหล่านี้ทำให้ผมขึ้น MySQL Cluster ไม่ได้ หลังจากลองหาทางแก้อยู่หลายวัน ก็แก้ได้จนหมด งั้นวันนี้ผมก็ของบอกวิธีติดตั้ง และ Config ให้สามารถใช้งานได้ก่อนละกันนะครับ ส่วนเรื่องการ Tuning เอาไว้เดี๋ยวมาบอกอีกที

อุปกรณ์
- Dell 1950, CPU 4Core 2.66GHz x2, Ram 16G (ndbd+mysqld)
- PC P4, Ram 1G (ndb_memd)

การตั้งค่า
- DBC1 IP: 192.168.1.21
- BDC2 IP: 192.168.1.22
- MGM IP: 192.168.1.11
คลิกที่นี่เพื่อดูส่วนที่เหลือ »

Install MySQL Server on FreeBSD

Posted by อัทศักดิ์ วงศ์กิตตะ on Wednesday, June 4th, 2008

     สวัสดีครับตอนนี้ว่างเพราะรอ Restore Databse เข้า MySQL Cluster เลยพอมีเวลามาเขียนวิธีติดตั้ง MySQL บน FreeBSD เ้อาง่ายๆละกันนะครับ

1. ทำการ Update ports ของ FreeBSD

cvsup -g -L 2 /usr/share/examples/cvsup/ports-supfile -h cvsup.th.freebsd.org

2. ทำการติดตั้ง MySQL Server ผมเลือก Version 5.0 นะครับ

cd /usr/ports/databases/mysql50-server
make all install clean WITH_CHARSET=tis620 WITH_XCHARSET=all WITH_COLLATION=tis620_thai_ci

คลิกที่นี่เพื่อดูส่วนที่เหลือ »

แก้ปัญหาลืมรหัสผ่านของ Joomla!

Posted by กวิน ชัยเลิศ on Monday, June 2nd, 2008

โดยปกติจะไม่สามารถกู้รหัสผ่าน (password) ของ joomla ได้ เนื่องจากรหัสผ่านนั้นจะถูกเข้ารหัส (MD5 hash) ก่อนบันทึกลงไปในฐานข้อมูลเพื่อป้องกันการกู้รหัสผ่าน ดังนั้นหากลืมรหัสผ่านต้องทำการเปลี่ยนรหัสจึงจะสามารถ Login Joomla! Administrator ได้

ซึ่งวิธีการเปลี่ยนรหัสผ่านใหม่สามารถทำได้โดย
UPDATE Field password ใน Table jos_users นั่นเอง

UPDATE jos_users SET password = MD5('password')
WHERE id = '62' AND username = 'admin';

Shell Script Backup MySQL

Posted by อัทศักดิ์ วงศ์กิตตะ on Saturday, May 31st, 2008

สวัสดีครับผม ว่าแล้ววันนี้ก็เขียน shell script ง่ายๆ เพื่อ backup mysql ลง NFS ที่ผม map ไว้ โดย script ที่เขียนขึ้นมานั้น จะมีข้อดีก็ตรงการตั้งเวลาในการลบ data เก่าทิ้งได้

#!/bin/sh
 
export PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin:/root/bin
 
BACKUP_SRC=/usr/home/mysql”
BACKUP_DST=/data/backup/mysql”
LIMIT=7d
 
########################################
HOSTNAME=`uname -n`
DATE=`date +%Y%m%d`
DATE_DELETE=`date -v-${LIMIT} +%Y%m%d`
BACKUP_LOG=”${BACKUP_DST}/backup.log########################################
 
echo “=============================>> ${BACKUP_LOG}
echo `date` >> ${BACKUP_LOG}
echo -n “delete expire backup data..” >> ${BACKUP_LOG}
rm -rf $BACKUP_DST/mysql-$DATE_DELETE 1> /dev/null 2> /dev/null
echo ” done” >> ${BACKUP_LOG}
 
echo -n “backup database..” >> ${BACKUP_LOG}
cp -Rp $BACKUP_SRC $BACKUP_DST/$DATE
echo ” done” >> ${BACKUP_LOG}

การทำงานของ script คือ ระบบจะทำการหาวันปัจจุบัน และวันที่ expire “DATE_DELETE=`date -v-${LIMIT} +%Y%m%d`” โดยจะลบวันจากปัจจุบันไปอีก 7 วัน แล้วก็ค่อย Delete ทิ้งครับผม ส่วนของวัน สามารถแก้่ไขได้ครับ เป็น 7d, 1m (1เดือน) ประมาณนี้ครับ

แก้ปัญหาลืมรหัสผ่านของ wordpress

Posted by กวิน ชัยเลิศ on Friday, May 30th, 2008

สำหรับวิธีแก้ปัญหารหัสผ่านที่ตั้งไว้ี้ก็ไม่ยากครับ
โดยปกติ wordpress จะเก็บข้อมูลของผู้ใช้ใน Table wp_users
ซึ่งวิธีการเปลี่ยนรหัสผ่านใหม่สามารถทำได้โดย
UPDATE Field user_pass ใน Table wp_users นั่นเอง

ลองทำตามวิธีนี้ครับ

UPDATE wp_users SET user_pass = MD5('password')
WHERE user_login = 'admin';

ขอให้สนุกกับ wordpress ครับ