วันเสาร์ที่ 30 ตุลาคม พ.ศ. 2564
mariadb can't lock aria control file.
ดึงข้อมูลออกจาก mysql_query.log
mysql จะมีออปชันสำหรับบันทึกเหตุการณ์หรือ log สำหรับการใช้คำสั่งของ sql โดยแบ่งออกเป็น 2 ส่วน คือ general และ slow queries สำหรับ general เป็นไฟล์เก็บข้อมูลคำสั่งทั้งหมดของ sql ที่รัน โดยไฟล์นี้จะใหญ่มาก ก็ต้องมีการจัดการให้ดี
ส่วน slow queries เป็นไฟล์เก็บคำสั่ง sql ที่สั่งรันแล้วใช้เวลานาน อาจจะตั้งไว้เช่น 1 วินาท 2 วินาที หรือตามที่เรากำหนด
ตัวอย่างไฟล์ mysql.log |
ในกรณีนี้ผู้เขียนมีความต้องการดึงเอาเฉพาะคำสั่งที่เป็น SELECT ทั้งหมดออกจากไฟล์ เพื่อเอาไปรันในการจำลองการทำงาน และการดึงข้อมูลหนักๆ เพื่อวิเคราะห์ประสิทธิภาพของ mysql จากรูปแบบไฟล์แล้วจะต้องกำหนดขอบเขตดังนี้
- เลือกเฉพาะบรรทัดที่มีคำสั่ง SELECT
- ตัดเอาข้อความตั้งแต่ SELECT ไปจนหมดบรรทัด
- เพิ่มเครื่องหมาย ; ต่อท้ายในแต่ละบรรทัด
cat mysql.log | grep "SELECT " > mysql.txt
grep -o "SELECT.*" mysql.txt > mysql_select.txt
sed 's/$/ ;/' mysql_select.txt > mysql_select.sql
วันศุกร์ที่ 29 ตุลาคม พ.ศ. 2564
mysqldump และบีบอัดไฟล์
หลังจากที่สำรองข้อมูลใน mysql แล้วปัญหาใหญ่ที่เจอ คือ ไฟล์ขนาดใหญ่ทำให้ดาวน์โหลดช้ามาก วิธีแก้ไขอีกวิธีหนึ่ง คือ บีบอัดให้เล็กลงก่อนที่จะส่งไฟล์ผ่านระบบเน็ตเวิร์กหรืออินเตอร์เน็ต
- การสำรองฐานข้อมูลพร้อมทั้งบีบอัดไฟล์ที่ได้
$ mysqldump -u [uname] -p[pass] [dbname] | gzip -9 > [backupfile.sql.gz]
กรณี Restore ข้อมูล .gz
gunzip < [path-to-file-sql.gz] | mysql -u [uname] -p[pass] [db_name]
การบีบอัดไฟล์ทำให้ขนาดลดลงเป็นอย่างมาก จากข้อมูลประมาณ 8 ล้านรายการ หาก dump แบบไม่บีบอัดจะได้ขนาด 2.7 GB แต่ถ้าบีบอัดแล้วจะได้ประมาณ 300 MB เช่น
root@db1:/home/yothinin# ls -l
total 3062592
-rw-r--r-- 1 root root 2,794,506,060 Oct 29 11:55 db-20211027.sql
-rw-r--r-- 1 root root 341,575,683 Oct 30 01:57 db-20211030.sql.gz
root@db1:/home/yothinin# time gunzip < db-20211030.sql.gz | mysql sbt_db
real 26m43.499s
user 0m52.715s
sys 0m5.410s
จากข้อมูลข้างบนหลังจากที่นำเข้าข้อมูลจากไฟล์ที่บีบอัดใช้เวลา 26 นาที 43 วินาที ก็ถือว่าไม่นาน เพราะไฟล์ที่ไม่บีบอัดก็จะอยู่ที่ 24-28 นาทีสำหรับไฟล์ที่มีรายการประมาณ 8 ล้านรายการ
สรุปการสำรองข้อมูลจะใช้เวลาน้อยกว่าการคืนค่าข้อมูล เพราะการคืนค่าหรือการ restore นั้นระบบจะเพิ่มคำสั่งทีละคำสั่งเหมือนการทำงานของ mysql ตั้งแต่เริ่มตั้นนั่นแหละ ซึ่งจะช้าหรือเร็วก็ขึ้นอยู่กับความเร็วในการเขียนข้อมูลในเซิร์ฟเวอร์นั้นๆ
Debian: mariadb server
จู่ๆ ก็ไม่สามารถสตาร์ท mariadb ได้ และเมื่อใช้ journalctl -xe ก็เห็น error ดังนี้
Oct 29 23:21:16 db1 mariadbd[651]: 2021-10-29 23:21:16 0 [Note] InnoDB: Starting crash recovery from checkpoint LSN=1517212349,1517212349
Oct 29 23:21:16 db1 mariadbd[651]: 2021-10-29 23:21:16 0 [ERROR] InnoDB: Missing FILE_CHECKPOINT at 1517212349 between the checkpoint 1517212349 and the end 1517212361.
Oct 29 23:21:16 db1 mariadbd[651]: 2021-10-29 23:21:16 0 [ERROR] InnoDB: Plugin initialization aborted with error Generic error
Oct 29 23:21:16 db1 mariadbd[651]: 2021-10-29 23:21:16 0 [Note] InnoDB: Starting shutdown...
Oct 29 23:21:16 db1 mariadbd[651]: 2021-10-29 23:21:16 0 [ERROR] Plugin 'InnoDB' init function returned error.
Oct 29 23:21:16 db1 mariadbd[651]: 2021-10-29 23:21:16 0 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
Oct 29 23:21:16 db1 mariadbd[651]: 2021-10-29 23:21:16 0 [Note] Plugin 'FEEDBACK' is disabled.
Oct 29 23:21:16 db1 mariadbd[651]: 2021-10-29 23:21:16 0 [ERROR] Unknown/unsupported storage engine: InnoDB
Oct 29 23:21:16 db1 mariadbd[651]: 2021-10-29 23:21:16 0 [ERROR] Aborting
Oct 29 23:21:16 db1 systemd[1]: mariadb.service: Main process exited, code=exited, status=1/FAILURE
วันพุธที่ 27 ตุลาคม พ.ศ. 2564
ปัญหาเมื่อเพิ่ม /dev/sdb ใน Debian 11
หลังจากที่เพิ่ม Storage ให้กับ Debian 11 แล้วก็เจอปัญหาหลายอย่างก็แก้ไขไปทีละเปาะ จนถึงปัญหาพบข้อความตอนบูทว่า
#dmesg | grep sdb
[ 2.956200] sd 3:0:0:0: [sdb] 16777216 512-byte logical blocks: (8.59 GB/8.00 GiB)
[ 2.956305] sd 3:0:0:0: [sdb] Write Protect is off
[ 2.956310] sd 3:0:0:0: [sdb] Mode Sense: 04 00 10 00
[ 2.956537] sd 3:0:0:0: [sdb] Incomplete mode parameter data
[ 2.956594] sd 3:0:0:0: [sdb] Assuming drive cache: write through
[ 2.989959] sdb: sdb1
[ 3.012033] sd 3:0:0:0: [sdb] Attached SCSI disk
[ 11.313582] EXT4-fs (sdb1): mounted filesystem with ordered data mode. Opts: (null)
Gtk4 ตอนที่ 6 Defining a Child object
Defining a Child object A Very Simple Editor ในบทความที่ผ่านมาเราสร้างโปรแกรมอ่านไฟล์ชนิดข้อความ และในบทความนี้ก็จะมาปรับแต่งโปรแกรมกันสักหน...
-
นักอิเลกโทรนิกส์ทั้งหลายคงจะเข้าใจวิธีวัดค่าของไดโอดเปล่งแสง หรือ LED เป็นอย่างดี แต่สำหรับมือใหม่ ย่อมต้องเรียนรู้ หาประสบการณ์ต่อไปเรื่อยๆ...
-
Ubuntu เป็น OS ที่นิยมนำมาใช้เป็นเซิร์ฟเวอร์อย่างแพร่หลาย ด้วยการติดตั้งง่าย การแก้ไขปัญหาก็ทำได้ดีเพราะมีเอกสาร คนใช้งานอยู่มาก และโดยปกติ ...
-
ยอมรับสารภาพเลยว่าเลิกเขียนโปรแกรมภาษา C ในอดีตเมื่อหลายปีก่อนก็เพราะการเปรียบเทียบสตริงนี่แหละ ทำไม่ได้หาในหนังสือไม่มีวิธีแก้ไข สมัยนั้นยั...