ผู้แต่ง: shuixian
ขั้นตอนและฟังก์ชันที่เก็บไว้ของ MySQL 5.1 ทำงานกับการจำลองแบบหรือไม่
ใช่ ลักษณะการทำงานมาตรฐานจะดำเนินการในขั้นตอนการจัดเก็บและฟังก์ชันที่จำลองแบบจากเซิร์ฟเวอร์ MySQL หลักไปยังเซิร์ฟเวอร์รอง
ขั้นตอนการจัดเก็บและฟังก์ชันที่สร้างขึ้นบนเซิร์ฟเวอร์หลักสามารถคัดลอกไปยังเซิร์ฟเวอร์ทาสได้หรือไม่
ใช่ ขั้นตอนการจัดเก็บและฟังก์ชันที่ดำเนินการผ่านคำสั่ง DDL ทั่วไป ซึ่งการสร้างบนเซิร์ฟเวอร์หลักจะถูกคัดลอกไปยังเซิร์ฟเวอร์รอง ดังนั้นเป้าหมายจะมีอยู่บนเซิร์ฟเวอร์ทั้งสองเครื่อง คำสั่ง ALTER และ DROP สำหรับขั้นตอนและฟังก์ชันที่เก็บไว้ก็จะถูกจำลองแบบเช่นกัน
ลักษณะการทำงานเกิดขึ้นได้อย่างไรภายในขั้นตอนและฟังก์ชันที่เก็บไว้ที่ถูกจำลองแบบ?
MySQL บันทึกทุกเหตุการณ์ DML ที่เกิดขึ้นภายในขั้นตอนและฟังก์ชันที่จัดเก็บไว้ และจำลองการกระทำแต่ละรายการเหล่านี้ไปยังเซิร์ฟเวอร์ทาส การเรียกขั้นตอนและฟังก์ชันที่เก็บไว้จริงจะไม่ถูกคัดลอก
มีข้อกำหนดด้านความปลอดภัยพิเศษสำหรับการใช้ขั้นตอนที่เก็บไว้ ฟังก์ชัน และการจำลองแบบร่วมกันหรือไม่
ใช่ เนื่องจากทาสได้รับอนุญาตให้ดำเนินการคำสั่งใดๆ ที่อ่านบันทึกไบนารีของต้นแบบ จึงมีข้อจำกัดด้านความปลอดภัยที่ระบุสำหรับขั้นตอนการจัดเก็บและฟังก์ชันที่ใช้ในการจำลองแบบ หากเปิดใช้งานการจำลองแบบหรือการบันทึกไบนารีโดยทั่วไป (เพื่อวัตถุประสงค์ในการกู้คืน ณ เวลาใดเวลาหนึ่ง) MySQL DBA จะมีตัวเลือกความปลอดภัยสองตัวเลือก:
ผู้ใช้ที่ต้องการสร้างขั้นตอนการจัดเก็บจะต้องได้รับสิทธิ์พิเศษ
อีกทางหนึ่ง DBA สามารถตั้งค่าตัวแปรระบบ log_bin_trust_routine_creators เป็น 1 ซึ่งจะอนุญาตให้ใครก็ตามที่มีสิทธิ์ CREATE ROUTINE มาตรฐานสามารถสร้างขั้นตอนและฟังก์ชันที่เก็บไว้ได้
อะไรคือข้อจำกัดในการทำงานของการคัดลอกขั้นตอนและฟังก์ชันที่เก็บไว้?
บรรทัดที่ไม่แน่นอน (สุ่ม) หรือตามเวลาที่ฝังอยู่ในกระบวนงานที่เก็บไว้ไม่ได้คัดลอกอย่างถูกต้อง โดยธรรมชาติแล้วผลลัพธ์ที่สร้างขึ้นแบบสุ่มนั้นสามารถคาดเดาได้และไม่สามารถลอกแบบได้อย่างน่าเชื่อถือ ดังนั้นพฤติกรรมแบบสุ่มที่จำลองแบบไปยังทาสจะไม่สะท้อนสิ่งที่เกิดขึ้นกับต้นแบบ โปรดทราบว่าการประกาศขั้นตอนการจัดเก็บหรือฟังก์ชัน DETERMINISTIC หรือการตั้งค่าตัวแปรระบบเป็น 0 ใน log_bin_trust_routine_creators จะอนุญาตให้เรียกใช้การดำเนินการค่าสุ่มได้
นอกจากนี้ การทำงานตามเวลาไม่สามารถทำซ้ำได้บนเซิร์ฟเวอร์ทาส เนื่องจากพฤติกรรมตามเวลาดังกล่าวไม่สามารถทำซ้ำได้ในขั้นตอนการจัดเก็บผ่านบันทึกไบนารี่ที่ใช้สำหรับการจำลองแบบ เนื่องจากบันทึกไบนารี่บันทึกเหตุการณ์ DML เท่านั้น และไม่รวมข้อจำกัดด้านเวลา
สุดท้ายนี้ หากมีข้อผิดพลาดเกิดขึ้นในตารางที่ไม่โต้ตอบระหว่างการดำเนินการ DML ขนาดใหญ่ (เช่น การแทรกจำนวนมาก) ตารางที่ไม่โต้ตอบอาจได้รับการจำลองแบบ และเซิร์ฟเวอร์หลักอาจได้รับการอัปเดตบางส่วนจากการดำเนินการ DML ในเวอร์ชันที่จำลองแบบแล้ว ของตารางที่ไม่โต้ตอบ แต่เนื่องจากข้อผิดพลาดที่เกิดขึ้น จึงไม่มีการอัพเดตเซิร์ฟเวอร์ทาส สำหรับลักษณะการทำงาน DML ของฟังก์ชัน พื้นที่ทำงานจะถูกดำเนินการด้วยคีย์เวิร์ด IGNORE เพื่อให้การอัพเดตที่ทำให้เกิดข้อผิดพลาดบนเซิร์ฟเวอร์หลักถูกละเว้น และการอัปเดตที่ไม่ทำให้เกิดข้อผิดพลาดจะถูกคัดลอกไปยังเซิร์ฟเวอร์ทาส