สิ่งที่ควรทำหลังจาก upgrade MySQL server

หลังจากทำการ upgrade MySQL server ควรจะใช้คำสั่งต่อไปนี้
#mysql_upgrade -uroot -p
และ

#mysqlcheck -uadmin -p --auto-repair --check --optimize --all-databases

เพื่อตรวจสอบว่ามีปัญหาระหว่างการ upgrade หรือไม่ เนื่องจากผมเจอปัญหาที่ดูเหมือนว่าฐานข้อมูลหายไป เมื่อตรวจสอบแล้วก็พบว่าฐานข้อมูลยังอยู่ แต่ถูกเติมข้างหน้าด้วย #mysql50#

If you have databases or tables from a version of MySQL older than 5.1.6 that contain special characters and for which the underlying directory names or file names have not been updated to use the new encoding, the server displays their names with a prefix of #mysql50# in the output from INFORMATION_SCHEMA tables or SHOW statements.

ที่มา http://dev.mysql.com/doc/refman/5.1/en/identifier-mapping.html

วิธีการติดตั้ง MediaWiki หลายเว็บโดยใช้ source code ร่วมกัน

เราสามารถทำการติดตั้ง MediaWiki หลายเว็บ โดยการใช้ source code ร่วมกันได้   โดยสามารถทำได้หลายวิธีดูได้จาก http://www.mediawiki.org/wiki/Manual:Wiki_family

ผมได้ทำการติดตั้งในเซิร์ฟเวอร์ที่ใช้ Plesk control panel  โดยมีขั้นตอนดังนี้

