• ครูเอ๊ะ ออนไลน์
    สำนักงานเขตพื้นที่การศึกษามัธยมศึกษา เขต 26 (มหาสารคาม)
    โรงเรียนนาเชือกพิทยาสรรค์ ต.นาเชือก อ.นาเชือก จ.มหาสารคาม 44170

  • ครูเอ๊ะ ออนไลน์
    สำนักงานเขตพื้นที่การศึกษามัธยมศึกษา เขต 26 (มหาสารคาม)
    โรงเรียนนาเชือกพิทยาสรรค์ ต.นาเชือก อ.นาเชือก จ.มหาสารคาม 44170

  • ครูเอ๊ะ ออนไลน์
    สำนักงานเขตพื้นที่การศึกษามัธยมศึกษา เขต 26 (มหาสารคาม)
    โรงเรียนนาเชือกพิทยาสรรค์ ต.นาเชือก อ.นาเชือก จ.มหาสารคาม 44170

  • ครูเอ๊ะ ออนไลน์
    สำนักงานเขตพื้นที่การศึกษามัธยมศึกษา เขต 26 (มหาสารคาม)
    โรงเรียนนาเชือกพิทยาสรรค์ ต.นาเชือก อ.นาเชือก จ.มหาสารคาม 44170

  • ครูเอ๊ะ ออนไลน์
    สำนักงานเขตพื้นที่การศึกษามัธยมศึกษา เขต 26 (มหาสารคาม)
    โรงเรียนนาเชือกพิทยาสรรค์ ต.นาเชือก อ.นาเชือก จ.มหาสารคาม 44170

  • ครูเอ๊ะ ออนไลน์
    สำนักงานเขตพื้นที่การศึกษามัธยมศึกษา เขต 26 (มหาสารคาม)
    โรงเรียนนาเชือกพิทยาสรรค์ ต.นาเชือก อ.นาเชือก จ.มหาสารคาม 44170

  • ครูเอ๊ะ ออนไลน์
    สำนักงานเขตพื้นที่การศึกษามัธยมศึกษา เขต 26 (มหาสารคาม)
    โรงเรียนนาเชือกพิทยาสรรค์ ต.นาเชือก อ.นาเชือก จ.มหาสารคาม 44170

  • ครูเอ๊ะ ออนไลน์
    สำนักงานเขตพื้นที่การศึกษามัธยมศึกษา เขต 26 (มหาสารคาม)
    โรงเรียนนาเชือกพิทยาสรรค์ ต.นาเชือก อ.นาเชือก จ.มหาสารคาม 44170

  • ครูเอ๊ะ ออนไลน์
    สำนักงานเขตพื้นที่การศึกษามัธยมศึกษา เขต 26 (มหาสารคาม)
    โรงเรียนนาเชือกพิทยาสรรค์ ต.นาเชือก อ.นาเชือก จ.มหาสารคาม 44170

สร้างเว็บไซต์แบบแยกฐานข้อมูลคนละเซิร์ฟเวอร์กับเว็บโดยใช้ Ubuntu 18.04 ใน DigitalOcean

ชื่อภาษาอังกฤษ "How To Set Up a Remote Database to Optimize Site Performance with MySQL on Ubuntu 18.04"
Cr: https://www.digitalocean.com/community/tutorials/how-to-set-up-a-remote-database-to-optimize-site-performance-with-mysql-on-ubuntu-18-04

บทความนี้ ใช้ Cloud Server จาก DigitalOcean สามารถสมัครใช้งานฟรี $100 ในเวลา 60 วัน คลิกที่นี่เพื่อสมัครรับ $100 (ประมาณ 3400 บาท) 
ดูวิธีการสมัครที่นี่ => https://krucom.obec.ac/home/articles/19/

บทนำ

การสร้างเว็บไซต์ที่มีการใช้ฐานข้อมูล MySQL และมีคนเข้าใช้งานเว็บไซต์จำนวนมาก อาจจะเกิดปัญหาที่เรียกว่า คอขวด ให้ระบบไม่สามารถให้บริการได้ทัน ทำให้เว็บไซต์ช้า หรือที่เรียกว่าเว็บอึด ไปจนถึงเว็บล่มได้ อันเนื่องมาจาก มีการเรียกใช้งานฐานข้อมูล MySQL และ Web server จำนวนมาก ทำให้ Server ตัวเดียวทำงานไม่ทันนั้นเอง ซึ่งปัญหานี้เราสามารถปรับปรุงระบบ ให้ทำงานได้ดีขึ้นได้หลายวิธี โดยมีหนึ่งวิธีที่นิยมทำกัน นั่นก็คือ การแยกเว็บไซต์ และฐานข้อมูล ไปอยู่ที่ Server คนละตัว หรือจะเรียกว่า Remote Database ก็ได้ โดยเราสามารถติดตั้งระบบตั้งแต่เริ่มต้นได้ดังนี้ (ในบทความนี้จะใช้ Server ที่ DigitalOcean ในการนำเสนอ)

