วันเสาร์ที่ 30 ตุลาคม พ.ศ. 2564

ดึงข้อมูลออกจาก mysql_query.log

mysql จะมีออปชันสำหรับบันทึกเหตุการณ์หรือ log สำหรับการใช้คำสั่งของ sql โดยแบ่งออกเป็น 2 ส่วน คือ general และ slow queries สำหรับ general เป็นไฟล์เก็บข้อมูลคำสั่งทั้งหมดของ sql ที่รัน โดยไฟล์นี้จะใหญ่มาก ก็ต้องมีการจัดการให้ดี

ส่วน slow queries เป็นไฟล์เก็บคำสั่ง sql ที่สั่งรันแล้วใช้เวลานาน อาจจะตั้งไว้เช่น 1 วินาท 2 วินาที หรือตามที่เรากำหนด

ตัวอย่างไฟล์ mysql.log

 

ในกรณีนี้ผู้เขียนมีความต้องการดึงเอาเฉพาะคำสั่งที่เป็น SELECT ทั้งหมดออกจากไฟล์ เพื่อเอาไปรันในการจำลองการทำงาน และการดึงข้อมูลหนักๆ เพื่อวิเคราะห์ประสิทธิภาพของ mysql จากรูปแบบไฟล์แล้วจะต้องกำหนดขอบเขตดังนี้

  1. เลือกเฉพาะบรรทัดที่มีคำสั่ง SELECT
  2. ตัดเอาข้อความตั้งแต่ SELECT ไปจนหมดบรรทัด
  3. เพิ่มเครื่องหมาย ; ต่อท้ายในแต่ละบรรทัด
สุดท้ายให้เก็บไว้เป็นไฟล์ sql เพื่อให้โปรแกรมจำลองเปิดอ่านและสั่งรันคำสั่งเหล่านั้นภายหลัง หรือสั่งรันจากคำสั่งด้วย mysql client

1. เลือกเฉพาะบรรทัดที่มีคำสั่ง SELECT

คำสั่งที่ใช้
cat mysql.log | grep "SELECT " > mysql.txt

2. ตัดเฉพาะข้อความตั้งแต่ SELECT เป็นต้นไป

คำสั่งที่ใช้
grep -o "SELECT.*" mysql.txt > mysql_select.txt

3. เพิ่มเครื่องหมาย ; ต่อท้ายในแต่ละบรรทัด

คำสั่งที่ใช้
sed 's/$/ ;/' mysql_select.txt > mysql_select.sql

สุดท้ายก็จะได้ไฟล์ mysql_select.sql ที่เป็นคำสั่ง sql และมีเครื่องหมาย ; ปิดท้าย ทำให้เราสามารถใช้คำสั่ง mysql < mysql_select.sql ได้โดยไม่ต้องใช้โปรแกรมอื่นมาอ่านไฟล์แล้วส่งต่อไปยัง mysql


ไม่มีความคิดเห็น:

แสดงความคิดเห็น

Gtk4 ตอนที่ 6 Defining a Child object

Defining a Child object A Very Simple Editor ในบทความที่ผ่านมาเราสร้างโปรแกรมอ่านไฟล์ชนิดข้อความ และในบทความนี้ก็จะมาปรับแต่งโปรแกรมกันสักหน...