สมมติว่าเราจะติดตั้ง http://www.domain.com/mywiki1  และ http://www.domain.com/mywiki2 โดยใช้ source code ของ MediaWiki จาก http://www.domain.com/wiki

  1. ทำการดาวน์โหลด source code และแตกไฟล์ลงในไดเรกทอรีหลัก  โดยตั้งชื่อไดเรกทอรีว่า wiki (http://www.domain.com/wiki)
  2. สร้าง database หลักใน MySQL ที่ mywiki1 และ mywiki2 จะมาใช้ร่วมกัน
  3. ใช้ browser เปิดเรียก wiki ที่เพิ่งติดตั้งลงไปในข้อ  1
  4. ทำการติดตั้ง MediaWiki ตามขึ้นตอนปกติ   โดยให้ใส่ข้อมูลที่ต้องการของ mywiki1  และใช้ database ที่สร้างในข้อ 3  โดยจะต้องใส่ Database table prefix ให้แตกต่างกัน เช่นตั้งเป็น mywiki1_
  5. หลังจากดำเนินการตามข้อ 4 เรียบร้อยแล้ว เราจะได้ไฟล์ LocalSettings.php ในไดเรกทอรี config   ให้ย้ายไฟล์นี้ออกมาที่ไดเรกทอรีหลักของ wiki  โดยเปลี่ยนชื่อเป็น LocalSettings_mywiki1.php
  6. แก้ไขไฟล์ LocalSettings_mywiki1.php โดยแก้ค่าของตัวแปร $wgScriptPath ให้เป็น path ของ mywiki1 (http://www.domain.com/mywiki1) เช่น  $wgScriptPath       = “/mywiki1”;
  7. ทำตามข้อ 3-5 อีกครั้ง  สำหรับ mywiki2   โดยใส่ Database table prefix เป็น mywiki2_   และย้ายไฟล์ LocalSettings.php ไปไว้ในไดเรกทอรีหลัก wiki ในชื่อ LocalSettings_mywiki2.php   และ $wgScriptPath       = “/mywiki2”
  8. สร้าง symbolic link สำหรับ mywiki1 และ mywiki2   ไปที่ ไดเรกทอรี wiki ด้วยคำสั่ง
    ln -s wiki mywiki1  และ ln -s wiki mywiki2
  9. เพิ่ม option FollowSymLinks สำหรับไดเรกทอรี httpdocs ในไฟล์ ~/conf/vhost.conf ของโดเมน domain.com เช่น
    <Directory /home/www/vhosts/domain.com/httpdocs>
    Options FollowSymLinks
    </Directory>
  10. สั่งให้ plesk reconfigure ข้อมูลจากไฟล์ vhost.conf  โดยใช้คำสั่ง
    #/usr/local/psa/admin/sbin/websrvmng –reconfigure-vhost –vhost-name=domain.com
  11. ทำการ restart Apache web server
    #service httpd restart
  12. สร้างไฟล์ LocalSettings.php โดยให้มีโปรแกรมดังนี้

 

$callingurl = strtolower($_SERVER['REQUEST_URI']); //get the calling url
if ( strpos( $callingurl, 'mywiki1', 0) ) {
   require_once( 'LocalSettings_mywiki1.php' );
}
else if ( strpos( $callingurl, 'mywiki2', 0) ) {
   require_once( 'LocalSettings_mywiki2.php' );
}
else {
   echo "This wiki (in ". $callingurl . ") is not available. Check configuration.";
   exit(0);
}

 
ทดลองเปิดเว็บ http://www.domain.com/mywiki1 และ  http://www.domain.com/mywiki2

HTML5 Meta tag

Meta tag  ใน  HTML 5 ต่างจาก HTML 4.01 ดังนี้

  • ไม่รองรับ scheme attribute อีกต่อไป
  • attribute ใหม่คือ charset ทำให้สะดวกในการกำหนด character encoding ได้สะดวกขึ้น

อ่านเพิ่มเติมได้ที่นี่  HTML 5 Tag Reference

InnoDB กับ Lock wait timeout exceeded!

ผมใช้ innoDB  ใน MySQL แล้วเจอข้อความ error นี้

Lock wait timeout exceeded; try restarting  transaction

วิธีแก้ปัญหาที่ทำตอนนี้คือเปลี่ยนกลับไปใช้ MyISAM เหมือนเดิมก่อน

force ssl

force ssl ด้วย php

< ?php
 if ( !$_SERVER['HTTPS'] ) {
 header("location:https://www.yourdomain.com");
 exit;
 }
 ?>

อีกวิธีการหนึ่งคือใช้  .htaccess

วิธีที่ 1:

SSLOptions +StrictRequire
SSLRequireSSL
SSLRequire %{HTTP_HOST} eq "domain.com"
ErrorDocument 403 https://domain.com

วิธีที่ 2:

SSLOptions +StrictRequire
SSLRequireSSL
SSLRequire %{HTTP_HOST} eq "domain.com"
ErrorDocument 403 https://domain.com

ข้อมูลเพิ่มเติม

top tips!

# top -b -n 1 | grep Mem
Mem: 1016656k total, 941892k used, 74764k free, 164588k buffers

# top -b -n 1 | grep Cpu
Cpu(s): 0.3%us, 0.3%sy, 0.1%ni, 99.0%id, 0.1%wa, 0.1%hi, 0.2%si, 0.0%st

-b : Batch mode operation
Starts top in ‘Batch mode’, which could be useful for
sending output from top to other programs or to a file.
In this mode, top will not accept input and runs until the
iterations limit you’ve set with the ‘-n’ command-line
option or until killed.

Set MySQL Auto Increment Manually

ในกรณีที่ต้องการกำหนดค่า auto increment ใหม่ สามารถทำได้ตามรายละเอีดข้างล่างนี้

I have a database table with a auto increment column for primary key. As the records being add and delete many times, the auto increment value will keep increasing.

Problem One:
If I have entered 10 records, and deleted 9th, 10th records. The next auto increment value will be 11, not 9.

Solution:
Run a query:

ALTER TABLE tablename AUTO_INCREMENT = 1

This will reset the next auto increment value to current largest value in the auto increment column + 1. So, the auto increment value of next inserted record will start from 9.

Problem Two:
If I have entered 10 records, and deleted center records – 4th, 5th. I want to insert next record as 4th not 11th.

Solution:
Run the following query:

SET insert_id = 4;
INSERT INTO tablename VALUES ('blah', '...');

This will add the next record into record 4th.

The SET insert_id = #(where # is the next auto increment value you want to use) will reset the next auto increament value, the next query(INSERT) you run will use your choice of value.

Note: only effective for the immediate next query, one time.

Source: http://www.liewcf.com/archives/2004/04/mysql-reset-auto-increament-number/

vBulletin – Language / Charset Problems – Things To Check

Language / Charset Problems – Things To Check

Some people encounter problems with garbled characters when using vBulletin with non-English languages. Here are some things you can check based on my experience troubleshooting these problems:
Make sure your HTML charset is appropriate to your forum language:

Read more:  Click here

Curl กับ safe_mode หรือ open_basedir

If you are trying to use CURLOPT_FOLLOWLOCATION and you get this warning:
Warning: curl_setopt() [function.curl-setopt]: CURLOPT_FOLLOWLOCATION cannot be activated when in safe_mode or an open_basedir is set…

then you will want to read http://www.php.net/ChangeLog-4.php which says “Disabled CURLOPT_FOLLOWLOCATION in curl when open_basedir or safe_mode are enabled.” as of PHP 4.4.4/5.1.5.  This is due to the fact that curl is not part of PHP and doesn’t know the values of open_basedir or safe_mode, so you could comprimise your webserver operating in safe_mode by redirecting (using header(‘Location: …’)) to “file://” urls, which curl would have gladly retrieved.

อ่านต่อที่นี่ได้ครับ: http://www.php.net/manual/ro/function.curl-setopt.php#71313