MySQL ปัญหาการจำลองแบบง่าย: 'แสดงสถานะหลัก' สร้าง 'ชุดที่ว่างเปล่า'?


10

ฉันได้ตั้งค่าการจำลองแบบต้นแบบ MySQL (บน Debian 6.0.1) แล้วให้ทำตามคำแนะนำเหล่านี้อย่างซื่อสัตย์: http://www.neocodesoftware.com/replication/

ฉันได้เท่าที่:

mysql > show master status;

แต่น่าเสียดายที่ผลิตสิ่งต่อไปนี้แทนที่จะเป็นผลลัพธ์ที่มีประโยชน์

Empty set (0.00 sec)

บันทึกข้อผิดพลาดที่/var/log/mysql.errเป็นเพียงไฟล์ว่างเปล่าดังนั้นจึงไม่ให้เบาะแสใด ๆ แก่ฉัน

ความคิดใด ๆ

นี่คือสิ่งที่ฉันใส่ใน/etc/mysql/my.cnfเซิร์ฟเวอร์หนึ่ง (แก้ไขให้เหมาะสมสำหรับเซิร์ฟเวอร์อื่น):

server-id = 1
replicate-same-server-id = 0
auto-increment-increment = 2
auto-increment-offset = 1
master-host = 10.0.0.3
master-user = <myusername>
master-password = <mypass>
master-connect-retry = 60
replicate-do-db = fruit
log-bin = /var/log/mysql-replication.log
binlog-do-db = fruit

และฉันได้ตั้งค่าผู้ใช้และสามารถเชื่อมต่อจาก MySQL บนเซิร์ฟเวอร์ A ไปยังฐานข้อมูลบนเซิร์ฟเวอร์ B โดยใช้ชื่อผู้ใช้ / รหัสผ่าน / ipaddress ด้านบน


ฉันยังได้พยายามทำตามคำแนะนำง่ายที่: howtoforge.com/mysql_database_replication (บนเซิร์ฟเวอร์หนึ่งเพียงอย่างเดียว) และอีกครั้งเมื่อฉันได้รับการที่ฉันเห็นshow master status Empty setงงงัน!

เริ่มบริการ & ตรวจสอบอีกครั้ง หากบันทึกข้อผิดพลาดใด ๆ ที่สร้างขึ้นหลังจากรีสตาร์ทให้วางเช่นกัน

คำตอบ:


7

น่าสนใจฉันมี mysql ที่ทำงานบนพีซีของฉันโดยไม่ได้เปิดใช้งานบันทึกไบนารี ฉันทำต่อไปนี้:

Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 19
Server version: 5.5.12 MySQL Community Server (GPL)

Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> show master status;
Empty set (0.00 sec)

mysql> show binary logs;
ERROR 1381 (HY000): You are not using binary logging

mysql>

ดังที่แสดงเนื่องจาก MySQL แสดง "Empty Set" สำหรับ SHOW MASTER STATUS; เนื่องจากไม่ได้เปิดใช้งานการบันทึกแบบไบนารี เห็นได้ชัดว่าได้รับการกำหนดค่าที่ฉันมี

สิ่งแรกที่คุณควรทำคือตรวจสอบให้แน่ใจว่าบันทึกข้อผิดพลาดมีโฟลเดอร์เฉพาะ

[mysqld]
log-error=/var/log/mysql/mysql.err
log-bin = /var/log/mysql/mysql-replication.log

จากนั้นเรียกใช้สิ่งต่อไปนี้:

service mysql stop
mkdir /var/log/mysql
chown -R mysql:mysql /var/log/mysql
service mysql start

จากนั้นในไคลเอนต์ mysql เรียกใช้คำสั่ง SQL เหล่านี้

SHOW MASTER STATUS;
SHOW BINARY LOGS;

หากคุณได้รับผลลัพธ์เดียวกันกับที่ฉันเคยทำมาก่อน MySQL ไม่สามารถเขียนบันทึกไบนารีไปยังโฟลเดอร์ที่กำหนดได้ ภาวะที่กลืนไม่เข้าคายไม่ออกของคุณกลายเป็นสาเหตุที่ MySQL ไม่สามารถเขียนไปยัง / var / log

นี่ไม่ใช่คำตอบที่สมบูรณ์ แต่ฉันหวังว่านี่จะช่วยได้


การตั้งค่า / var / log ให้เป็นเจ้าของแบบเรียกซ้ำและกับกลุ่มของ mysql กำลังจะทำลายระบบลินุกซ์อย่างไม่ดีพอ ฉันขอแนะนำให้คนอย่าทำเช่นนี้ ให้เรียกใช้สิ่งนั้นโดยเฉพาะในไฟล์บันทึกที่ mysql พยายามจะเขียนลงไปและหากยังไม่ได้แตะที่นั่นก่อน
John Hunt

คุณรู้อะไรบ้าง @JohnHunt? คุณพูดถูก ฉันจะเปลี่ยนโฟลเดอร์
RolandoMySQLDBA

1

หากรุ่น Mysql ของคุณคือ> 5.0 การตั้งค่าการจำลองแบบของคุณเป็นโฮสต์, ผู้ใช้หลัก, รหัสผ่านหลักและอื่น ๆ ใน my.cnf ของคุณจะถูกละเว้น ใช้ CHANGE MASTER TO สำหรับการตั้งค่าการจำลองแบบเบื้องต้น

เปรียบเทียบhttp://dev.mysql.com/doc/refman/5.1/en/replication-howto-slaveinit.html


0

การตั้งค่าของคุณlog-binไม่ถูกต้องดังนั้น MySQL ไม่สามารถเขียนบันทึกแบบไบนารี มันไม่ได้เป็นชื่อไฟล์มันเป็นรูปแบบชื่อไฟล์บางส่วนซึ่ง MySQL จะเติมไดเรกทอรีและผนวกหมายเลขลำดับและนามสกุล การตั้งค่าปกติเป็นสิ่งที่ชอบ

log-bin=log-bin

ตรวจสอบคู่มือ


--log-bin=file_name( dev.mysql.com/doc/refman/5.7/en/… ) คู่มืออะไรระบุว่ามันไม่ใช่ชื่อไฟล์?
เตฟาน Vierkant
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.