โปรแกรมจะสร้างตาราง ชื่อว่า backupfile ให้ server โดยอัตโนมัติ ในการสั่ง Backup ครั้งแรก เพื่อสำหรับตรวจสอบการ Backup ครั้งล่าสุด กับปัจจุบัน ว่าตารางไหนที่มี Record เปลี่ยนแปลงก็จะทำการ Backup ให้ใหม่ เพื่อประหยัดเวลาในการ Backup
ถ้า run ตัวโปรแกรมนี้จากหลายๆ เครื่อง สมมติ
เครื่อง A รันวันที่ 1 พอเครื่อง B มารันวันที่ 2 มันจะเอามาเฉพาะตารางที่เปลี่ยนแปลงหรือเปล่าครับ
------------------------------------------------------------------------------------------------------------------------
ไม่น่าจะมีปัญหาครับ โปรแกรมจะตรวจสอบเครื่องที่ Backup ครั้งแรก จะต้องได้ตารางครบทุกตาราง เหมือน Server ( แต่แนะนำให้ใช้แค่ 1 เครื่องในการตั้งเวลา Backup ก็น่าจะเพียงพอครับ โดยอาจใช้ควบคู่กับ Backup Schedule ของ HOSxP )
ลองทดสอบดูครับ
อยากได้หรือช่วย sharecode ให้ด้วยครับจะได้นำไปต่อยอดได้
เพราะสิ่งที่ต้องการตอนนี้คือให้โปรแกรมบันทึกเฉพาะตารางข้อมูลที่มีการเปลี่ยนแปลงข้อมูล
เช่น insert update delete
โดยน่าจะมีตัวเลือกให้เลือกตารางตาม replicate_log เพราะใน replicate_log ใน sql จะมีชื่อตารางมาให้แต่เราต้องการมาเฉพาะตารางที่มีการเปลี่ยแปลงในรอบสัปดาห์ที่ผ่านมาว่ามีการเปลี่ยนแปลงข้อมูลตารางใดบ้าง
ถ้าดูจากจำนวน record ที่เปลี่ยนแปลงคงไม่พอครับบางที่มีการแก้ไขข้อมูลอย่างเดียวไม่มี record เพิ่มหรือลด
ส่วนโปรแกรมจะไม่มีการ backup นะครับ
น่าจะตามจาก log ใน replicate_log ดัง sql ข้างล่างน่าจะไม่ต้องสร้าง backuplog มาเก็บว่าตารางใหนเพิ่มลด(เฉพาะใน HOSxP database ตัวอื่นอาศัยหลักการที่ว่าได้อยู่ครับ)
ถ้าจะแก้ใหไวนะครับเปลี่ยนจากการอ่าน backuplog file มาใช้ replcate_log น่าจะ ok นะครับ
ตาม sql ที่ให้ไว้เป็นการหาตารางที่มีการ insert delete update record ในรอบ 3 วันย้อนหลัง
น่าจะพอแล้วครับ
set @a:=''; set @b:='';
show table status where name in (select t.tables
from ( select @a:=rtrim(substring(r.`sql`,1, if(r.`sql` like 'delete%',if(instr(r.`sql`,'where')=0,length(r.`sql`),instr(r.`sql`,'where')-2),
if(r.`sql` like 'insert%',if(instr(r.`sql`,'select')=0,instr(r.`sql`,'(')-2,instr(r.`sql`,'select')-2), instr(r.`sql`,'set')-1)))) as a,
@b:=rtrim(substring(@a,if(@a like 'delete%', instr(@a,'from')+5, if(@a like 'insert%',instr(@a,'into')+5,8)) )) as x ,if(instr(@b,'(')>0, substring(@b,1,instr(@b,'(')-2),@b) as tables,r.`sql`
from replicate_log r
where event_time between concat(date_add(curdate(),interval -3 day),' 00:00:00') and concat(curdate(),' 23:59:59')
group by tables ) as t where instr(t.tables," ")+instr(t.tables,".")<1)
/*for replicate_log_event*/
ลองรันในสายฟ้าดูว่าเรามีตารางอะไรบ้างที่บันทึกไปในรอบ 3 วันที่ผ่านมา
แล้วน่าจะมีตัวเลือกให้ โอนข้อมูลเลยตามเวลาที่กำหนด
เพราะตอนนี้ผมใช้ bat file ที่เขียนขึ้นมาใช้เองจะกำหนดได้ว่าจะ backup แล้ว บีบอัด หรือ ว่าโอนข้อมูลไปยัง slave ได้เลย
ดูเพิ่มเติมจาก link
http://hosxp.net/index.php?option=com_smf&Itemid=28&topic=29777.msg244628#msg244628ตอนนี้ยังใช้ bat file อยู่นะครับ ต้องมีการสร้าง schedual task
ในการโอนข้อมูล thairefer,hosxp,eclaim เพราะใช้ฐาน mysql ทั้งหมด
แต่ถ้าเป็นฐานข้อมูลอื่นตัวเลือกการเลือกตารางตาม replicate_log ไม่ต้องทำงานจะน่าใช้มากครับ
ส่วนตัวเลือก addtime น่าจะสั่งให้มันสร้าง schedual task ตามเวลาใน list นะครับถ้าถึงเวลาค่อยเรียกโปรแกรมมาทำงานไม่ต้องเปิดทิ้งไว้เพื่อมีการมาปิดมันโดยไม่ตั้งใจ