โฮสต์ 'xxx.xx.xxx.xxx' ไม่ได้รับอนุญาตให้เชื่อมต่อกับเซิร์ฟเวอร์ MySQL นี้


668

มันควรจะตายง่าย แต่ฉันไม่สามารถทำงานให้กับชีวิตของฉันได้
ฉันแค่พยายามเชื่อมต่อระยะไกลกับเซิร์ฟเวอร์ MySQL ของฉัน

เชื่อมต่อเป็น

mysql -u root -h localhost -p  

ทำงานได้ดี แต่พยายาม

mysql -u root -h 'any ip address here' -p

ล้มเหลวด้วยข้อผิดพลาด

ERROR 1130 (00000): Host ''xxx.xx.xxx.xxx'' is not allowed to connect to this MySQL server

ในmysql.userตารางมีรายการเดียวกันสำหรับผู้ใช้ 'root' ที่มีโฮสต์ 'localhost' และอีกรายการหนึ่งที่มีโฮสต์ '%'

ฉันใกล้ถึงจุดสิ้นสุดแล้วและไม่รู้จะทำอย่างไรต่อ ยินดีต้อนรับความคิดใด ๆ


ไม่สามารถลงชื่อเข้าใช้ในฐานะรูทในสถานการณ์ส่วนใหญ่เนื่องจากข้อควรระวังด้านความปลอดภัย ..
AO_

คำตอบ:


816

อาจเป็นการป้องกันความปลอดภัย คุณสามารถลองเพิ่มบัญชีผู้ดูแลระบบใหม่ได้:

mysql> CREATE USER 'monty'@'localhost' IDENTIFIED BY 'some_pass';
mysql> GRANT ALL PRIVILEGES ON *.* TO 'monty'@'localhost'
    ->     WITH GRANT OPTION;
mysql> CREATE USER 'monty'@'%' IDENTIFIED BY 'some_pass';
mysql> GRANT ALL PRIVILEGES ON *.* TO 'monty'@'%'
    ->     WITH GRANT OPTION;

แม้ว่า Pascal และคนอื่น ๆ จะสังเกตเห็นว่าเป็นความคิดที่ดีที่จะมีผู้ใช้ที่มีการเข้าถึงชนิดนี้เปิดให้ IP ใด ๆ หากคุณต้องการผู้ใช้ที่เป็นผู้ดูแลระบบให้ใช้รูทแล้วปล่อยไว้บน localhost สำหรับการดำเนินการอื่น ๆ ให้ระบุสิทธิ์ที่คุณต้องการและ จำกัด การเข้าถึงของผู้ใช้ตามที่ Pascal ได้แนะนำไว้ด้านล่าง

แก้ไข:

จากคำถามที่พบบ่อย MySQL:

หากคุณไม่สามารถหาสาเหตุที่ทำให้คุณปฏิเสธการเข้าถึงให้ลบรายการทั้งหมดที่มีค่าโฮสต์ที่มีอักขระตัวแทน (ตารางที่มีอักขระ '%' หรือ '_') ออกจากตารางผู้ใช้ ข้อผิดพลาดที่พบบ่อยมากคือการแทรกรายการใหม่ด้วย Host = '%' และ User = 'some_user' โดยคิดว่าสิ่งนี้ช่วยให้คุณระบุ localhost เพื่อเชื่อมต่อจากเครื่องเดียวกัน เหตุผลที่ใช้ไม่ได้คือสิทธิ์เริ่มต้นรวมรายการที่มี Host = 'localhost' และ User = '' เนื่องจากรายการนั้นมีค่าโฮสต์ 'localhost' ที่เฉพาะเจาะจงมากกว่า '%' จึงถูกใช้เพื่อตั้งค่ารายการใหม่เมื่อเชื่อมต่อจาก localhost! ขั้นตอนที่ถูกต้องคือการแทรกรายการที่สองด้วย Host = 'localhost' และ User = 'some_user' หรือเพื่อลบรายการด้วย Host = 'localhost' และ User = '' หลังจากลบรายการอย่าลืมออกคำสั่งล้างสิทธิในการโหลดตารางทุน ดูที่หัวข้อ 5.4.4,“ การควบคุมการเข้าถึง, ขั้นตอนที่ 1: การตรวจสอบการเชื่อมต่อ”


