วิธีการผูกเซิร์ฟเวอร์ MySQL กับที่อยู่ IP มากกว่าหนึ่ง?


260

มีวิธีลับในการผูก MySQL กับที่อยู่ IP มากกว่าหนึ่งที่อยู่หรือไม่?

เท่าที่ฉันเห็นพารามิเตอร์ที่อยู่ผูกใน my.cnf ไม่สนับสนุน IP มากกว่าหนึ่งและคุณไม่สามารถมีมากกว่าหนึ่งครั้ง

คำตอบ:


242

ไม่ไม่มี (ฉันเพิ่งตรวจสอบ 1 ชั่วโมงที่ผ่านมา) คุณสามารถแสดงความคิดเห็นที่อยู่ผูกใน my.cnf:

#skip-networking
#bind-address                   = 127.0.0.1

หากคุณต้องการเพียง 2 IP คุณจะต้องใช้ไฟร์วอลล์


31
แก้ไข. การเชื่อมถูก จำกัด ที่ 0, 1 หรือที่อยู่ IP ทั้งหมดบนเซิร์ฟเวอร์
โจ

7
อย่างไรก็ตามโปรดทราบว่าคุณสามารถเผยแพร่และให้บริการทั้งซ็อกเก็ตยูนิกซ์ท้องถิ่นและซ็อกเก็ตเครือข่ายโดยการระบุทั้งสองsocketและbind-addressตัวเลือก
Danorton

5
ยังคงเป็นจริง ณ วันนี้
Dennis Nolte

22
นั่นไร้สาระ
Phillipp

2
@AJP Mysql ปฏิบัติต่อ 'localhost' และ '127.0.0.1' แตกต่างกันในระบบสิทธิ์ ยืนยันที่นี่: ใช้ไฟล์ซ็อกเก็ต Unix หากคุณไม่ได้ระบุชื่อโฮสต์หรือหากคุณระบุชื่อโฮสต์เป็นชื่อโฮสต์ท้องถิ่น
Christian Lescuyer

78

การผูกกับ 127.0.0.x จะไม่ทำให้อุปกรณ์ทั้งหมดสามารถใช้ได้ในพื้นที่เท่านั้น หากคุณต้องการให้มันพร้อมใช้งานสำหรับทุกอินเตอร์เฟสคุณควรใช้ 0.0.0.0 หากคุณต้องการเข้าถึงมากกว่าหนึ่ง แต่น้อยกว่าอินเทอร์เฟซทั้งหมดคุณควรผูกกับ 0.0.0.0 และไฟร์วอลล์ปิดอินเทอร์เฟซที่คุณไม่ต้องการเข้าถึงผ่าน

นอกจากนี้ในการรักษาความปลอดภัยชั้นที่สองคุณควรตรวจสอบให้แน่ใจว่าผู้ใช้ MySQL ทั้งหมดของคุณมีฟิลด์โฮสต์ตั้งไว้เป็นอย่างอื่นนอกเหนือจาก% (เช่นโฮสต์ใด ๆ )


1
ถ้าคุณไม่มีเครือข่ายสแต็กที่แตกคุณไม่สามารถผูกพอร์ต TCP ไปยังที่อยู่ 0.0.0.0
John Gardeniers

26
คุณสามารถผูกกับ 0.0.0.0 คุณไม่สามารถกำหนดเส้นทางได้ หากคุณอยู่บน Linux (หรือบน Windows เพียงติดตั้ง netcat สำหรับ windows) ลอง: ในเทอร์มินัลหนึ่ง: nc -l 0.0.0.0 4321 และในเทอร์มินัลที่สอง: telnet <IP ของอินเทอร์เฟซใด ๆ ที่คอมพิวเตอร์ของคุณมี> 4321 และ จะเชื่อมต่อกับมัน
Panther สีเทา

ตามที่ฉันได้พูดไปแล้วเว้นแต่ว่าคุณจะมีเครือข่ายที่แตกหัก ...
John Gardeniers

1
@JohnGardeniers นั่นคือเหตุผลที่มันเป็นใน IP ลินุกซ์ (7) หน้าคนที่กำหนดไว้ภายใต้ที่อยู่พิเศษ: INADDR_ANY (0.0.0.0) means any address for binding;?
ebyrob

2
บน Debian ให้สร้างไฟล์/etc/mysql/conf.d/bindaddress.cnfไฟล์ที่มีเนื้อหา[mysqld] \n bind-address = 0.0.0.0
Yves Martin

41

คุณไม่สามารถผูกกับที่อยู่ IP ได้มากกว่าหนึ่งที่อยู่ แต่คุณสามารถผูกกับที่อยู่ IP ที่มีทั้งหมดแทน ถ้าเป็นเช่นนั้นเพียงใช้0.0.0.0ที่อยู่ที่มีผลผูกพันในไฟล์กำหนดค่า MySQL ของคุณ (เช่น /etc/mysql/my.cnf) ดังต่อไปนี้:

bind-address    = 0.0.0.0

หากที่อยู่คือ 0.0.0.0 เซิร์ฟเวอร์ยอมรับการเชื่อมต่อ TCP / IP บนอินเตอร์เฟสเซิร์ฟเวอร์โฮสต์ IPv4 ทั้งหมด

นอกจากนี้หากที่อยู่นั้น::เซิร์ฟเวอร์ยอมรับการเชื่อมต่อ TCP / IP บนเซิร์ฟเวอร์โฮสต์ทั้งหมดอินเตอร์เฟส IPv4 และ IPv6 ใช้ที่อยู่นี้เพื่ออนุญาตการเชื่อมต่อทั้ง IPv4 และ IPv6 บนอินเทอร์เฟซเซิร์ฟเวอร์ทั้งหมด

