บทความนี้จะอธิบายเกี่ยวกับ MySQL ซึ่งเป็นเครื่องมือที่มีประสิทธิภาพสำหรับการพัฒนาอีคอมเมิร์ซและเว็บไซต์ไดนามิกที่ซับซ้อนอื่นๆ โดยใช้ฐานข้อมูลบุคคลที่สาม MySQL เป็นเซิร์ฟเวอร์ SQL ที่รวดเร็ว มัลติเธรด และมีคุณสมบัติครบถ้วน นอกเหนือจากการอธิบายสถาปัตยกรรมพื้นฐานของระบบ MySQL แล้ว บทความนี้ยังมีตัวอย่างง่ายๆ ที่เขียนด้วย Tcl และ C++ เพื่อช่วยคุณพัฒนาเว็บแอปพลิเคชันที่รองรับฐานข้อมูล บทความนี้จะอธิบายเกี่ยวกับ MySQL ซึ่งเป็นเครื่องมือที่มีประสิทธิภาพสำหรับการพัฒนาอีคอมเมิร์ซและเว็บไซต์ไดนามิกที่ซับซ้อนอื่นๆ โดยใช้ฐานข้อมูลบุคคลที่สาม MySQL เป็นเซิร์ฟเวอร์ SQL ที่รวดเร็ว มัลติเธรด และมีคุณสมบัติครบถ้วน นอกเหนือจากการอธิบายสถาปัตยกรรมพื้นฐานของระบบ MySQL แล้ว บทความนี้ยังมีตัวอย่างง่ายๆ ที่เขียนด้วย Tcl และ C++ เพื่อช่วยคุณพัฒนาเว็บแอปพลิเคชันที่รองรับฐานข้อมูล
แอปพลิเคชันที่ต้องจัดเก็บหรือเข้าถึงข้อมูลจำนวนมากจะได้รับประโยชน์อย่างมากจากการใช้ผลิตภัณฑ์ฐานข้อมูลบุคคลที่สาม โดยเฉพาะอย่างยิ่งเมื่อการเข้าถึงข้อมูลต้องเกิดขึ้นบนหลาย ๆ อินสแตนซ์ของโปรแกรม แอปพลิเคชันบนเว็บ (รวมถึงการค้าทางอิเล็กทรอนิกส์) เป็นตัวอย่างที่ดี
เหตุใดจึงต้องใช้ฐานข้อมูลแบบสแตนด์อโลน
เว็บเซิร์ฟเวอร์ต้องมีวิธีสำหรับสคริปต์ประมวลผลในการจัดเก็บข้อมูลเกี่ยวกับสถานะของตนสำหรับการเข้าถึงในภายหลัง แม้ว่าจะเป็นไปได้ที่จะใช้วิธีการดั้งเดิมมากกว่า เช่น การทิ้งลงในไฟล์ข้อความหรือการพัฒนาฐานข้อมูลขนาดเล็กแบบโฮมเมด มีเพียงแอปพลิเคชันฐานข้อมูลที่มีคุณสมบัติครบถ้วนเท่านั้นที่สามารถให้บริการทั้งหมดที่จำเป็นสำหรับเว็บแอปพลิเคชันที่ซับซ้อนยิ่งขึ้น ไม่มีประโยชน์มากนักในการเขียนกลไกฐานข้อมูลเฉพาะแอปพลิเคชันแบบกำหนดเอง เนื่องจากมีแพ็คเกจซอฟต์แวร์บางตัวที่ใช้งานได้ฟรีเพื่อจุดประสงค์นี้ นอกจากนี้ การใช้ฐานข้อมูลบุคคลที่สามยังช่วยลดความจำเป็นที่นักพัฒนาเว็บต้องอุทิศตนให้กับงานพัฒนาและดูแลรักษาฐานข้อมูลอีกด้วย
ฐานข้อมูล MySQL
การรวมฐานข้อมูลเข้ากับแอพพลิเคชั่น Linux นั้นค่อนข้างง่ายผ่านการใช้ภาษาสคริปต์และภาษาของระบบที่คอมไพล์เช่น C. ฐานข้อมูล MySQL ที่ใช้งานได้ฟรี (เผยแพร่ภายใต้ GNU Public License) มีชุดฟังก์ชัน SQL ที่ซับซ้อน และง่ายต่อการรวมเข้ากับแอปพลิเคชัน MySQL ทำงานเร็ว มัลติเธรด และรองรับมาตรฐาน ANSI และ ODBC SQL เมื่อใช้ร่วมกับซอฟต์แวร์ของบริษัทอื่น MySQL จะสนับสนุนตารางที่ปลอดภัยสำหรับธุรกรรมสำหรับแอปพลิเคชันการประมวลผลธุรกรรม
หมายเหตุ: การประมวลผลธุรกรรมคืออะไร?
ธุรกรรมคือชุดของการเปลี่ยนแปลงในฐานข้อมูลที่จำเป็นต้องดำเนินการแบบอะตอมมิก จะต้องดำเนินการทั้งหมดหรือไม่ก็ต้องดำเนินการเลย ตัวอย่างเช่น ฐานข้อมูลที่จำเป็นทั้งหมดจะเปลี่ยนแปลงเมื่อขายสินค้าบนเว็บในรูปแบบธุรกรรมเดียว
ฐานข้อมูลจำเป็นต้องลบทั้งยอดคงเหลือในบัญชีลูกค้าและสินค้าคงคลังของผลิตภัณฑ์ ไม่เช่นนั้นจะล้มเหลวและไม่มีการดำเนินการใดๆ
เซิร์ฟเวอร์ขัดข้องไม่ว่าด้วยเหตุผลใดก็ตามไม่ควรทำให้ธุรกรรมถูกดำเนินการเพียงบางส่วน ตัวอย่างเช่น การเรียกเก็บเงินเกิน สินค้าไม่ได้จัดส่ง หรือสินค้าคงคลังที่ไม่ถูกต้องอาจเป็นผลมาจากธุรกรรมที่เสร็จสมบูรณ์บางส่วน
ฐานข้อมูลที่รองรับการประมวลผลธุรกรรมสามารถสรุปชุดของรหัสฐานข้อมูลในธุรกรรมได้ ความล้มเหลวใดๆ ในระหว่างการดำเนินการธุรกรรมจะทำให้ฐานข้อมูลย้อนกลับไปยังสถานะก่อนที่ธุรกรรมจะเริ่มต้น
ซึ่งสามารถทำได้โดยการรักษาบันทึกการทำงานของฐานข้อมูลทั้งหมด เช่นเดียวกับสำเนาของตารางสถานะดั้งเดิม ซึ่งช่วยให้สามารถดำเนินการย้อนกลับในครั้งถัดไปที่เซิร์ฟเวอร์รีสตาร์ทหลังจากเกิดความล้มเหลว ค่าใช้จ่ายด้านเวลาและพื้นที่นี้เป็นการแลกเปลี่ยนที่จำเป็นสำหรับระบบฐานข้อมูลที่ปลอดภัยต่อการทำธุรกรรม
เซิร์ฟเวอร์ MySQL เครื่องเดียวควบคุมชุดฐานข้อมูล ซึ่งทั้งหมดเข้าถึงได้ในลักษณะเดียวกันผ่านเซิร์ฟเวอร์ จริงๆ แล้วฐานข้อมูลแต่ละฐานข้อมูลคือชุดของตารางจำนวนเท่าใดก็ได้ ซึ่งมีแนวคิดคล้ายกับผู้ใช้ฐานข้อมูล SQL อื่นๆ แต่ละตารางประกอบด้วยคอลัมน์ข้อมูลที่พิมพ์ ข้อมูลอาจเป็นจำนวนเต็ม ค่าจริง สตริง หรือประเภทอื่นๆ รวมถึงสตรีมไบนารีแบบดิบ แต่ละแถวในตารางเป็นบันทึกที่จัดเก็บไว้ในฐานข้อมูล
MySQL ได้รับการออกแบบและจัดโครงสร้างเป็นไคลเอ็นต์/เซิร์ฟเวอร์ เซิร์ฟเวอร์ mysqld สามารถทำงานบนเครื่องใดก็ได้ที่สามารถเข้าถึงได้จากอินเทอร์เน็ต (โดยเฉพาะบนเครื่องเดียวกับเว็บเซิร์ฟเวอร์หรือใกล้เคียงที่สุดเพื่อให้แน่ใจว่ามีเวลาตอบสนองที่เหมาะสม) ไคลเอนต์ MySQL ใช้คำขอเพื่อติดต่อกับเซิร์ฟเวอร์ MySQL เพื่อแก้ไขหรือสืบค้นฐานข้อมูลที่เป็นของเซิร์ฟเวอร์ ในเว็บแอปพลิเคชันที่เปิดใช้งานฐานข้อมูล ไคลเอ็นต์ฐานข้อมูลคือเว็บเซิร์ฟเวอร์หรือสคริปต์ CGI ที่สร้างโดยเว็บเซิร์ฟเวอร์ ไคลเอนต์เหล่านี้สามารถเขียนด้วยภาษาสคริปต์ระดับสูงหรือภาษาระบบระดับต่ำได้ ตราบใดที่ API ฐานข้อมูลมีอยู่สำหรับภาษานั้น ใน Linux ภาษาสคริปต์ส่วนใหญ่จะใช้งานในภาษา C และเนื่องจากมี MySQL C API อยู่แล้ว จึงควรเพิ่มการรองรับ MySQL ให้กับภาษาสคริปต์หรือเครื่องมือที่มีอยู่ได้อย่างง่ายดาย ภาษาสคริปต์ส่วนใหญ่ได้เสร็จสิ้นขั้นตอนนี้แล้ว
MySQL API
MySQL API มีให้บริการในหลายภาษา รวมถึงภาษาเกือบทั้งหมดที่ใช้เขียนแบ็กเอนด์ของเว็บไซต์จริงๆ การใช้ API เหล่านี้ทำให้เราสามารถสร้างไคลเอ็นต์ MySQL ที่ควบคุมโดยเว็บเซิร์ฟเวอร์ได้
API (สำหรับการเข้าถึงฐานข้อมูล) ทำงานในโหมดการเชื่อมต่อ สิ่งแรกที่ไคลเอนต์ต้องทำคือเปิดการเชื่อมต่อกับเซิร์ฟเวอร์ MySQL ซึ่งรวมถึงการรับรองความถูกต้องของการเชื่อมต่ออย่างเหมาะสมโดยใช้ชื่อผู้ใช้และรหัสผ่านที่เซิร์ฟเวอร์รู้จัก หลังจากสร้างการเชื่อมต่อแล้ว เซิร์ฟเวอร์จะเลือกฐานข้อมูลเฉพาะที่จะใช้ เมื่อกำหนดการเริ่มต้นแล้ว แอปพลิเคชันไคลเอ็นต์ (ในกรณีของเราคือสคริปต์ CGI ฝั่งเซิร์ฟเวอร์) สามารถโต้ตอบกับฐานข้อมูลได้ฟรีด้วยวิธีใดวิธีหนึ่งจากสองวิธี: สามารถเรียกใช้คำสั่ง SQL ปกติ รวมถึงการเพิ่มและวางตาราง และเพิ่มบันทึกลงใน คุณยังสามารถเรียกใช้แบบสอบถามกับฐานข้อมูลที่ส่งคืนผลลัพธ์ได้ การสืบค้นจะสร้างชุดบันทึกที่ตรงกับการสืบค้น จากนั้นไคลเอ็นต์จะสามารถเข้าถึงบันทึกได้ทีละรายการจนกว่าจะมีการดูบันทึกทั้งหมด หรือลูกค้ายกเลิกการเรียกบันทึกที่รอดำเนินการ เมื่อสคริปต์ทำงานกับฐานข้อมูลเสร็จแล้ว การเชื่อมต่อกับเซิร์ฟเวอร์จะถูกปิด
ในการสร้างเว็บไซต์ที่รวมการเข้าถึงฐานข้อมูล คุณจะต้องเขียนสคริปต์ CGI เพื่อสร้างผลลัพธ์แบบไดนามิกตามสถานะของฐานข้อมูล เว็บเซิร์ฟเวอร์เรียกใช้สคริปต์ CGI จากนั้นส่งออก HTML ที่มีรูปแบบเหมาะสมไปยังสตรีมเอาต์พุตมาตรฐาน เว็บเซิร์ฟเวอร์จับ HTML และส่งกลับไปยังไคลเอนต์ราวกับว่าคำขอนั้นเป็นหน้า HTML แบบคงที่ ในกระบวนการสร้าง HTML สคริปต์สามารถแก้ไขฐานข้อมูลหรือสามารถสืบค้นและรวมผลลัพธ์ไว้ในเอาต์พุตได้
เพื่อเป็นตัวอย่างในการอธิบายกระบวนการข้างต้นโดยย่อ โค้ดต่อไปนี้ (เขียนด้วยภาษา C และ Tcl) จะสอบถามฐานข้อมูลที่มีรายการผลิตภัณฑ์ที่ขายโดยบริษัท สิ่งนี้ไม่ได้ใช้คุณสมบัติทั้งหมดของ MySQL API ในทั้งสองภาษา แต่ให้ตัวอย่างที่ขยายได้อย่างรวดเร็วและง่ายดายซึ่งสามารถรันคำสั่ง SQL ใด ๆ กับเนื้อหาของฐานข้อมูลได้ ในตัวอย่างนี้ สคริปต์จะแสดงสินค้าทั้งหมดที่ต่ำกว่าราคาที่กำหนด ในทางปฏิบัติ ผู้ใช้อาจป้อนราคาลงในเว็บเบราว์เซอร์แล้วส่งไปยังเซิร์ฟเวอร์ เราทิ้งรายละเอียดการอ่านจากตัวแปรสภาพแวดล้อมเพื่อกำหนดค่าฟอร์ม HTML ออกไป เพราะไม่ต่างจากการรันในสคริปต์ CGI ที่ไม่รองรับฐานข้อมูล เพื่อความชัดเจน เราถือว่ามีการตั้งค่าพารามิเตอร์บางอย่าง (เช่น ราคาที่จะสอบถาม) ไว้ล่วงหน้า
รหัสต่อไปนี้ถูกนำไปใช้ใน Tcl โดยใช้อินเทอร์เฟซฐานข้อมูล Tcl Generic ที่มีให้ใช้งานฟรี ข้อดีของอินเทอร์เฟซดังกล่าวคือ Tcl ได้รับการตีความและสามารถพัฒนาและแก้ไขโค้ดได้อย่างรวดเร็ว
ตัวอย่างทีซีแอล
#รหัสนี้พิมพ์สินค้าทั้งหมดในฐานข้อมูล
#ที่ต่ำกว่าราคาที่กำหนด(ถือว่าถูกกำหนดแล้ว)
# ไว้ล่วงหน้าและเก็บไว้ในตัวแปร targetPrice)
# ผลลัพธ์อยู่ในรูปแบบตาราง HTML เหมาะสำหรับเอาต์พุต CGI
#load ไลบรารีวัตถุที่ใช้ร่วมกันของ SQL ล่าม Tcl ก็สามารถทำได้เช่นกัน
#ได้มีการคอมไพล์กับห้องสมุดแล้ว ทำให้บรรทัดนี้ไม่จำเป็น
โหลด /home/aroetter/tcl-sql/sql.so
#สิ่งเหล่านี้มีการกำหนดไว้ล่วงหน้าแล้วหรืออาจทำได้
#จะถูกส่งผ่านเข้าสู่สคริปต์
ตั้งค่า DBNAME "clientWebSite";
ตั้งค่า TBLNAME "ผลิตภัณฑ์";
ตั้งค่า DBHOST "backend.company.com"
setDBUSER "mysqluser"
ตั้งค่า DBPASSWD "abigsecret"
ตั้งเป้าหมายราคา 200;
#เชื่อมต่อกับฐานข้อมูล
ตั้งค่าหมายเลขอ้างอิง [sql เชื่อมต่อ $DBHOST $DBUSER $DBPASSWD]
sql selectdb $handle $DBNAME ;# รับฐานข้อมูลทดสอบ
#เรียกใช้แบบสอบถามโดยใช้รหัส sql ที่ระบุ
แบบสอบถาม sql $handle "เลือก * จาก $TBLNAME โดยที่ราคา <= $targetPrice"
#พิมพ์ส่วนหัวของตาราง html
ใส่ "
รหัสสินค้า | คำอธิบาย | ราคา ($)" #output แถวของตาราง - แต่ละ fetchrow จะดึงผลลัพธ์หนึ่งรายการ |
---|---|---|
$prodid | $descript | $price" - ใส่ " |
#empty บัฟเฟอร์ผลลัพธ์แบบสอบถาม - ในกรณีนี้ควรว่างเปล่าอยู่แล้ว
sql endquery $จัดการ
#close การเชื่อมต่อ db - ในทางปฏิบัติการเชื่อมต่อเดียวกันนี้
#ใช้สำหรับการค้นหาหลายรายการ
sql ตัดการเชื่อมต่อ $handle
โค้ดด้านล่างเป็นสคริปต์เทียบเท่าที่เขียนด้วยภาษา C++ โดยใช้ MySQL C++ API MySQL++ อย่างเป็นทางการ ข้อดีของเวอร์ชันนี้คือมีการคอมไพล์จึงเร็วกว่าภาษาที่ตีความ รหัสฐานข้อมูลที่ใช้บ่อยบนไซต์ใดไซต์หนึ่งควรเขียนด้วยภาษา C หรือ C++ จากนั้นจึงเข้าถึงได้โดยสคริปต์หรือจากเว็บเซิร์ฟเวอร์โดยตรงเพื่อปรับปรุงรันไทม์โดยรวม
ตัวอย่างภาษา C++
#รวม
#รวม
#รวม
const char *DBNAME = "ไคลเอนต์เว็บไซต์";
const char *DBTABLE = "ผลิตภัณฑ์";
const char *DBHOST = "แบ็กเอนด์.บริษัท.com";
const ถ่าน *DBUSER = "mysqluser";
const ถ่าน *DBPASSWD = "abigsecret":
int หลัก() {
พยายาม {
//เปิดการเชื่อมต่อฐานข้อมูลและแบบสอบถาม
การเชื่อมต่อ (DBNAME, DBHOST, DBUSER, DBPASSWD);
แบบสอบถามแบบสอบถาม = con.query();
//เขียนโค้ด sql ที่ถูกต้องไปยังวัตถุแบบสอบถาม
แบบสอบถาม << "เลือก * จาก" << DBTABLE;
//เรียกใช้แบบสอบถามและเก็บผลลัพธ์
ผลลัพธ์ res = query.store();
//เขียนส่วนหัวของตาราง html
ศาล << "<เส้นขอบตาราง=4>n";
ศาล << "
ผลลัพธ์::ตัววนซ้ำ curResult;
แถวแถว;
//วนซ้ำแต่ละผลลัพธ์แล้วใส่ลงในตาราง html
สำหรับ (curResult = res.begin(); curResult != res.end(); curResult++) {
แถว = *curResult;
ศาล << "
-
ศาล << " table>" << endl;
} catch (BadQuery เอ้อ) {
// จัดการกับแบบสอบถามที่ไม่ถูกต้อง (มักเกิดจากข้อผิดพลาดทางไวยากรณ์ sql)
cerr << "ข้อผิดพลาด:" << er.error << endl;
กลับ -1;
} จับ (BadConversioner) {
//จัดการข้อผิดพลาดในการแปลงออกจากฐานข้อมูลด้วย
cerr << "ข้อผิดพลาด: ไม่สามารถแปลง "" << er.data << "" เป็น ""
<< er.type_name << ""." << endl;
กลับ -1;
-
กลับ 0;
-
ความปลอดภัย
การสร้างแอปพลิเคชันที่ขับเคลื่อนด้วยเว็บบนเว็บมีปัญหาบางประการที่นักพัฒนาจำเป็นต้องพิจารณา ปัญหาทั้งหมดที่เกี่ยวข้องกับโปรแกรม CGI บนเว็บเซิร์ฟเวอร์ เช่น สิทธิ์การประมวลผลของเว็บเซิร์ฟเวอร์และการตรวจสอบอินพุตทางฝั่งสคริปต์ ยังคงต้องได้รับการพิจารณา
นอกจากนี้ยังจำเป็นต้องรักษาความปลอดภัยของระบบฐานข้อมูลด้วย สิ่งนี้เกี่ยวข้องกับการรักษาความปลอดภัยระบบสิทธิ์ของเซิร์ฟเวอร์ฐานข้อมูลและการเชื่อมต่อจากไคลเอนต์ฐานข้อมูลไปยังเซิร์ฟเวอร์ที่ปลอดภัย
MySQL มีระบบรักษาความปลอดภัยเชิงลึกที่บางคนเรียกว่า "ขั้นสูงแต่ไม่ได้มาตรฐาน" MySQL อนุญาตให้ไคลเอนต์เข้าถึงตามชื่อผู้ใช้ โฮสต์ไคลเอนต์ และฐานข้อมูลที่จะเข้าถึง ในการสร้างระบบที่ปลอดภัย ให้ผู้ใช้ทุกคนใช้รหัสผ่านที่รัดกุม และอย่าให้สิทธิ์การเข้าถึงที่ไม่จำเป็นแก่พวกเขา ซึ่งรวมถึงสิทธิ์ที่ดูเหมือนไม่มีอันตราย เช่น สิทธิ์ในการจัดการที่อนุญาตให้ผู้ใช้ดูกระบวนการที่ทำงานอยู่ทั้งหมด รวมถึงสิทธิ์ที่เปลี่ยนรหัสผ่านของผู้ใช้รายอื่น แนวทางที่ดีที่สุดคือการรันกระบวนการเซิร์ฟเวอร์ด้วยตัวมันเองในฐานะผู้ใช้ Unix ที่ไม่มีสิทธิ์ ดังนั้นหากฐานข้อมูลใดฐานข้อมูลหนึ่งถูกโจมตี จะไม่ทำให้ทั้งระบบล่ม สิ่งนี้คล้ายกับการรัน httpd ในฐานะผู้ใช้ไม่มีใครแทนที่จะเป็นรูท ตารางที่อธิบายการเข้าถึงระบบจะถูกจัดเก็บเป็นฐานข้อมูล MySQL แยกต่างหาก และสามารถอัปเดตได้โดยผู้ใช้รูท MySQL โปรดทราบว่าเซิร์ฟเวอร์ MySQL ให้สิทธิ์ตามชื่อผู้ใช้ MySQL ซึ่งแตกต่างจากชื่อผู้ใช้ Unix อย่างไรก็ตาม มีชื่อผู้ใช้รูทของ MySQL ซึ่งมีสิทธิ์เต็มรูปแบบในฐานข้อมูล เมื่อเซิร์ฟเวอร์พิจารณาว่าไคลเอนต์ที่เชื่อมต่อคือใครและพยายามเชื่อมต่ออะไร การเข้าถึงจะถูกควบคุมตามชุดสิทธิ์ที่กำหนด เพื่อป้องกันไม่ให้ชื่อโฮสต์ในตารางการเข้าถึงถูกปลอมแปลงโดย DNS คุณสามารถป้อนที่อยู่ IP ของโฮสต์ทั้งหมด หรือขอให้เซิร์ฟเวอร์แก้ไขที่อยู่ IP กลับไปเป็นชื่อโฮสต์ดั้งเดิม เพื่อให้ผู้อื่นขัดขวางการร้องขอและคำตอบ DNS ได้ยากขึ้น .
นอกจากตารางการเข้าถึงเซิร์ฟเวอร์แล้ว การสื่อสารกับเซิร์ฟเวอร์ยังต้องมีความปลอดภัยอีกด้วย เมื่อเข้าสู่ระบบเซิร์ฟเวอร์จากไคลเอนต์ รหัสผ่านจะไม่ถูกส่งเป็นข้อความธรรมดา อย่างไรก็ตาม คำสั่ง SQL ที่ตามมาทั้งหมดจะถูกส่งเป็นข้อความธรรมดา เพื่อความปลอดภัยที่มากขึ้น ให้ใช้ ssh เพื่อตั้งค่าการส่งต่อพอร์ต มันเข้ารหัสการสื่อสารทั้งหมดระหว่างเซิร์ฟเวอร์และไคลเอนต์ ป้องกันไม่ให้ใครก็ตามสังเกตมันระหว่างทางได้ ข้อมูลจากไคลเอนต์จะถูกส่งไปยังพอร์ตบนเครื่องไคลเอนต์ที่เซิร์ฟเวอร์ ssh ในเครื่องกำลังฟังอยู่ มันถูกใช้โดยเซิร์ฟเวอร์ ssh ภายในเครื่อง เข้ารหัสและส่งไปยังเซิร์ฟเวอร์ ssh ระยะไกล ซึ่งจะถอดรหัสและส่งต่อไปยังพอร์ตเซิร์ฟเวอร์ MySQL
ในทางปฏิบัติ วิธีการที่ปลอดภัยที่สุดคือรันเซิร์ฟเวอร์ฐานข้อมูลบนเครื่องเดียวกับเว็บเซิร์ฟเวอร์ และปล่อยให้สคริปต์ CGI ที่สร้างโดยเว็บเซิร์ฟเวอร์สื่อสารกับเซิร์ฟเวอร์ MySQL ผ่านซ็อกเก็ต UNIX (เนทิฟ) การตั้งค่านี้อนุญาตให้ผู้ดูแลระบบฐานข้อมูลปิดการใช้งานการเชื่อมต่อระยะไกลทั้งหมดไปยังเซิร์ฟเวอร์ MySQL หากเว็บและเซิร์ฟเวอร์ฐานข้อมูลต้องอยู่บนเครื่องที่แตกต่างกัน ให้เข้ารหัสการสื่อสารทั้งหมดระหว่างกัน หรือเชื่อมต่อเครื่องทั้งสองผ่านเครือข่ายเฉพาะที่แยกออกจากกันทางกายภาพของตัวเอง สร้างบัญชีผู้ใช้เพียงบัญชีเดียว (นอกเหนือจากผู้ใช้รูท) ที่เว็บเซิร์ฟเวอร์ใช้เพื่อล็อกอินเข้าสู่เซิร์ฟเวอร์ฐานข้อมูล
เว็บไซต์ที่ขับเคลื่อนด้วยฐานข้อมูลเป็นเครื่องมืออันทรงพลังที่ช่วยให้นักพัฒนาสามารถสร้างไซต์ไดนามิกที่ให้ข้อมูลอัปเดตและอนุญาตให้การเปลี่ยนแปลงที่เริ่มต้นโดยไคลเอนต์คงอยู่ในหลายเซสชัน การใช้ฐานข้อมูลส่วนหลังถือเป็นสิ่งสำคัญสำหรับการจัดการผู้ใช้อีคอมเมิร์ซและแอปพลิเคชันอื่นๆ ด้วยการใช้ซอฟต์แวร์ที่มีให้ใช้งานฟรี จึงเป็นไปได้ที่จะสร้างไซต์ที่ขับเคลื่อนด้วยฐานข้อมูลซึ่งรวมการเชื่อมต่อฐานข้อมูลเข้ากับสถาปัตยกรรม CGI ที่มีอยู่ของไซต์อย่างปลอดภัย