Menu

Showing posts with label error. Show all posts
Showing posts with label error. Show all posts

Monday, April 27, 2020

[Bash Script] ระวังการสร้าง ฺBash Script บน Windows แล้วอาจจะไม่สามารถนำมารันบน Unix ได้
[Bash Script] Warning: Create Bash Script on Windows then Cannot Run on Unix

ในกรณีนี้เราเขียน Bash script ขึ้นมาบน Windows แล้วค่อยอัพโหลดขึ้นไปรันบนเซิร์ฟเวอร์ที่เป็น Ubuntu ผลการรันได้ข้อผิดพลาดตามด้านล่างนี้
/bin/bash^M: bad interpreter: No such file or directory
สาเหตุเกิดจากอักขระที่แทนการขึ้นบรรทัดใหม่บน Windows และ Unix นั้นต่างกันดังนี้
  • Windows จะเป็น \r\n
  • Unix จะเป็น \n
ทำให้ \r เป็นอักขระที่ไม่เกี่ยวข้องกับการขึ้นบรรทัดใหม่ จึงถูกมองว่าเป็นอักขระอีกตัวที่ตามหลัง /bin/bash จึงเกิดข้อผิดพลาดข้างต้น

วิธีแก้ไข คือ รันคำสั่งดังนี้
sed -i -e 's/\r$//' scriptname.sh
หรือเขียน bash script ใหม่บน Unix แทน

Wednesday, April 15, 2020

[MySQL] ระวังการใช้ mysqldump ในการ backup ฐานข้อมูลขนาดใหญ่ จะเกิดข้อผิดพลาด "Packet Too Large"
[MySQL] Warning: Using mysqldump to Backup Large Database May Cause "Packet Too Large" Error

หลังจากที่รัน mysqldump เพื่อ backup ฐานข้อมูลของโปรเจคนึง ก็เกิดข้อผิดพลาดดังนี้
mysqldump: Error 2020: Got packet bigger than 'max_allowed_packet' bytes when dumping table `failed_jobs` at row: 79
ข้อผิดพลาดข้างต้นเป็นข้อผิดพลาด Packet Too Large ที่มีระบุอยู่ใน MySQL Reference Manual ซึ่งสามารถเข้าไปอ่านเพิ่มเติมได้ที่ https://dev.mysql.com/doc/refman/5.7/en/packet-too-large.html

วิธีแก้ไขข้อผิดพลาดดังกล่าวมี 2 วิธีดังนี้
  1. เพิ่ม --max_allowed_packet=512M ตอนสั่งรัน mysqldump
  2. เพิ่ม max_allowed_packet=512M ไปในส่วนของ [mysqldump] ในไฟล์ my.cnf
หมายเหตุ 512M เป็นเพียงขนาดตัวอย่างเท่านั้น ขนาดใหญ่สุดที่เป็นไปได้ คือ 1024M

Tuesday, March 10, 2020

[Docker - MySQL] วิธีการหลีกเลี่ยงกรณีที่ไม่สามารถรัน mysql:5.7 container ได้ เนื่องจากมีข้อผิดพลาด "Operating system error number 22 in a file operation"
[Docker - MySQL] Workaround for mysql:5.7 Container Cannot Start Due to "Operating system error number 22 in a file operation"

เนื่องจากมีหลายโปรเจคที่ใช้ฐานข้อมูลเป็น MySQL ผมจึงรัน MySQL Docker ผ่านทาง Docker Compose (บน Docker Toolbox ของ Windows) เพื่อใช้เป็นฐานข้อมูล ซึ่งจะมีการตั้งค่าในส่วน mysql service ใน docker-compose.yml ตามด้านล่างนี้
mysql:
    container_name: mysqlserver
    image: mysql:5.7
    ports:
        - 3306:3306
    volumes:
        - ./mysql:/var/lib/mysql
อย่างไรก็ตาม ปัญหานึงที่ผมเจอ คือ Container ของ MySQL จะหยุดการทำงาน เมื่อรันไปสักพัก เมื่อตรวจสอบ Log ของ Container จะเจอ error ดังนี้
2020-03-06T08:39:40.454013Z 0 [ERROR] InnoDB: Operating system error number 22 in a file operation.
2020-03-06T08:39:40.454196Z 0 [ERROR] InnoDB: Error number 22 means 'Invalid argument'
2020-03-06T08:39:40.454258Z 0 [ERROR] InnoDB: File ./ib_logfile101: 'aio write' returned OS error 122. Cannot continue operation
2020-03-06T08:39:40.454584Z 0 [ERROR] InnoDB: Cannot continue operation.
จากการตรวจสอบเบื้องต้นยังไม่สามารถหาวิธีแก้ไขได้ แต่มีวิธีการหลีกเลี่ยง error ข้างต้นไม่ให้เกิดขึ้น  โดยแก้ไขการตั้งค่าในส่วน mysql service ใน docker-compose.yml ดังนี้
mysql:
    container_name: mysqlserver
    image: mysql:5.7
    ports:
        - 3306:3306
    # volumes:
    #     - ./mysql:/var/lib/mysql