ฉันจะปิดการใช้งานการจำลองแบบ MySQL อย่างสมบูรณ์ได้อย่างไร


64

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

คำตอบ:


81

หากต้องการปิดใช้งานการจำลองแบบอย่างสมบูรณ์ด้วยการตั้งค่าต้นแบบหลักคุณควรทำสิ่งต่อไปนี้บนสลาฟแต่ละตัว:

  1. STOP SLAVE;
  2. RESET SLAVE;(ใช้RESET SLAVE ALL;สำหรับ MySQL 5.5.16 และใหม่กว่า)
  3. แก้ไข my.cnf และลบข้อมูลใด ๆ (ถ้ามี) ซึ่งอ้างถึงตัวเลือก "master -... " หรือ "replicate -... " คุณอาจไม่มีอะไรใน my.cnf เนื่องจากการจำลองแบบสามารถตั้งค่าแบบไดนามิกได้เช่นกัน
  4. รีสตาร์ท mysqld

ถ้าการจำลองแบบถูกตั้งค่าแบบไดนามิกขั้นตอนที่ 1 และ 2 ควรเพียงพอ
tanyehzheng

4
จนกว่าจะรีสตาร์ท MySQL มันจะรายงานข้อมูลการจำลองแบบเก่าของSLAVE STATUSแบบสอบถามแม้หลังจากได้RESET SLAVEรับคำสั่งแล้ว สิ่งสำคัญที่ควรทราบสำหรับการตรวจสอบหรือเครื่องมือการจัดการการกำหนดค่าระยะไกล ยืนยันพฤติกรรมกับ MySQL 5.5.38 บน CentOS 6.5
Chris Laskey

ฉันทำตามขั้นตอน แต่ทำไมทาสที่ไม่ได้ใช้งานยังอยู่ในรายการคำสั่ง mtop จะลบออกจากรายการได้อย่างไร
Scott Chu

18

ฉันรู้ว่านี่เป็นคำถามเก่า แต่ฉันพบว่าฉันต้องรีเซ็ตตัวแปรทาส หากคุณใช้ "blah" ตามที่แนะนำเซิร์ฟเวอร์จะพยายามเริ่มต้นเพื่อค้นหาเซิร์ฟเวอร์ 'blah'

เปลี่ยนMASTERเป็นMASTER_HOST='',MASTER_USER='',MASTER_PASSWORD='';

คุณสามารถตรวจสอบว่าเครื่องไม่ได้เป็นทาสอีกต่อไป

SHOW SLAVE STATUS \G;

5
สิ่งนี้ใช้ไม่ได้อีกต่อไป การตั้งค่าในCHANGE MASTER TO MASTER_HOST=''ขณะนี้พ่นข้อผิดพลาด
สีเทา

ข้อผิดพลาด 1210 (HY000): ข้อโต้แย้งที่ไม่ถูกต้องกับ MASTER_HOST
Kazimieras Aliulis

ใช้งานได้กับฉันใน CentOS 6 (MySQL 5.1) หลังจากสถานะ SHOW SLAVE นี้ส่งคืนชุดว่างขณะที่หลังจาก SLET RESET มันยังคงแสดงข้อมูลหลักบางอย่าง
Martijn

คำตอบนี้ยังคงใช้ได้สำหรับผู้ใช้ MySQL 5.1 (ยังอาจมีอยู่)
RolandoMySQLDBA

12

บนเซิร์ฟเวอร์ทาส:

  1. เรียกใช้ "stop slave" เพื่อหยุดการจำลองแบบ
  2. รัน "รีเซ็ต slave" เพื่อบอกให้เซิร์ฟเวอร์ slave ลืมตำแหน่งของมันในบันทึกไบนารีที่ดึงมาจากเซิร์ฟเวอร์หลัก
  3. เพิ่ม "skip-slave-start" ใน my.cnf เพื่อป้องกันการจำลองแบบเริ่มต้นเมื่อคุณรีสตาร์ท MySQL

