หน้าเว็บ

วันจันทร์ที่ 29 พฤศจิกายน พ.ศ. 2553

คำสั่งเปลี่ยนชื่อ Table ใน MySQL

ตรงตัวครับ คำสั่งเปลี่ยนชื่อ Table ใน MySQL สำหรับเวลาที่สร้าง Table เสร็จแล้วต้องการเปลี่ยนชื่อในภายหลัง

RENAME TABLE oldtablename TO newtablename


ระบบที่ทดสอบ

MySQL: 5.1.49

วันพุธที่ 11 สิงหาคม พ.ศ. 2553

เปลี่ยนให้ MySQL รองรับ remote connection

โดยค่าปริยาย (default) แล้ว MySQL จะทำการฟังที port 3306 เฉพาะ localhost (127.0.0.1) เท่านั้น ถ้าต้องการให้รองรับ connection จาก host อื่นจะทำไม่ได้

วิธีการคือให้ไปแก้ไฟล์ /etc/mysql/my.cnf แล้วทำการ comment บรรทัด bind-address ทิ้ง

#bind-address = 127.0.0.1

หลังจากนั้นก็ให้ restart MySQL Server

sudo service mysql restart

ระบบที่ทดสอบ
OS: Ubuntu 10.04
MySQL: 5.1.41

ที่มา
http://www.howtogeek.com/howto/mysql/switch-mysql-to-listen-on-tcp/

วันพฤหัสบดีที่ 4 มีนาคม พ.ศ. 2553

แก้ค่า auto_increment ใน MySQL

บางครั้งในฐานข้อมูลที่มีการ set ให้มี field ที่เป็น auto_increment แต่บังเอิญเกิดเหตุการณ์ที่เราต้องไปลบ record สุดท้าย เช่น ถ้าค่าวิ่ง 1,2,3,4,5 แล้วเราลบ 5 ออก พอเราใส่อันใหม่เข้าไปมันจะยังนับต่อเนื่องจนกลายเป็น 1,2,3,4,6 ซึ่งเราอยากให้มันเริ่มนับต่อที่ 5 ให้เราแก้ไขโดยใช้คำสั่งดังนี้
ALTER TABLE ชื่อตาราง AUTO_INCREMENT=5
ถ้าต้องการให้เป็นค่าอื่นก็เปลี่ยนเอาตรงตัวเลขหลัง AUTO_INCREMENT= นั่นล่ะครับ

วันจันทร์ที่ 21 กรกฎาคม พ.ศ. 2551

ปัญหา ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)

วันนี้พยายามจะลง MySQL5.0 บน FreeBSD 7 แต่แล้วก็ติดปัญหาคือ
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)

ซึ่งพยายามค้นหาคำตอบ แต่ก็ไม่เจอคำตอบที่ใช้ได้กับเคสของผมเลยซักอัน ดังนั้นจะขอเล่าอาการก่อน

ผมลง MySQL5.0 ด้วย ports โดย
localhost# cd /usr/ports/databases/mysql50-server
localhost# make -D BUILD_OPTIMIZED install clean
localhost# rehash

แล้วก็สั่ง script mysql_install_db
localhost# mysql_install_db --user=mysql
แล้วก็เริ่มเปิด daemon ด้วย
localhost# mysqld_safe &

พอมาถึงขั้นตอนนี้ อ่านในหลายๆสำนักเค้าจะบอกให้ตั้งค่า root password โดยสั่ง
localhost# mysqladmin -u root password 'rootpassword'
แต่พอผมสั่งปุ๊ปก็เกิด error ขึ้นมาว่า
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)

หรือว่าแค่สั่ง mysql เพื่อเข้า client ก็จะไม่ได้เช่นเดียวกัน
ก็เลยลองปิด daemon ทิ้งก่อนด้วย
localhost# killall -9 mysqld
แล้วเข้าไปใหม่แบบไม่ต้องใส่ password ชั่วคราวด้วย
localhost# mysqld_safe --skip-grant-tables &
แล้วเข้า mysql client ทันทีด้วย
localhost# mysql
คราวนี้เลยลองสั่งคำสั่ง
mysql> use mysql
mysql> SELECT user, password FROM user

เพื่อจะดูว่าค่า default password ของ root มันคืออะไร
แต่ปรากฎว่าไม่มี user ปรากฎขึ้นมาเลยซักคนเดียว

สรุป มันไม่ได้สร้าง user root ขึ้นมาให้

วิธีแก้ ผมใช้การ add user root เข้าไปเองเลยด้วยคำสั่ง
mysql> insert into user (host, user, password, select_priv, insert_priv
, update_priv, delete_priv, create_priv, drop_priv, reload_priv
, shutdown_priv, process_priv, file_priv, grant_priv, references_priv
, index_priv, alter_priv, show_db_priv, super_priv, create_tmp_table_priv
, lock_tables_priv, execute_priv, repl_slave_priv, repl_client_priv
, create_view_priv, show_view_priv, create_routine_priv, alter_routine_priv
, create_user_priv) values('localhost', 'root', PASSWORD('rootpassword')
, 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y'
, 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y');

(มี Y ทั้งหมด 26 ตัว จริงๆคงมีวิธีที่ grant all privileges แต่ผมยังทำไม่เป็น - - " )
แล้วก็
mysql> FLUSH PRIVILEGES;
เป็นอันเรียบร้อย แล้ว
mysql> exit
ออกมา แล้วสั่ง restart mysql ด้วย
localhost# /usr/local/etc/rc.d/mysql-server restart
คราวนี้พอสั่งเพื่อเข้าไปใช้งานใหม่ก็จะสามารถใช้ client โดยเป็น root พร้อมกับ password ที่ได้ตั้งเอาไว้ได้แล้วด้วยคำสั่ง
localhost# mysql -u root -p
และใส่ password ที่เราตั้งไว้เป็นอันใ้ช้ได้

แต่ว่าก็ยังไม่แน่ใจว่าเป็นวิธีแก้ที่ถูกต้องรึเปล่าแต่พอทำให้ถูๆไถๆไปได้ซักระยะ

ระบบที่ใช้ทดสอบ
OS: FreeBSD 7.0
MySQL: MySQL5.0-server (install by port)