1. สร้าง Droplet ขึ้นมาเป็น Web-Server  โดยใช้ตัวเลือกดังนี้
- OS : ubunto 18.04
- Plan : Standard ($5/mo - 1GB/1CPU/25GB)
- Datacenter region : Singapore
- Option : Private Networking


2. สร้าง Droplet ขึ้นมาเป็น MySQL-Server โดยใช้ตัวเลือกดังนี้
- OS : Marketplace -> MySQL on 18.04
- Plan : Standard ($5/mo - 1GB/1CPU/25GB)
- Datacenter region : Singapore
- Option : Private Networking



3. ติดตั้ง Web Server โดยใช้ putty เข้าตามข้อมูลที่ได้รับจากอีเมล์ หลังจากสร้าง Droplet เสร็จ


จากนั้นทำการเปลี่ยนรหัสผ่านของ root


ทำการอัพเดท ubuntu package
apt-get update
apt-get upgrade

ทำการแก้ไข timezone เป็น Asia/Bangkok ใน Ubuntu ก่อน
timedatectl set-timezone Asia/Bangkok
ทำการติดตั้ง Vesta Control Panel ซึ่งเป็นตัวสำหรับจัดการ Web Server ที่ให้ใช้งานฟรี มีฟังก์ชั่นให้ใช้งานที่หลากหลายพอสมควร โดยใช้คำสั่งต่อไปนี้
curl -O https://assets.digitalocean.com/vesta/install-vesta-do.sh
chmod +x install-vesta-do.sh
screen
./install-vesta-do.sh --force
กรอกข้อมูลก่อนติดตั้ง


เสร็จแล้วจะได้ข้อมูล Username และ Password โดยเข้าใช้งานได้ที่ IP ของ Droplet เช่น https://123.123.123.123:5600  (123.123.123.123 คือหมายเลข IP ของ Droplet)


Username : admin
Password : ตามที่โปรแกรมให้มา

เมื่อเราเข้าผ่าน Google Chrome จะตรวจสอบความปลอดภัยให้คลิกที่ปุ่มตามหมายเลข 1 และ 2 เพื่อเข้าสู่หน้า Login


จากนั้นเราก็เข้าระบบโดยใช้ Username และ Password ที่ได้จากโปรแกรมให้มา


ถ้าเข้าระบบสำเร็จ จะได้ดังภาพ

5. ตั้งค่า VestaCP ให้พร้อมใช้งาน โดยเริ่มต้นให้สร้าง User ใหม่ เพื่อง่ายในการจัดการ

ใส่ชื่อ username , password , email , firstname, lastname

จากนั้น login as ...

เข้าไปสร้างเว็บใหม่


ใส่ชื่อโดเมนที่เราจดทะเบียนไว้สำหรับทำเว็บ เลือก IP (ปกติจะมีให้อยู่แล้วและตรงกับ droplet ip) 


เพียงเท่านี้ระบบ Web server เราก็พร้อมใช้งาน เพียงแค่สร้าง name server ของโดเมนชี้มาที่ ip ของ droplet ตัวนี้

4. ตั้งค่า MySQL Server ให้รับการเชื่อมต่อจาก Web server ของเรา โดยเข้า ssh (putty) จากอีเมล์ที่ได้รับหลังจากสร้าง Droplet


เข้าได้แล้วให้ทำการเปลี่ยนรหัสผ่าน เช่นเดียวกับ Web server 


ทำการแก้ไขไฟล์ my.cnf โดยใช้คำสั่ง

nano  /etc/mysql/my.cnf

แล้วเลื่อนไปล่างสุด เพิ่มบรรทัดใหม่ ดังนี้

[mysqld]
skip-external-locking
bind-address = 10.123.123.12

โดย 10.123.123.12 คือ Private Network ของ Droplet ที่เป็น MySQL Server (ตัวที่เรา ssh อยู่ตอนนี้) ดูได้จากหน้า DigitalOcean โดยคลิกเข้าไปที่ Droplet หรือ ถ้าอยู่ใน ssh ให้ใช้คำสั่ง ifconfig จะพบ ip ที่ขึ้นต้นด้วย 10.


เสร็จแล้วกด Ctrl+o แล้ว Enter จากนั้นกด Ctrl+x เพื่อออกจาก nano จากนั้นให้ทำการ restart mysql server โดยใช้คำสั่ง

systemctl restart mysql


จากนั้นหารหัสผ่าน admin mysql โดยดูได้จากไฟล์โดยใช้คำสั่ง

cat /root/.digitalocean_password