ไม่จำเป็นต้องรีสตาร์ท MySQL ทั้งบนมาสเตอร์หรือทาส เอกสารที่สมบูรณ์สามารถพบได้ในมาตรา 19 ของคู่มืออ้างอิง MySQL

ฉันขอแนะนำให้เว้นการตั้งค่าการจำลองแบบที่เหลือไว้ในกรณีที่คุณตัดสินใจเปลี่ยนกลับเป็นการกำหนดค่าก่อนหน้า ด้วยวิธีนี้คุณเพียงแค่ต้องผลักดันข้อมูลและรีเซ็ตตำแหน่งทาส (อย่าลืมลบ skip-slave-start) แทนที่จะสร้างการตั้งค่าทั้งผ้าอีกครั้ง


7

ไม่ว่าจะเป็นเวอร์ชั่น MySQL วิธีที่สมบูรณ์แบบที่สุดในการทำเช่นนี้คือ

cd /var/lib/mysql
service mysql stop
rm -f master.info relay-*`
service mysql start

สิ่งนี้ต้องใช้กับเวอร์ชั่นล่าสุดเพราะการตั้งค่าการจำลองยังคงอยู่ใน RAM สำหรับ MySQL 5.5

ฉันเพิ่งตอบคำถามที่คล้ายกันในเรื่องนี้: วิธีการเปลี่ยนทาสก่อนหน้า MySQL เป็นหลักและลบข้อมูลสถานะทาส?


6

การแก้ไขไฟล์ my.cnf เพียงอย่างเดียวไม่เพียงพอที่จะปิดใช้งานการจำลองแบบ ความจริงแล้วมันไม่ใช่วิธีที่แนะนำในการเปิดใช้งานอีกต่อไป การใส่รายการในไฟล์ my.cnf จะมีผลเฉพาะสำหรับการเริ่มต้นครั้งถัดไปและทำงานราวกับว่าคุณได้ป้อนคำสั่งลงในไคลเอนต์ mysql:

mysql> เปลี่ยน master เป็น master_host = 'blah', master_user = 'blah', master_password = 'blah' ... ;

ทั้งสองวิธีการเหล่านี้จะสร้างไฟล์ในไดเรกทอรีข้อมูลที่เรียกว่าmaster.info ตราบใดที่ไฟล์นี้มีอยู่เซิร์ฟเวอร์จะพยายามและทำซ้ำโดยใช้รายละเอียดที่นั่น "RESET SLAVE;" คำสั่งที่ระบุไว้ในคำตอบแรกจะกำจัดไฟล์master.info (เช่นเดียวกับไฟล์relay-log.info ) ตามที่กล่าวไว้ในคำตอบแรกคุณต้องแน่ใจว่าคุณไม่มีข้อมูลการกำหนดค่าในไฟล์ my.cnf ไม่เช่นนั้นในการรีสตาร์ทเซิร์ฟเวอร์ครั้งถัดไปการบันทึกจะเปิดใช้งานอีกครั้ง


5

หนึ่งคำตอบอยู่ที่นี่:

http://www.oops.net.br/~bac/bam/canopy_repl_setup.htm

* แก้ไขไฟล์คอนฟิกูเรชัน MySQL: /etc/my.cnf และลบ 7 บรรทัดต่อไปนี้ไปยังส่วนที่ชื่อ [mysqld]:

port=3306
log-bin
server-id=1
master-host=10.0.0.2
master-user=server_1_repl
master-password=server_1_passwd
master-port=3306*

รีสตาร์ท MySQL


4

ฉันเพิ่มสิ่งนี้ในคำตอบของ Harrison Fisk:

หากคุณใช้RESET SLAVE ALL;แล้วการรีสตาร์ทก็ไม่จำเป็น

นอกจากนี้คุณอาจต้องการเปิดใช้งานกิจกรรมที่ถูกปิดการใช้งานบนทาส:

select * from information_schema.events where status = 'SLAVESIDE_DISABLED';

สำหรับแต่ละคน:

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