17
เยี่ยมมาก Yannick แต่ฉันจะไม่แนะนำให้เขาให้สิทธิ์ทั้งหมดแก่ผู้ใช้ที่ไม่ใช่รูท บางทีชุดที่ลดลง?
Corey Ballou

3
แน่นอนว่านี่ไม่ใช่ความคิดที่ดี แต่การอนุญาตให้ 'root' เชื่อมต่อจากโฮสต์ทั้งหมดนั้นเหมือนกันทั้งหมดเนื่องจากอยู่ในระดับสิทธิ์พิเศษเดียวกัน
Yannick Motton

2
ฉันคิดว่าคุณพลาดจุด Pascal ของฉัน ประเด็นก็คือผู้ใช้ 'รูท' มีสิทธิ์เหล่านั้นอยู่แล้วและเขาต้องการให้ไอพีรับรองความถูกต้องใด ๆ ในฐานะผู้ใช้นั้น ดังนั้นหากนี่คือสิ่งที่เขาต้องการจริงๆตัวอย่างเริ่มต้นของการสร้างผู้ใช้ผู้ดูแลระบบใหม่ (ซึ่งมีสิทธิ์เหมือนกันทุกประการ) เป็นทางเลือกแทนสิ่งที่เขาพยายาม
Yannick Motton

2
ถูกต้องแล้วยานนิคฉันอ่านเร็วและจะลบความคิดเห็นของฉัน อย่างไรก็ตาม AFAIK การอนุญาตทำงานได้ดีใน MySQL ดังนั้น: 1. OP อาจแก้ไขตารางการให้สิทธิ์ด้วยตนเองแล้วต้องล้างสิทธิ์ 2. บางทีเขาอาจไม่ได้ใช้ไวยากรณ์การให้สิทธิ์ที่เหมาะสมสำหรับรูต การเพิ่มผู้ใช้ที่เป็นผู้ดูแลระบบคนอื่นอาจเป็นการแก้ไขปัญหา แต่ก็ไม่สามารถแก้ปัญหา IMHO ที่แท้จริงได้
Pascal Thivent

1
ฉันรู้สึกว่าการให้สิทธิ์การเข้าถึงจากโฮสต์ทั้งหมดเพื่อรูทไม่ใช่วิธีการแก้ปัญหาที่เหมาะสม แทนที่จะสร้างผู้ใช้ใหม่และได้รับชุดสิทธิ์ลดลงชุดที่ฉันใช้จะถูกอธิบายว่า 'DBManager' บน MySQL Workbench ฉันอนุญาตเฉพาะการเข้าถึงจากโฮสต์บางกลุ่มในเครือข่ายท้องถิ่นของฉันโดยเฉพาะ 192.168.0%
Gustavo Guevara

271

หนึ่งมีการสร้างnew MySQL Userและกำหนดสิทธิ์ดังต่อไปนี้ในQuery promptผ่าน phpMyAdmin หรือพร้อมรับคำสั่ง:

CREATE USER 'username'@'localhost' IDENTIFIED BY 'password';

GRANT ALL PRIVILEGES ON *.* TO 'username'@'localhost' WITH GRANT OPTION;

CREATE USER 'username'@'%' IDENTIFIED BY 'password';

GRANT ALL PRIVILEGES ON *.* TO 'username'@'%' WITH GRANT OPTION;

FLUSH PRIVILEGES;

เมื่อเสร็จสิ้นการสอบถามทั้งสี่ข้อแล้วก็ควรเชื่อมต่อด้วย username / password


5
ต้องรีสตาร์ท mysql หลังจากทำตามขั้นตอนด้านบนเพื่อให้ใช้งานได้สำหรับฉัน
ด่านเก็บค่าธรรมเนียม

คุณต้องสร้างชื่อผู้ใช้ @ localhost หรือไม่ ไม่เพียงพอหากคุณเพิ่งสร้างชื่อผู้ใช้ @%? ฉันหมายความว่าถ้าคุณเพิ่งสร้างชื่อผู้ใช้ @% คุณจะไม่สามารถเชื่อมต่อกับผู้ใช้นั้นจาก localhost ได้หรือไม่
โซริน Postelnicu