ทำการเข้า phpMyAdmin โดยเข้าผ่าน IP ของเครื่อง MySQL Server เช่น http:123.123.123.123/phpMyAdmin แล้วใช้ User : admin และ Password : จากที่ได้จาก cat /root/.digitalocean_password

เมื่อเข้าได้แล้วให้ทำการเปลี่ยนรหัสผ่านของ admin เพื่อเข้าใช้งานครั้งต่อ ๆ ไป



ทำการเพิ่ม User และ Database สำหรับใช้งานจาก Server ตัวอื่น (remote server) ดังนี้



- ใส่ชื่อ Username ที่ต้องการ (แนะนำอย่ายาวมาก) 
- ใส่ Host name เป็นหมายเลข Private Networking IP ของเครื่องที่เป็น Web server (ไม่ควรใช้ Public IP เนื่องจากเรื่องความเร็วและแบนด์วิธ)
- ใส่รหัสผ่าน 2 ครั้ง
- เลือก 2 ตัวเลือก เพื่อสร้าง database ชื่อเหมือน username (เพื่อใช้ทดสอบ) และทุก database ที่ต่อท้ายด้วย username_xxx จะทำการเพิ่มสิทธิ์ให้ username นี้ เข้าใช้งานได้

จากนั้นทำการเพิ่มอีก 1 username ที่เหมือนกับด้านบน แต่เปลี่ยน Host name เป็น localhost เพื่อให้เราสามารถเข้าใช้งาน username ผ่าน phpMyadmin ของ MySQL Server

การใช้งาน phpMyAdmin ยังมี Error อยู่ ให้ทำการแก้ไขโดยเข้า ssh ไปแก้ไฟล์ ด้วยคำสั่ง

nano -w /usr/share/phpmyadmin/libraries/sql.lib.php

จากนั้นกด Ctrl + _ แล้วพิมพ์หมายเลขบรรทัด 613 เพื่อกระโดดไปที่บรรทัดดังกล่าว แล้วแก้ไขข้อความจาก

|| (count($analyzed_sql_results['select_expr'] == 1)

เป็น

|| (count($analyzed_sql_results['select_expr']) == 1

เสร็จแล้วกด Ctrl + o และ Ctrl + x 

5. ทดสอบการใช้งานโดยทำการสร้างตาราง database ที่สร้างขึ้นมาเหมือนชื่อ username ใน phpMyadmin โดยสร้างตารางชื่อ test ดัง sql นี้

CREATE TABLE `test` (
  `id` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

INSERT INTO `test` (`id`) VALUES(1),(2),(3),(4),(5),(6),(7),(8),(9),(10);

จากนั้นไปที่เครื่อง Web server แล้วสร้างไฟล์ test.php โดยใช้คำสั่งต่อไปนี้
<?php
define("DB_HOST","10.123.123.216"); // mysql server private ip address
define("DB_NAME","sillapa");
define("DB_USERNAME","sillapa");
define("DB_PASSWORD","mydbpassword");
 
$db = mysqli_connect(DB_HOST, DB_USERNAME, DB_PASSWORD, DB_NAME);
mysqli_set_charset($db,"utf8");
mysqli_select_db($db, DB_NAME);
 
$sql = "SELECT * FROM test";
$rs = mysqli_query($db,$sql) or die(mysqli_error($db));
while($row = mysqli_fetch_assoc($rs)){
  echo $row['id']."
";
}
?>
โดย DB_HOST ให้ใช้เป็น Private IP ของ MySQL Server (ที่เราใช้ในขั้นตอนการแก้ไขไฟล์ my.cnf)
ส่วนข้อมูลอื่น ๆ ก็ตามที่เราได้สร้าง Username ไว้ เสร็จแล้วเมื่อเปิดไฟล์ test.php จะได้ข้อมูลตัวเลข 1-10 ออกมาดังนี้

ถ้าข้อมูลออกมาถูกต้อง แสดงว่าเราสามารถเชื่อมต่อไปยัง MySQL Server ที่อยู่คนละ Server กับเว็บเราแล้ว ดังนั้นเราสามารถที่จะพัฒนาเว็บส่วนอื่น ๆ เพื่อเชื่อมต่อฐานข้อมูลได้ตามต้องการ ซึ่งจะส่งผลให้เว็บเรามีประสิทธิภาพมากขึ้น รองรับการทำงานได้มากขึ้น นอกจากนี้ยังมีขั้นตอนการปรับจูน MySQL ให้รองรับงานได้เหมาะสมกับการใช้งาน ซึ่งคงต้องทำเป็นบทความใหม่แยกกัน เพราะมีรายละเอียดมากพอสมควร บทความนี้ขอจบเพียงเท่านี้ 
 

วันที่ 20 เมษายน 2562 เวลา 16.13 น. | เข้าดู 1,455 ครั้ง