หรือคุณสามารถคอมbind-address=เม้นต์โดยสิ้นเชิงดังนั้นมันจะผูกกับที่อยู่ทั้งหมด แต่ให้แน่ใจว่าคุณไม่ได้skip-networkingเปิดใช้งานใน my.cnf ของคุณหากคุณต้องการอนุญาตการเชื่อมต่อระยะไกลเช่นกัน (อ่านเพิ่มเติม: MySQL: อนุญาตการเชื่อมต่อทั้งระยะไกลและท้องถิ่น )

หลังจากเปลี่ยนที่อยู่รวมแล้วอย่าลืมรีสตาร์ทเซิร์ฟเวอร์ MySQL ด้วย:

sudo service mysql restart

ในที่สุดคุณสามารถพิจารณาที่จะเรียกใช้ MySQL หลายอินสแตนซ์ในเครื่องเดียว (พอร์ตที่ต่างกัน) ด้วยการจำลองแบบ Master / Slave การจำลองแบบช่วยให้ข้อมูลจากเซิร์ฟเวอร์ฐานข้อมูล MySQL หนึ่งตัว (ต้นแบบ) สามารถคัดลอกไปยังเซิร์ฟเวอร์ฐานข้อมูล MySQL หนึ่งตัวหรือมากกว่า (ทาส)

อ่านเพิ่มเติม:


มันใช้งานได้ดี เพียงจำไว้ว่าให้ตรวจสอบว่าผู้ใช้ทุกคนได้รับอนุญาตให้เชื่อมต่อจากที่ 2, 3 หรือที่อยู่ IP ใดก็ตาม
gies0r

21

ไม่คุณไม่สามารถ. หน้าที่คุณลิงก์ไปยังสถานะที่ชัดเจน:

ที่อยู่ IP ที่จะผูกไว้ สามารถเลือกได้เพียงที่อยู่เดียวเท่านั้น หากระบุตัวเลือกนี้หลายครั้งระบบจะใช้ที่อยู่สุดท้ายที่ให้ไว้

หากไม่ได้ระบุที่อยู่หรือ 0.0.0.0 เซิร์ฟเวอร์จะรับฟังบนอินเทอร์เฟซทั้งหมด


12

ตามที่คนอื่น ๆ ตอบแล้วยังไม่มีวิธีผูกมัดกับอินเตอร์เฟซมากกว่าหนึ่งรายการอย่างเด็ดขาด

Linux มีเครื่องมือ TCP บางตัวที่ทำให้เป็นไปได้ ในการตั้งค่านี้คุณจะต้องกำหนดค่า mysql ให้รับฟังบน 127.0.0.1 จากนั้นใช้redirเพื่อแสดงบนอินเตอร์เฟสโดยพลการ

ฉันใช้สิ่งนี้เพื่อช่วยผู้ใช้กล่องเสมือนดู mysql ติดตั้งบนเครื่องโฮสต์

redir --laddr=192.168.33.1 --lport=3306 --caddr=127.0.0.1 --cport=3306 &

หมายเหตุ MySQL> = 8.0.13 อนุญาตให้เชื่อมโยงมากกว่าหนึ่งอินเตอร์เฟส
txyoji

6

ฉันคิดว่าคำถามของคุณเกี่ยวข้องกับข้อผิดพลาดนี้http://bugs.mysql.com/bug.php?id=14979 รายงานข้อผิดพลาดแนะนำวิธีแก้ไขปัญหาบางอย่าง


คำขอฟีเจอร์ MySQL ย้อนกลับไปตั้งแต่ปี 2005!
Tonin

5

ก่อนหน้า MySQL 8.0.13 - ผูกที่อยู่ยอมรับค่าที่อยู่เดียวซึ่งอาจระบุที่อยู่ IP ที่ไม่ใช่ wildcard เดียวหรือชื่อโฮสต์หรือหนึ่งในรูปแบบที่อยู่ของสัญลักษณ์ตัวแทนที่อนุญาตให้รับฟังในอินเตอร์เฟซเครือข่ายหลาย (*, 0.0 .0.0 หรือ: :)

ในฐานะของ MySQL 8.0.13, - ผูกอยู่ยอมรับค่าเดียวตามที่อธิบายไว้หรือรายการของค่าคั่นด้วยเครื่องหมายจุลภาค เมื่อตัวเลือกตั้งชื่อรายการหลายค่าแต่ละค่าจะต้องระบุที่อยู่ IP หรือชื่อโฮสต์ที่ไม่ใช่อักขระตัวแทนเดียว ไม่มีใครสามารถระบุรูปแบบที่อยู่ของสัญลักษณ์แทน (*, 0.0.0.0 หรือ: :)

ที่มา: https://dev.mysql.com/doc/refman/8.0/en/server-options.html


3

ในmy.cnfเปลี่ยนแปลง (ปกติ /etc/mysql/my.cnf บน Linux หรือ Windows ตรวจสอบนี้คำตอบ

bind-address                   = 127.0.0.1

ไปยัง

bind-address                   = 0.0.0.0

จากนั้นรีสตาร์ท mysql (บนบริการ Ubuntu mysql รีสตาร์ท ) บน windows โดยปกติบริการรีสตาร์ทผ่านWin + R services.msc

0.0.0.0 บอกให้ผูก IP ที่มีอยู่ทั้งหมดพร้อมกับพอร์ตที่กำหนดใน my.cnf

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