Score:0

AWS EC2 MySQL Replication: กำหนดค่าเป็น Query Slave จาก Master

ธง us

ฉันตั้งค่า MySQL master-slave สำเร็จบนอินสแตนซ์ AWS EC2 แยกต่างหาก ทาสกำลังทำงานและจำลองต้นแบบได้สำเร็จ

จนถึงตอนนี้ดีมาก

ตอนนี้ฉันต้องการที่จะสามารถสอบถามทาส (สำหรับการวิเคราะห์ ฯลฯ ) แต่ฉันไม่พบการกำหนดค่าที่เหมาะสมเพื่อให้สามารถส่งแบบสอบถามจากต้นแบบไปยังทาส

ข้อผิดพลาดที่ฉันได้รับ (ขึ้นอยู่กับการตั้งค่าโปรไฟล์ความปลอดภัย AWS ของฉัน) คือ "การเชื่อมต่อถูกปฏิเสธ" หรือ "การเชื่อมต่อหมดเวลา"

บนสเลฟ ฉันมี EC2 Security Group ที่อนุญาตสำหรับบล็อก IP หลักเพื่อใช้เชื่อมต่อกับพอร์ต 3306 และฉันใช้ที่อยู่ IP ของสเลฟในการกำหนดค่าการเชื่อมต่อของมาสเตอร์

ซึ่งส่งผลให้เกิดข้อผิดพลาด "การเชื่อมต่อถูกปฏิเสธ" เมื่อฉันพยายามสอบถามทาสจากมาสเตอร์

ในมาสเตอร์ ฉันเรียกใช้ 'แสดงรายการกระบวนการทั้งหมด' และเห็นว่าโฮสต์สเลฟเป็นชื่อโฮสต์ AWS EC2 ไม่ใช่ IP และพอร์ต 44508 ถูกต่อท้าย ดังนั้นฉันจึงเปลี่ยนข้อมูลการเชื่อมต่อบนมาสเตอร์เพื่อใช้โฮสต์สเลฟ ชื่อแทนที่อยู่ IP และการตั้งค่ากลุ่มความปลอดภัยบนทาสเพื่ออนุญาตการรับส่งข้อมูลจากมาสเตอร์บนพอร์ต 44508 แทน 3306

ซึ่งส่งผลให้เกิดข้อผิดพลาด "การเชื่อมต่อหมดเวลา"

ฉันได้ลองผสม IP/ชื่อโฮสต์/พอร์ตในกลุ่มความปลอดภัยของสลาฟแล้ว แต่เพิ่งได้รับข้อผิดพลาดหนึ่งใน 2 รายการนั้นไม่ว่าจะใช้ชุดค่าผสมใด

ทุกคนสามารถเสนอเคล็ดลับเกี่ยวกับวิธีการกำหนดค่าต่างๆ เพื่อให้ฉันสามารถรันการสืบค้น (อ่านอย่างเดียว) บนสเลฟจากเครื่องหลักนั้น และส่งคืนผลลัพธ์กลับไปยังมาสเตอร์ได้หรือไม่ ทีไอเอ.

ทั้งสองระบบได้รับการตั้งค่าเหมือนกัน ยกเว้นว่ามาสเตอร์กำลังเรียกใช้ Codeigniter4 ด้วย ซึ่งเป็นตำแหน่งที่ฉันตั้งค่าคอนฟิกูเรชันการเชื่อมต่อ:

อูบุนตู 20.04.3 LTS และ MySQL 8.0.26-0

Score:1
ธง la

ในการตั้งค่าดังกล่าว ไคลเอนต์ของคุณ (แอพ ซอฟต์แวร์) ควรเชื่อมต่อกับสลาฟและเรียกใช้แบบสอบถาม SELECT เท่านั้น (หากคุณต้องการเรียกใช้แบบสอบถามการเขียน - ควรทำในต้นแบบเท่านั้น)

คุณควรตรวจสอบ:

  1. หากเซิร์ฟเวอร์ MySQL รับฟังเครือข่ายในเซิร์ฟเวอร์ทาส
  2. หากกลุ่มความปลอดภัยอนุญาตให้เชื่อมต่อกับเซิร์ฟเวอร์ทาสโดยแอพของคุณ
  3. ควรกำหนดค่าสเลฟเป็นแบบอ่านอย่างเดียวเพื่อป้องกันปัญหา