1
ใช่การสร้าง@localhostจะทำให้รู้สึกว่าสิทธิพิเศษแตกต่างกัน แต่ที่นี่พวกเขาเหมือนกันและอาจจะสับสนมากกว่าสิ่งใด ๆ (เช่นการเปลี่ยนรหัสผ่านที่หนึ่งไม่ได้รู้ว่ามีอยู่อื่นและเข้าสู่ระบบของคุณอาจจะกดหนึ่ง )
Bratchley

ในฐานะผู้เริ่มต้นมันช่วยฉันจริงๆ
มูฮัมหมัด

1
ขอบคุณมันแก้ "SQLSTATE [HY000] [1130] โฮสต์ 'DESKTOP-xxx.xx' ไม่ได้รับอนุญาตให้เชื่อมต่อกับเซิร์ฟเวอร์ MariaDB นี้" ในแอปพลิเคชัน laravel containerized ใน windows
Zulqarnain

117

ข้อความแสดงข้อผิดพลาดของฉันคล้ายกันและบอกว่า " โฮสต์ XXX ไม่ได้รับอนุญาตให้เชื่อมต่อกับเซิร์ฟเวอร์ MySQL นี้ " แม้ว่าฉันจะใช้รูทก็ตาม ต่อไปนี้เป็นวิธีการตรวจสอบให้แน่ใจว่ารูทนั้นมีสิทธิ์ที่ถูกต้อง

การตั้งค่าของฉัน :

  • Ubuntu 14.04 LTS
  • MySQL v5.5.37

สารละลาย

  1. เปิดไฟล์ภายใต้ 'etc / mysql / my.cnf'
  2. ตรวจสอบ:

    • พอร์ต (โดยค่าเริ่มต้นนี่คือ 'พอร์ต = 3306')
    • bind-address (โดยค่าเริ่มต้นนี่คือ 'bind-address = 127.0.0.1' ถ้าคุณต้องการที่จะเปิดให้ทุกคนเพียงแค่แสดงความคิดเห็นบรรทัดนี้สำหรับตัวอย่างของฉันฉันจะบอกว่าเซิร์ฟเวอร์ที่แท้จริงคือ 10.1.1.7)
  3. ตอนนี้เข้าถึงฐานข้อมูล MySQL บนเซิร์ฟเวอร์จริงของคุณ (บอกว่าที่อยู่ระยะไกลของคุณคือ 123.123.123.123 ที่พอร์ต 3306 ในฐานะผู้ใช้ 'รูท' และฉันต้องการเปลี่ยนสิทธิ์ในฐานข้อมูล 'dataentry' โปรดจำไว้ว่าให้เปลี่ยนที่อยู่ IP พอร์ตและชื่อฐานข้อมูล การตั้งค่าของคุณ)

    mysql -u root -p
    Enter password: <enter password>
    mysql>GRANT ALL ON *.* to root@'123.123.123.123' IDENTIFIED BY 'put-your-password';
    mysql>FLUSH PRIVILEGES;
    mysql>exit
    
  4. sudo service mysqld ทำการรีสตาร์ท

  5. ตอนนี้คุณควรจะสามารถเชื่อมต่อระยะไกลกับฐานข้อมูลของคุณได้แล้ว ตัวอย่างเช่นฉันใช้ MySQL Workbench และวางใน 'ชื่อโฮสต์: 10.1.1.7', 'พอร์ต: 3306', 'ชื่อผู้ใช้: ราก'

1
คุณสามารถข้ามuse dataentryบรรทัด (เนื่องจากคนส่วนใหญ่จะไม่ได้สร้างฐานข้อมูลนั้น)
Jedidja

3
ฉันสามารถทำได้โดยไม่ต้องเริ่มmysqlบริการใหม่ในตอนท้าย
Ryan Tuck

5
FLUSH PRIVILEGESควรอนุญาตให้คุณไม่จำเป็นต้องรีสตาร์ท
อดัม B

สิ่งนี้ทำงานสำหรับฉันสำหรับ MySQL 5.5 บน Windows 10 ที่มีสิทธิ์ล้างโดยไม่ต้องเริ่มบริการใหม่ บน Windows คุณสมบัติของบริการควรระบุไฟล์ my.ini ที่ใช้สำหรับการกำหนดค่า (คุณสมบัติ | ทั่วไป | เส้นทางไปยังการปฏิบัติการ)
FreeText

ฉันสันนิษฐานว่าโดยการระบุ bind-address = "0.0.0.0" มันจะฟังบนอินเทอร์เฟซทั้งหมดและการเชื่อมต่อระยะไกลจะทำงานได้ แต่ฉันผิด ใช่ netstat แสดงให้เห็นว่า mysql กำลังฟัง 0.0.0.0 (อินเทอร์เฟซทั้งหมด) แต่ฉันได้รับข้อผิดพลาดในชื่อคำถาม เมื่อฉันลบบรรทัด bind-address ออกแล้วมันก็เริ่มทำงานได้ แปลก.
Henno

72

คุณต้องให้สิทธิ์การเข้าถึงแก่ผู้ใช้จากชื่อโฮสต์ใด ๆ

นี่คือวิธีที่คุณเพิ่มสิทธิ์ใหม่จาก phpmyadmin

ไปที่สิทธิ์> เพิ่มผู้ใช้ใหม่

ป้อนคำอธิบายรูปภาพที่นี่

เลือกโฮสต์ใดก็ได้สำหรับชื่อผู้ใช้ที่ต้องการ

ป้อนคำอธิบายรูปภาพที่นี่


มีประโยชน์มากขอบคุณครับ
Anderson Laverde

65

เพียงทำตามขั้นตอนต่อไปนี้:

1a) เชื่อมต่อกับ mysql (ผ่าน localhost)

mysql -uroot -p

1b) ถ้าเซิร์ฟเวอร์ myslq ทำงานใน Kubernetes (K8s) และถูกเข้าถึงผ่าน NodePort

kubectl exec -it [pod-name] -- /bin/bash
mysql -uroot -p

2) สร้างผู้ใช้

CREATE USER 'user'@'%' IDENTIFIED BY 'password';

3) ให้สิทธิ์

 GRANT ALL PRIVILEGES ON *.* TO 'user'@'%' WITH GRANT OPTION;

4) ล้างสิทธิ์

FLUSH PRIVILEGES;

4
ข้อผิดพลาด 1,045 (28000): การเข้าถึงถูกปฏิเสธสำหรับผู้ใช้ 'root' @ 'localhost' (ใช้รหัสผ่าน) Y
Gank

11
ควรจะเป็น *.* ?
sgarg

26

ข้อความ*Host ''xxx.xx.xxx.xxx'' is not allowed to connect to this MySQL serverนี้เป็นการตอบกลับจากเซิร์ฟเวอร์ MySQL ไปยังไคลเอนต์ MySQL สังเกตว่ามันส่งคืนที่อยู่ IP อย่างไรและไม่ใช่ชื่อโฮสต์

หากคุณกำลังพยายามเชื่อมต่อด้วยmysql -h<hostname> -u<somebody> -pและจะส่งคืนข้อความนี้ด้วยที่อยู่ IP แสดงว่าเซิร์ฟเวอร์ MySQL ไม่สามารถทำการค้นหาแบบย้อนกลับบนไคลเอนต์ได้ สิ่งนี้มีความสำคัญเนื่องจากเป็นวิธีที่จะแมปไคลเอนต์ MySQL กับเงินช่วยเหลือ

ตรวจสอบให้แน่ใจว่าคุณสามารถทำnslookup <mysqlclient>จากเซิร์ฟเวอร์ MySQL หากวิธีนี้ใช้ไม่ได้แสดงว่าไม่มีรายการในเซิร์ฟเวอร์ DNS หรือคุณสามารถใส่รายการในไฟล์โฮสต์ของเซิร์ฟเวอร์ MySQL ( <ipaddress> <fullyqualifiedhostname> <hostname><- ลำดับที่นี่อาจมีความสำคัญ)

รายการในไฟล์โฮสต์ของเซิร์ฟเวอร์ของฉันทำให้การค้นหาแบบย้อนกลับของไคลเอนต์ MySQL แก้ไขปัญหานี้ได้อย่างมาก


1
"เป็นการตอบกลับจากเซิร์ฟเวอร์ MySQL ไปยังไคลเอนต์ MySQL" ขอบคุณฉันสงสัยว่าข้อผิดพลาดมาจากที่ใดเครื่องของฉันหรือเซิร์ฟเวอร์ ฉันมีข้อผิดพลาด "ข้อผิดพลาด 1130 (HY000):" ฯลฯ
PJ Brunet

20

วิธีง่าย ๆ :

Grant All Privileges ON *.* to 'USER_NAME'@'%' Identified By 'YOUR_PASSWORD'; 

แล้วก็

FLUSH PRIVILEGES;

ทำ!


% หมายถึงอะไร
dataviews

1
มันเหมือนทุกสิ่ง คุณสามารถยกตัวอย่างเช่น: WHERE CustomerName LIKE 'a%'- ค้นหาค่าใด ๆ ที่ขึ้นต้นด้วย "a"
user5510975

16

หากคุณแก้ไขตารางการให้สิทธิ์ด้วยตนเอง (โดยใช้ INSERT, UPDATE, ฯลฯ ) คุณควรดำเนินการFLUSH PRIVILEGESคำสั่งเพื่อแจ้งให้เซิร์ฟเวอร์รีโหลดตารางการให้สิทธิ์

PS: ผมจะไม่แนะนำให้อนุญาตใด ๆ ที่เป็นเจ้าภาพในการเชื่อมต่อสำหรับการใด ๆของผู้ใช้ (โดยเฉพาะอย่างยิ่งไม่ได้rootใช้งาน) หากคุณกำลังใช้ mysql สำหรับไคลเอ็นต์ / เซิร์ฟเวอร์แอปพลิเคชันให้เลือกที่อยู่เครือข่ายย่อย หากคุณกำลังใช้ mysql กับเว็บเซิร์ฟเวอร์หรือแอพพลิเคชันเซิร์ฟเวอร์ให้ใช้ IP ที่ระบุ


4

เพียงใช้ส่วนต่อประสานที่จัดทำโดยเครื่องมือ GUI ของ MySql (SQLyog):

คลิกที่ตัวจัดการผู้ใช้: ป้อนคำอธิบายรูปภาพที่นี่

ตอนนี้ถ้าคุณต้องการให้สิทธิ์การเข้าถึงสำหรับพีซีระยะไกลอื่นใด ๆ เพียงตรวจสอบให้แน่ใจว่าเช่นเดียวกับในภาพด้านล่างค่าฟิลด์โฮสต์คือ% (ซึ่งเป็นสัญลักษณ์แทน)

ป้อนคำอธิบายรูปภาพที่นี่


4

ส่วนใหญ่คำตอบที่นี่แสดงให้คุณสร้างผู้ใช้ที่มีสองค่าโฮสต์หนึ่งสำหรับlocalhost, %และหนึ่งสำหรับ

โปรดทราบว่ายกเว้นผู้ใช้ localhost ในตัวเช่นรูทคุณไม่จำเป็นต้องทำสิ่งนี้ หากคุณเพียงต้องการสร้างผู้ใช้ใหม่ที่สามารถเข้าสู่ระบบได้จากทุกที่คุณสามารถใช้

CREATE USER 'myuser'@'%' IDENTIFIED BY 'mypassword';
GRANT <whatever privileges are appropriate> ON <relevant tables> TO myuser;

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


3

วิธีง่าย ๆ คือการเข้าสู่ phpmyadmin ด้วยบัญชีรูทมีฐานข้อมูล goto mysql และเลือกตารางผู้ใช้แก้ไขบัญชีรูทและในฟิลด์โฮสต์เพิ่ม% wild card และจากนั้นผ่านสิทธิ์ล้าง ssh

 FLUSH PRIVILEGES;

นี้ช่วยให้ฉันรวมกับนี้ให้สิทธิ์ทั้งหมดบน เป็น 'root' @ '%' ด้วย GRANT OPTION
Lanklaas

2

หากนี่คือการติดตั้ง mysql ล่าสุดจากนั้นก่อนที่จะเปลี่ยนแปลงสิ่งอื่นใดลองดำเนินการคำสั่งนี้แล้วลองอีกครั้ง:

flush privileges;

เพียงอย่างเดียวนี้แก้ไขปัญหาสำหรับฉันใน Ubuntu 16.04, mysql 5.7.20 YMMV


2

หาวิธีที่ดีกว่าในการทำเช่นนั้นจากแผงควบคุมโฮสติ้งของคุณ (ฉันใช้ DirectAdmin ที่นี่)

เพียงไปที่ DB เซิร์ฟเวอร์เป้าหมายในแผงควบคุมของคุณในกรณีของฉัน: การจัดการ MySQL -> เลือก DB ของคุณ -> คุณจะพบ: "Access Hosts" เพียงเพิ่มโฮสต์ระยะไกลของคุณที่นี่และใช้งานได้ทันที! ป้อนคำอธิบายรูปภาพที่นี่

ฉันเดาว่ามีตัวเลือกที่คล้ายกันใน C.panels อื่น ๆ เช่น plesk เป็นต้น

ฉันหวังว่ามันจะเป็นประโยชน์กับคุณเช่นกัน


2

ไม่มีคำตอบใดที่ใช้ได้สำหรับฉัน หลังจากการวิจัยมากมายฉันพบวิธีแก้ปัญหา แม้ว่าฉันจะมาสายนี่อาจช่วยคนอื่นในอนาคต

ล็อกอินเข้าสู่เซิร์ฟเวอร์ SQL ของคุณจากเทอร์มินัล

 mysql -u root -p
 -- root password
GRANT ALL ON *.* to root@'XX.XXX.XXX.XX' IDENTIFIED BY 'password';

สิ่งนี้ควรแก้ปัญหาการอนุญาต

ก่อนแก้ไขข้อผิดพลาด

หลังจากแก้ปัญหาแล้ว

การเข้ารหัสที่มีความสุข !!


1

สิ่งที่คุณสามารถทำได้คือเปิดไฟล์ mysql.cfg และคุณต้องเปลี่ยน Bind-address เป็นสิ่งนี้

bind-address = 127.0.0.1

จากนั้นรีสตาร์ท mysql แล้วคุณจะสามารถเชื่อมต่อเซิร์ฟเวอร์นั้นกับสิ่งนี้ได้

ดูนี่คุณสามารถมีรูปแบบความคิดที่

นี่คือโซลที่แท้จริง


3
สิ่งนี้เกี่ยวข้อง แต่ไม่ใช่ปัญหาเดียวกัน ข้อผิดพลาดที่ได้รับมา แต่เดิมระบุว่าลูกค้ากำลังเชื่อมต่อกับเซิร์ฟเวอร์ MySQL ได้สำเร็จ แต่จากนั้นการตรวจสอบสิทธิ์ล้มเหลว หาก bind-address ถูกตั้งค่าเป็น 127.0.0.1 คุณจะได้รับการเชื่อมต่อถูกปฏิเสธข้อผิดพลาดแทน
axon

แต่นี่คือที่อยู่ซึ่งจะอนุญาตให้โฮสต์ทั้งหมดเชื่อมต่อกับเซิร์ฟเวอร์ได้หรือไม่
Kishan Bheemajiyani

แต่การให้สิทธิ์ทั้งหมดแก่ผู้ใช้จะไม่เป็นตัวเลือกที่ชาญฉลาดสำหรับ bcoz นั้นหากคุณมีผู้ใช้ไคลเอ็นต์และคุณไม่ได้รับอนุญาตให้สร้างผู้ใช้ที่ได้รับอนุญาตทั้งหมดแล้วโซลูชันจะเป็นอย่างไร
Kishan Bheemajiyani

1

หากคุณกำลังทำงานบน Windows ทางออกที่ง่ายคือเรียกใช้วิซาร์ดการตั้งค่าเซิร์ฟเวอร์อินสแตนซ์ MySQL อยู่ในกลุ่ม MYSQL ของคุณในเมนูเริ่มต้น ในวินาทีจากหน้าจอสุดท้ายให้คลิกกล่องที่ระบุว่า "อนุญาตให้เข้าถึงรูทจากเครื่องระยะไกล"


1

หากคุณมี WAMP Server + Windows 10 และคุณใช้เพื่อการพัฒนามากกว่าคลิกขวาที่ไอคอน Wamp => Wamp Settings=>Check Allow Virtual Hosts other than 127* ป้อนคำอธิบายรูปภาพที่นี่


0

ฉันกำลังเผชิญกับปัญหาเดียวกัน ฉันแก้ไขมันใน 2 นาทีสำหรับฉันฉันแค่รายการ ip สีขาวผ่าน cPanel

สมมติว่าคุณกำลังพยายามเชื่อมต่อฐานข้อมูลของเซิร์ฟเวอร์ B จากเซิร์ฟเวอร์ A ไปที่เซิร์ฟเวอร์ B Cpanel-> Remote MySQL-> ป้อน Server A ที่อยู่ IP และนั่นแหล่ะ


0

คำตอบนี้อาจช่วยคน ...

คำตอบทั้งหมดนี้ไม่ได้ช่วยฉันรู้ว่าฉันลืมตรวจสอบสิ่งสำคัญอย่างหนึ่ง .. พอร์ต :)

ฉันมี mysql ที่ทำงานในที่เก็บนักเทียบท่าที่ทำงานบนพอร์ตอื่น ฉันชี้ไปที่เครื่องโฮสต์ของฉันที่พอร์ต 3306 ซึ่งฉันมีเซิร์ฟเวอร์ mysql ทำงานอยู่ ที่เก็บของฉันตีแผ่เซิร์ฟเวอร์ที่พอร์ต 33060 ดังนั้นตลอดเวลานี้ฉันกำลังดูเซิร์ฟเวอร์ผิด! DOH!


0
CREATE USER 'username'@'localhost' IDENTIFIED BY 'password';
FLUSH PRIVILEGES;

ข้อผิดพลาดนี้เนื่องจากไม่มีรหัสผ่านไปที่รูทและอาจเกิดขึ้นกับคุณเมื่อคุณพยายามเชื่อมต่อจากภายนอก


0

CPANEL solution

ไปที่ Cpanel ค้นหา MySQL ระยะไกล เพิ่ม IP ในฟิลด์อินพุต:

โฮสต์ (อนุญาตให้ใช้สัญลักษณ์แทน%)

แสดงความคิดเห็นเพื่อจดจำ IP ที่เป็น นั่นมันสำหรับฉัน


0

สิ่งนี้ใช้ได้สำหรับการเชื่อมต่อ mysql ระยะไกลในอนาคต!

    sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf

นำทางไปยังบรรทัดที่ขึ้นต้นด้วยคำสั่ง bind-address ควรมีลักษณะเช่นนี้:

    bind-address            = 0.0.0.0

เข้าสู่ระบบ mysql ของคุณในฐานะ root terminal

    mysql -u root -p
    -- root password

    CREATE USER 'username'@'localhost' IDENTIFIED BY 'password';

    GRANT ALL PRIVILEGES ON *.* TO 'username'@'localhost' WITH GRANT OPTION;

    CREATE USER 'username'@'%' IDENTIFIED BY 'password';

    GRANT ALL PRIVILEGES ON *.* TO 'username'@'%' WITH GRANT OPTION;

    FLUSH PRIVILEGES;

    EXIT;

ในที่สุดก็อนุญาตให้เครื่องได้รับอนุญาตพิเศษเพื่อเชื่อมต่อกับฐานข้อมูลจากระยะไกลด้วยคำสั่งต่อไป

    sudo ufw allow from remote_IP_address to any port 3306

-1

ในกรณีที่มีคนประสบปัญหานี้กำลังประสบปัญหาจากภายใน SQLyog สิ่งนี้เกิดขึ้น:

ฉันเชื่อมต่อกับฐานข้อมูลระยะไกล (จากภายใน SQLyog) และทำงานเป็นเวลาหลายชั่วโมง หลังจากนั้นฉันออกจากระบบไปหลายนาทีแล้วจึงกลับมาทำงานต่อ - ข้อผิดพลาด 1130 ! ฉันไม่ได้ลองทำงานเลย การรีสตาร์ท SQLyog ไม่สามารถแก้ไขได้ จากนั้นฉันรีสตาร์ทระบบ - มันยังไม่ทำงาน

ดังนั้นฉันจึงลองเชื่อมต่อจากเครื่อง - มันใช้งานได้ จากนั้นลองใหม่ใน SQLyog ... และใช้งานได้ ฉันไม่สามารถอธิบายได้นอกเหนือจาก 'การเล่นโวหารคอมพิวเตอร์แบบสุ่ม' แต่ฉันคิดว่ามันอาจช่วยคนอื่นได้


-1

หากคุณพยายามที่จะรันคำสั่ง mysql โดยกำหนดการเชื่อมต่อสายอักขระคุณจะได้รับข้อผิดพลาดนี้

อาจเป็นไปได้ว่าคุณลืมกำหนดสตริงการเชื่อมต่อก่อนที่จะดำเนินการ คุณลองดูไหม (ขออภัยสำหรับภาษาอังกฤษที่ไม่ดี)


-1

ปัญหา: root @ localhost ไม่สามารถเชื่อมต่อกับการติดตั้งใหม่ของ mysql-community-server บน openSUSE 42.2-1.150.x86_64 Mysql ปฏิเสธการเชื่อมต่อ - ช่วงเวลา

สารละลาย:

$ ls -l /var/lib/mysql/mysql/user.*
-rw-rw---- 1 mysql mysql     0 Apr 29 19:44 /var/lib/mysql/mysql/user.MYD
-rw-rw---- 1 mysql mysql  1024 Apr 29 19:44 /var/lib/mysql/mysql/user.MYI
-rw-rw---- 1 mysql mysql 10684 Apr 29 19:44 /var/lib/mysql/mysql/user.frm

ไฟล์ user.MYD มีขนาด 0 (จริงเหรอ?!) ฉันคัดลอกทั้ง 3 ไฟล์จากระบบอื่น

$ /usr/sbin/rcmysql stop
$ cd /var/lib/mysql/mysql/
$ scp root@othersytem:/var/lib/mysql/mysql/user.* ./
$ /usr/sbin/rcmysql start
$ cd -
$ mysql -u root -p

ฉันสามารถเข้าสู่ระบบจากนั้นมันเป็นเพียงเรื่องของการใช้สิทธิ์สคีทั้งหมด นอกจากนี้หากคุณปิดใช้งาน IPv6 ให้เปิดใช้งานชั่วคราวอีกครั้งเพื่อให้บัญชี root @ :: 1 สามารถทำงานได้


-1

สิ่งนี้ใช้ได้กับDirectAdmin ;

  1. DirectAdminไปที่
  2. MySQL Managementไปที่
  3. databaseเลือกของคุณ
  4. ใต้Accesse Hostแท็บของคุณมีฟิลด์ xxx.xx.xxx.xxคุณควรกรอกข้อมูลนี้โดย
  5. Add Hostคลิกที่

เสร็จ ตอนนี้คุณสามารถเข้าถึงฐานข้อมูลนี้โดยคุณและyour_database_username ง่ายมาก!your_database_password


-3

คำตอบทั้งหมดที่นี่ไม่ทำงานในกรณีของฉันดังนั้นฉันจึงเป็นแขกนี้อาจช่วยผู้ใช้รายอื่นในอนาคต นี่อาจเป็นปัญหาในรหัสของเราไม่ใช่เฉพาะใน MySQL เท่านั้น

หากคุณกำลังใช้ VB.NET

แทนรหัสนี้:

 Dim server As String = My.Settings.DB_Server
 Dim username As String = My.Settings.DB_Username
 Dim password As String = My.Settings.DB_Password
 Dim database As String = My.Settings.DB_Database

 MysqlConn.ConnectionString = "server=" & server & ";" _
 & "user id=" & username & ";" _
 & "password=" & password & ";" _
 & "database=" & database

 MysqlConn = New MySqlConnection()

คุณต้องไปMysqlConn = New MySqlConnection()ที่บรรทัดแรก มันจะเป็นอย่างนี้

 MysqlConn = New MySqlConnection()

 Dim server As String = My.Settings.DB_Server
 Dim username As String = My.Settings.DB_Username
 Dim password As String = My.Settings.DB_Password
 Dim database As String = My.Settings.DB_Database

 MysqlConn.ConnectionString = "server=" & server & ";" _
 & "user id=" & username & ";" _
 & "password=" & password & ";" _
 & "database=" & database
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.