วิธีการเปลี่ยน MySQL slave ก่อนหน้าให้เป็น master และลบข้อมูลสถานะ slave?


10

ฉันมีต้นแบบ -> การกำหนดค่าทาสที่ต้นแบบล้มเหลว ฉันสามารถรีเซ็ตทาสเก่าให้เป็นเจ้านายและเจ้านายเก่าเป็นทาสจากมันได้ ละเอียด.

สิ่งที่ฉันไม่สามารถทำได้คือการลบข้อมูลหลักในทาสเก่าซึ่งตอนนี้เป็นปรมาจารย์ใหม่ ฉันเห็น:

mysql> show slave status \G
*************************** 1. row ***************************
           Slave_IO_State: 
              Master_Host: 10.1.2.101
              Master_User: replicationSlave
              Master_Port: 3306
              ...
              Slave_IO_Running: No
              Slave_SQL_Running: No

ฉันอ่านเอกสาร MySQLจำนวนมากแล้วแต่ฉันยังไม่พบวิธีล้างข้อมูลทาสจากปรมาจารย์ใหม่ ฉันได้พยายาม:

  1. RESET SLAVEซึ่งดูเหมือนจะไม่ล้างการตั้งค่าเหล่านั้น [[จริงๆแล้วมันลบmaster.infoไฟล์ แต่ไม่ใช่การตั้งค่าหน่วยความจำ ดูด้านล่าง]]
  2. CHANGE MASTER TO MASTER_HOST='' ซึ่งเพิ่งถ่มน้ำลายกับข้อผิดพลาดเนื่องจากเพิ่งเลิกใช้ไปแล้ว
  3. การตรวจสอบmy.cnfที่ไม่มีข้อมูลหลักเนื่องจากมีการเพิ่มโดยทางโปรแกรม
  4. RESET MASTERเพราะเอกสาร MySQL บางตัวแนะนำ ที่รีเซ็ตบันทึกถังขยะเท่านั้น
  5. เจาะเข้าไปในตาราง MySQL ภายในเพื่อดูว่าฉันสามารถหาเขตข้อมูลเพื่อล้างได้หรือไม่

วิธีที่เหมาะสมในการทำเช่นนี้ใน MySQL ~ 5.5.9 คืออะไร? ขอบคุณสำหรับความช่วยเหลือ


แก้ไข:

ดังนั้นปรากฎว่าRESET SLAVEลบmaster.infoไฟล์ตาม @RolandoMySQLDBA โดยนัย อย่างไรก็ตามคุณยังต้องรีสตาร์ทเซิร์ฟเวอร์ก่อนที่ข้อมูลสลาฟจะถูกลบออก

มีวิธีการลบข้อมูลทาสนี้โดยไม่ต้องรีสตาร์ท mysqld หรือไม่


คำตอบ:


10

ใน MySQL 5.5.16 และใหม่กว่าคุณสามารถใช้RESET SLAVE ALLเพื่อทำทุกอย่างที่RESET SLAVEทำได้และรีเซ็ตพารามิเตอร์การเชื่อมต่อจากหน่วยความจำด้วยวิธีนี้ไม่ต้องมีการรีสตาร์ท mysqld


6

วิธีที่รวดเร็วและสกปรกที่สุดในการล้างข้อมูลทาสจากอินสแตนซ์ MySQL

  • เพิ่มskip-slave-startไปยัง /etc/my.cnf ภายใต้[mysqld]
  • service mysql stop
  • rm -f /var/lib/mysql/master.info /var/lib/mysql/relay-*
  • service mysql start
  • ลบออกskip-slave-startจาก /etc/my.cnf

ควรทำเพื่อคุณ !!!

สิ่งนี้จะมีความจำเป็นเพราะตามเอกสาร MySQL บนRESET SLAVE :

ใน MySQL 5.5 (ไม่เหมือนกับใน MySQL 5.1 และรุ่นก่อนหน้า) RESET SLAVE จะไม่เปลี่ยนพารามิเตอร์การเชื่อมต่อการจำลองแบบเช่นโฮสต์หลักพอร์ตหลักผู้ใช้หลักหรือรหัสผ่านหลักซึ่งเก็บไว้ในหน่วยความจำ ซึ่งหมายความว่า START SLAVE สามารถออกได้โดยไม่ต้องเปลี่ยนคำสั่ง CHANGE MASTER TO หลังจาก RESET SLAVE

ดังนั้นข้อมูลการจำลองแบบยังคงอยู่ในหน่วยความจำ การรีสตาร์ท mysql เป็นวิธีเดียวที่จะไป


ขอบคุณ @Rolando +1 ฉันเห็นแล้ว แต่ไม่ได้ลอง ฉันพยายามไม่ต้องรีสตาร์ท mysqld เพื่อแก้ไขปัญหานี้
สีเทา - ดังนั้นหยุดความชั่วร้าย

นอกจากนี้ฉันไม่เห็นmaster.infoไฟล์ใด ๆ มีอยู่เสมอใน "ปรมาจารย์" หรือ "บ่าว"?
สีเทา - ดังนั้นหยุดความชั่วร้าย

master.info อยู่บน Slave Server เสมอ
Abdul Manaf

5

RESET SLAVEตามด้วยการรีสตาร์ทจะไม่ล้างข้อมูลทาสเท่าที่เกี่ยวข้องกับ phpmyadmin CHANGE MASTER TO MASTER_HOST=''นอกจากนี้คุณยังจะต้องตั้ง


3

ฉันขอแนะนำให้รักษาคำสั่ง skip-slave-start ในไฟล์ปรับแต่งของคุณ ('ใน /etc/my.cnf') ภายใต้ 'mysqld' ของคุณเพื่อหลีกเลี่ยงการแทนที่ข้อมูล master-slave เพื่อให้ตัวอย่างแก่คุณเมื่อทำงานในสภาพแวดล้อมแบบคลาวด์สมมติว่าเจ้านายเก่าล่มแล้วเริ่มต้นใหม่ได้สำเร็จเมื่อคุณผู้ให้บริการของคุณแก้ไขปัญหาใด ๆ - ทาสเก่า (ตอนนี้ต้นแบบใหม่) จะทำซ้ำจากต้นแบบเก่าแทนที่ข้อมูลก่อน DBA มีโอกาสตระหนักถึงสิ่งนี้

BTW นี้ยังเกี่ยวข้องในสภาพแวดล้อมที่ไม่ใช่คลาวด์ ถ้าเช่นนั้นผู้ดูแลระบบคนอื่นจะนำต้นแบบเก่ามาใช้โดยไม่ต้องประสานงาน นอกจากนี้ยังมีอีกประเด็นที่ว่าทำไมจึงเป็นความคิดที่ดีที่จะรักษาคำสั่ง 'skip-slave-start' แม้ว่าจะเป็นทาส - ไม่มีการจำลองแบบอัตโนมัติหมายความว่าคุณสามารถควบคุมการป้องกันผลลัพธ์ที่ไม่คาดคิดได้มากขึ้น :)


ขอบคุณสำหรับคำตอบ @Lena นั่นเป็นความคิดที่ดี. ฉันจะดูมัน
สีเทา - ดังนั้นจงหยุดความชั่วร้าย
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.