us flag
เซิร์ฟเวอร์สเลฟกำลังจำลองอย่างถูกต้อง โดยมีข้อมูลที่พุชจากบันทึกไบนารีหลักไปยังสเลฟ 'แสดงสถานะสเลฟ' แสดงว่าไม่มีข้อผิดพลาดและการอัปเดตของมาสเตอร์จะปรากฏขึ้นเกือบจะทันทีในสเลฟ'แสดงรายการกระบวนการทั้งหมด' บนต้นแบบแสดงทาส กลุ่มความปลอดภัยในต้นแบบอนุญาตให้เข้าถึงจากและไปยังทาส กลุ่มความปลอดภัยบนทาสอนุญาตให้เข้าถึงและจากมาสเตอร์ ทาสไม่ได้กำหนดค่าเป็นแบบอ่านอย่างเดียว แต่ฉันควรจะสามารถสอบถามมันได้ ฉันคิด ขอขอบคุณสำหรับความสนใจของคุณ.
us flag
ไม่ต้องสงสัยเลยว่าสิ่งนี้เกี่ยวข้องกับ: บนเซิร์ฟเวอร์ทาส ฉันไม่สามารถเข้าสู่ระบบทาสในฐานะผู้ใช้ 'ทาส' ตาราง 'mysql.user' แสดงปลั๊กอินสำหรับผู้ใช้ 'slave' เป็น 'cached_sha2_password' แทน 'mysql_native_password' ซึ่งอาจเป็นสาเหตุที่ทำให้ฉันไม่สามารถเข้าสู่ระบบในฐานะผู้ใช้ (แม้จะเป็น 'root' ... ฉันสามารถเข้าสู่ระบบด้วย 'sudo mysql')
us flag
ไม่พยายามเข้าสู่ระบบในฐานะ 'ทาส' อีกต่อไป เช่นเดียวกับผู้ใช้ทั่วไปที่ฉันใช้กับมาสเตอร์ ฉันสามารถเข้าสู่ฐานข้อมูลทาสได้อย่างแน่นอนโดยใช้ข้อมูลรับรองผู้ใช้ปกติ อย่างไรก็ตาม ไม่มีความสุขในการเชื่อมต่อจากมาสเตอร์ ดังนั้นฉันจึงสร้างผู้ใช้ใหม่บนมาสเตอร์ด้วยชื่อและข้อมูลรับรองเดียวกันกับมาสเตอร์ แต่ด้วย IP โฮสต์ของสเลฟ และตามด้วย IP ของมาสเตอร์ และตามด้วยชื่อโฮสต์ที่รายงานโดย 'แสดงแบบเต็ม รายการกระบวนการ' รวมสิ่งเหล่านั้นในสตริงการเชื่อมต่อ db กับพอร์ต 3306 หรือพอร์ต 44508 ที่รายงานโดย 'แสดงรายการกระบวนการทั้งหมด' แต่ก็ยังไม่มีความสุข
la flag
คุณควรออกคำสั่งทั้งหมดที่แก้ไขข้อมูลบนมาสเตอร์เท่านั้นเพื่อหลีกเลี่ยงปัญหา และสร้างผู้ใช้ด้วย localhost หรือ 127.0.0.1 เป็นโฮสต์ เช่น user@'127.0.0.1' หากคุณกำลังเชื่อมต่อกับ MySQL จากเซิร์ฟเวอร์สลาฟ
us flag
ขอขอบคุณอีกครั้ง. ใช่ ฉันออกคำสั่งทั้งหมดบนมาสเตอร์และอนุญาตให้จัดการสิ่งที่เกิดขึ้นกับทาส ไม่มีปัญหากับการจำลองแบบ นี่เป็นฐานข้อมูลหลักที่ค่อนข้างสมบูรณ์พร้อมระบุผู้ใช้ localhost ทั้งหมดและพร้อมใช้งานบนต้นแบบ ฉันไม่สามารถหาวิธีเรียกใช้คิวรีบนสเลฟจากมาสเตอร์ได้ ฉันพยายามเชื่อมต่อกับสเลฟจากมาสเตอร์เพื่อรันการสืบค้นของฉัน และฉันไม่ได้รันอะไรจากสเลฟ ฉันต้องการที่จะเรียกใช้แบบสอบถามบนทาสจากต้นแบบ
la flag
คุณจะเชื่อมต่อจากเซิร์ฟเวอร์หลักไปยังเซิร์ฟเวอร์ MySQL ทาสได้อย่างไรเมื่อพยายามเรียกใช้แบบสอบถาม
us flag
ขอขอบคุณอีกครั้งสำหรับความสนใจของคุณ ฉันใช้ข้อมูลการเชื่อมต่อ MySQL ทั่วไป ... โฮสต์ ผู้ใช้ รหัสผ่าน จากนั้นฉันก็ตรวจสอบว่ามีการเชื่อมต่อฐานข้อมูลหรือไม่ แต่ในทุกกรณี ฉันไม่ได้รับผลลัพธ์ใด ๆ ยกเว้น (ก) การเชื่อมต่อฐานข้อมูลล้มเหลว และ (ข) ข้อผิดพลาด "การเชื่อมต่อถูกปฏิเสธ" หรือ "การเชื่อมต่อหมดเวลา" ฉันเปิดไฟร์วอลล์ของเซิร์ฟเวอร์สเลฟอย่างสมบูรณ์กับทราฟฟิก TCP จากแหล่งใด ๆ โดยใช้พอร์ตใด ๆ และฉันได้รับข้อผิดพลาด "หมดเวลาการเชื่อมต่อ" ฉันตรวจสอบแล้วว่าเซิร์ฟเวอร์ MySQL กำลังทำงานอยู่ (และกำลังจำลองต้นแบบ) และแม้จะเปิดทุกอย่างอยู่ ... ฉันก็งุนงง
us flag
เมื่อฉันออก 'แสดงแบบจำลอง' บนต้นแบบ ฉันเห็นทาสในผลลัพธ์ แต่รายการไม่มีค่า 'โฮสต์' เมื่อฉันออก 'แสดงรายการกระบวนการทั้งหมด' ฉันเห็นทาสในผลลัพธ์พร้อมค่าโฮสต์ที่สมบูรณ์ บางทีนั่นอาจหมายถึงบางสิ่ง?
la flag
แสดงคำสั่งที่คุณใช้ในการเชื่อมต่อและคุณสามารถวาง my.cnf ของสลาฟได้
us flag
connect_error) { die("การเชื่อมต่อล้มเหลว:" . $conn->connect_error); } echo "เชื่อมต่อสำเร็จ"; ?>
us flag
คุณมีคำถามเฉพาะเกี่ยวกับการกำหนดค่า MySQL หรือไม่? ตัวอย่างเช่น server_id=2
la flag
ให้เรา [สนทนาต่อในแชท](https://chat.stackexchange.com/rooms/129860/discussion-between-martynas-saint-and-james-butler)
Score:0
ธง us

แก้ไขแล้ว: ใน /etc/mysql/mysql.conf.d/mysqld.cnf ของทาสฉันต้องการแสดงความคิดเห็นในบรรทัด 'bind-address' และ 'mysqlx-bind-address' หยุดทาสรีสตาร์ท mysqld และเริ่มทาส

การมี 'bind-address = 127.0.0.1' ทำให้ไม่สามารถเชื่อมต่อได้จากที่อื่น การแสดงความคิดเห็นทำให้สามารถเข้าถึงได้จากทุกแหล่ง ไม่ใช่แค่ localhost EC2 Security Group จำกัดการเข้าถึงพอร์ต 3306 ไว้ที่เซิร์ฟเวอร์หลักเท่านั้น

ทำงานได้ดีรอบ ๆ ตอนนี้ ขอขอบคุณอีกครั้งสำหรับความสนใจของคุณ

la flag
โดยพื้นฐานแล้วอันนี้: คุณควรตรวจสอบ: หากเซิร์ฟเวอร์ MySQL รับฟังเครือข่ายในเซิร์ฟเวอร์ทาส ;:) ดีใจที่คุณได้แก้ปัญหาของคุณ

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา