ว่างเว้นจากงานเขียนโปรแกรมไปนาน เนื่องจากภาระกิจงานบริหาร พอจะมาเขียน web service ตัวใหม่ต่อ งานแรกที่ต้องทำคือ เอาฐานข้อมูล hosxp จาก server เข้าเครื่อง macbook air(Yosemite OSX 10.10) ที่ใช้งานประจำ ลองลง MariaDB 10.1 ผ่าน Macport แทน MySQL เพราะ support InnoDB มากกว่า เข้า Parallel Desktop เพื่อเข้า hosxp ที่อยู่บน windows และจัดการ initial import โดยกำหนด slave มาที่ MBA ช่วงแรกก็เร็วดี เดินไปชงกาแฟ กลับมา error : out of memory อืมม์ อาจเพราะรันบน Virtual Machine Memory เลยไม่พอ จำต้องหา เครื่อง windows มาช่วย run initial import แทน แต่ก็เกิดอาการเดียวกัน ลองเพิ่ม thread ก็กลับมาวิ่งได้ซักพัก ก็ out of memory ต่อ ต้องคอยเฝ้า เพิ่ม thread กันไม่ต้องหลับต้องนอน จนสุดท้าย แจ้ง error ว่า พื้นที่การจัดเก็บไม่พอ ยอมแพ้ เรียกน้อง IT มาสอบถาม เพราะไม่ได้จับเสียนาน ได้ความว่า GUI ใหม่ใช้ Memory มากในการ initial import (ทั้งฝั่ง client และ server) ส่วน ปัญหาอื่นเช่น mysql ตัดไปเป็นบางช่วง ในตาราง image บางตารางเพราะไฟล์ขนาดใหญ่กว่า max_allow_package ส่วนที่พื้นที่จัดเก็บไม่พอน่าจะเกิดจาก log file(ซึ่งตอนเขียนโปรแกรมไม่ใคร่จะจำเป็นสำหรับผม) และโปรแกรมอื่นที่ใช้ฐานร่วมกับ hosxp(เช่น ulog) น้อง IT แนะนำว่า ให้ downgrade version ลง เพื่อ inital import หรือ ไม่ก็ backup แบบไม่เก็บรูปกับ log แล้วค่อย restore และ upgrade structure ภายหลัง ซึ่งทุกวิธีต้องทำผ่าน windows
เลยเกิดความคิดว่า ไหนๆก็ไหนๆ เขียน script เพื่อนำเข้า ผ่าน shell script ดีกว่า ใช้ได้ทั้งบน OSX และ Linux ซึ่งน่าจะเป็นประโยชน์กับ admin ในการนำเข้า Database ผ่าน commandline ได้เลย สะดวกดี
คุณสมบัติ- ลบ/สร้าง database ขึ้นใหม่ได้เลย(ยืนยันการ drop database เดิมก่อน สร้างใหม่และนำเข้า)
- สามารถ เลือกตารางที่ไม่ต้องการนำเข้า(ตารางที่ไม่ใช่ของ hosxp) หรือ นำเข้าเฉพาะ structure (log table) โดยกำหนดรูปแบบ หรือจำเพาะเจาะจง
-ใช้การ dump และ restore ทีละตารางแทนการ dump ทั้ง database ที่จะทำให้ไฟล์ .sql มีขนาดใหญ่ นำเข้าได้ช้า และเปลือง Memory
- สามารถนำไปปรับใช้ในการนำเข้าหรือถ่ายข้อมูล MySQL ได้ทุกๆฐานข้อมูล
การใช้งานและการปรับแก้ -เปิดไฟล์ hosxpimport.sh โดย texteditor ตามถนัด( เช่น vi)
-ใส่ข้อมูลส่วนของ server ฐานข้อมูลต้นทาง และ server ปลายทาง อาจอยู่ในเครื่องที่ run script หรือต่างเครื่องก็ได้
## Master sever
master_ip="";
master_user="";
master_pass="";
master_db="";
## Import sever
import_ip="";
import_user="";
import_pass="";
import_db=""; #drop database if existe; create database if not.
กรณี import_db มีอยู่แล้ว จะมีการตรวจสอบและถามยืนยันว่าต้องให้ลบฐานข้อมูลดังกล่าว เพื่อสร้างใหม่หรือไม่? (ตอบ y ใช่ / n ยกเลิก)
Database already exist. Do you wish to drop database and create new one?(y/n)
- ปรับแต่งตารางที่ต้องการนำเข้าหรือไม่ต้องการนำเข้า(ถ้าไม่ต้องการปรับแก้ข้ามไป)
## Get table name without log
echo "show tables;" | mysql -h $master_ip -u $master_user -p$master_pass $master_db |grep -v '^Tables_in_'|grep -v '_log$'|grep -v 'data_synchronize'|grep -v 'ksklog'|grep -v '^ulog_' > tables.txt
รูปแบบ |grep -v ‘xxxx’ หมายถึง ไม่นำตาราง xxxx เข้า
|grep -v ‘^xxxx’ หมายถึง ไม่นำตารางที่ขึ้นด้วย xxxx เข้า
|grep -v ‘xxxx$’ หมายถึง ไม่นำตารางลงท้ายด้วย xxxx เข้า
หมายเหตุ การไม่นำตารางของ hosxp เข้าต้องไม่ลืมนำเข้า structure(ในขั้นถัดไป) มิฉะนั้นจะทำให้เข้าใช้งานไม่ได้ หรือต้องทำ upgrade structure ผ่าน windows
- ปรับแต่งตารางที่ต้องการนำเข้าเฉพาะ structure (ถ้าไม่ต้องการปรับแก้ข้ามไป)
## Get log table or other table name
echo "show tables;" | mysql -h $master_ip -u $master_user -p$master_pass $master_db |grep -e '_log$' -e 'data_synchronize' -e 'ksklog' > logs.txt
รูปแบบ -e ‘table_name’
-บันทึกไฟล์ที่ปรับแก้
- กำหนดสิทธิ์ให้สามารถ run ได้ โดยพิมพ์คำสั่ง ใน terminal
chmod +x hosxpimport.sh
-run script โดยพิมพ์คำสั่ง ใน terminal
./hosxpimport.sh
- script จะสร้าง database อัตโนมัติกรณียังไม่มี กรณีมีอยู่แล้ว จะยืนยันเพื่อลบและสร้างใหม่ หลังจากนั้น script จะ แสดงกระบวนการนำเข้า ชื่อตารางที่ดำเนินการอยู่ ขั้นตอนต่างๆ error(กรณีที่มี แต่จะ run ต่อแม้มี error )
- ไปชงกาแฟ
- เมื่อสิ้นสุด จะแสดงระยะเวลาที่ใช้ไปทั้งหมด (ขึ้นอยู่กับฐานข้อมูล และความเร็วเครื่อง) นำเข้าข้อมูล รพ.ทุ่งยางแดง ขนาดประมาณ 30 GB เข้า ใน Macbook Air Yosimite OSX 10.10 กับ ฐานข้อมูล MariaDB 10.1 ใช้เวลา 80 นาที ทดสอบการเข้าใช้โดยไม่ได้ upgrade structure login ใช้ได้ปกติ ไม่ได้แสดงข้อความ error อะไร ถือว่า ไม่เร็ว แต่ก็ไม่เลวร้ายนัก ไม่ต้องหาเครื่อง windows อีกเครื่อง ไม่ต้อง backup-restore ไม่ต้อง downgrade
-ขอให้สนุกในการใช้งานครับ
**** แก้ไขไฟล์สำหรับตาราง Doraemon ครับ
**** แก้ไขไฟล์ error ECHO ครับ(เปลี่ยนเป็นตัวเล็ก echo ให้แล้วครับ)