ฉันได้ติดตั้ง MySQL Community Edition 5.5 บนเครื่องของฉันและฉันต้องการอนุญาตการเชื่อมต่อระยะไกลเพื่อให้ฉันสามารถเชื่อมต่อจากแหล่งภายนอก
ฉันจะทำสิ่งนั้นได้อย่างไร
sudo mysql_secure_installation
คุณอาจพยายามที่จะใช้ FYI
ฉันได้ติดตั้ง MySQL Community Edition 5.5 บนเครื่องของฉันและฉันต้องการอนุญาตการเชื่อมต่อระยะไกลเพื่อให้ฉันสามารถเชื่อมต่อจากแหล่งภายนอก
ฉันจะทำสิ่งนั้นได้อย่างไร
sudo mysql_secure_installation
คุณอาจพยายามที่จะใช้ FYI
คำตอบ:
ที่ได้รับอนุญาตโดยค่าเริ่มต้นใน MySQL
สิ่งที่ถูกปิดใช้งานโดยค่าเริ่มต้นคือroot
การเข้าถึงระยะไกล หากคุณต้องการเปิดใช้งานให้เรียกใช้คำสั่ง SQL นี้แบบโลคัล:
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'password' WITH GRANT OPTION;
FLUSH PRIVILEGES;
จากนั้นหาบรรทัดต่อไปนี้และคอมเม้นท์ในmy.cnf
ไฟล์ของคุณซึ่งโดยปกติแล้วจะอยู่/etc/mysql/my.cnf
บนระบบ Unix / OSX ในบางกรณีตำแหน่งของไฟล์คือ /etc/mysql/mysql.conf.d/mysqld.cnf)
หากเป็นระบบ Windows คุณสามารถค้นหาได้ในไดเรกทอรีการติดตั้ง MySQL โดยปกติC:\Program Files\MySQL\MySQL Server 5.5\
แล้วชื่อไฟล์จะเป็นmy.ini
เช่นนั้น
เปลี่ยนสาย
bind-address = 127.0.0.1
ถึง
#bind-address = 127.0.0.1
และรีสตาร์ทเซิร์ฟเวอร์ MySQL ( Unix / OSXและWindows ) เพื่อให้การเปลี่ยนแปลงมีผล
my.cnf
ไฟล์และไม่พบbind-address
คำสั่งในนั้นโปรดทราบว่าในกรณีของฉัน (MySQL รุ่น 14.14 บน Ubuntu 16.04.2) ตำแหน่งของไฟล์คือ/etc/mysql/mysql.conf.d/mysqld.cnf
หลังจากทำตามขั้นตอนทั้งหมดแล้วฉันยังไม่สามารถเข้าสู่ระบบได้root
จากระยะไกล แต่ Telnetting ไปยังพอร์ต3306
ยืนยันว่าMySQL
กำลังรับการเชื่อมต่อ
ฉันเริ่มดูผู้ใช้ใน MySQL และสังเกตเห็นว่ามีผู้ใช้รูทหลายคนด้วยรหัสผ่านที่แตกต่างกัน
select user, host, password from mysql.user;
ดังนั้นในการMySQL
ที่ผมตั้งรหัสผ่านทั้งหมดสำหรับรากroot
อีกครั้งและในที่สุดผมก็สามารถเข้าสู่ระบบในระยะไกลเป็น
use mysql;
update user set password=PASSWORD('NEWPASSWORD') where User='root';
flush privileges;
update user set authentication_string=password('YOUR_PASSWORD') where user='root';
เพียงบันทึกจากประสบการณ์ของฉันคุณสามารถค้นหาไฟล์การกำหนดค่าภายใต้เส้นทาง/etc/mysql/mysql.conf.d/mysqld.cnf
นี้
(ฉันพยายามหาเวลาเส้นทางนี้)
sudo find /etc -iname 'mysql*.cnf'
ในกรณีของฉันฉันพยายามเชื่อมต่อกับเซิร์ฟเวอร์ mysql ระยะไกลบนระบบปฏิบัติการเซน หลังจากผ่านการแก้ปัญหาจำนวนมาก (การให้สิทธิ์ทั้งหมดการลบการเชื่อมโยง IP การเปิดใช้งานเครือข่าย) ปัญหายังคงไม่ได้รับการแก้ไข
เมื่อมันปรากฏออกมาในขณะที่มองหาวิธีการแก้ปัญหาต่าง ๆ ฉันพบ iptables ซึ่งทำให้ฉันรู้ว่าพอร์ต mysql 3306 ไม่ยอมรับการเชื่อมต่อ
นี่เป็นบันทึกเล็ก ๆ เกี่ยวกับวิธีการตรวจสอบและแก้ไขปัญหานี้
telnet (ip เซิร์ฟเวอร์ mysql) [พอร์ตไม่]
iptables -A อินพุต -i eth0 -p tcp -m tcp - พอร์ต 3306 -j ยอมรับ
บริการ iptables หยุด
หวังว่านี่จะช่วยได้
โปรดทำตามขั้นตอนที่กล่าวถึงด้านล่าง inorder เพื่อตั้งค่า wildcard remote access สำหรับ MySQL User
(1) เปิด cmd
(2) นำทางไปยังเส้นทาง C: \ Program Files \ MySQL \ MySQL Server 5.X \ bin และเรียกใช้คำสั่งนี้
mysql -u root -p
(3) ป้อนรหัสผ่านรูท
(4) ดำเนินการคำสั่งต่อไปนี้เพื่อให้สิทธิ์
ให้สิทธิ์ทั้งหมดในวันที่ *. * เป็น 'USERNAME' @ 'IP' ที่ระบุด้วย 'รหัสผ่าน';
USERNAME: ชื่อผู้ใช้ที่คุณต้องการเชื่อมต่อกับเซิร์ฟเวอร์ MySQL
IP: ที่อยู่ IP สาธารณะที่คุณต้องการอนุญาตให้เข้าถึงเซิร์ฟเวอร์ MySQL
PASSWORD: รหัสผ่านของชื่อผู้ใช้ที่ใช้
IP สามารถแทนที่ด้วย% เพื่อให้ผู้ใช้สามารถเชื่อมต่อจากที่อยู่ IP ใด ๆ
(5) ล้าง previleges โดยทำตามคำสั่งและออก
สิทธิในการชำระล้าง
ออกจาก; หรือ\ q
หากกระบวนการเซิร์ฟเวอร์ MySQL ของคุณกำลังรับฟังบน 127.0.0.1 หรือ :: 1 เท่านั้นคุณจะไม่สามารถเชื่อมต่อจากระยะไกลได้ หากคุณมีการbind-address
ตั้งค่าใน/etc/my.cnf
สิ่งนี้อาจเป็นสาเหตุของปัญหา
คุณจะต้องเพิ่มสิทธิพิเศษสำหรับผู้ที่ไม่ใช่localhost
ผู้ใช้ด้วย
127.0.0.1
อย่างไร
หากคุณติดตั้ง MySQL จากbrew
มันจะฟังเฉพาะในอินเตอร์เฟซท้องถิ่นโดยค่าเริ่มต้น หากต้องการแก้ไขที่คุณต้องแก้ไข/usr/local/etc/my.cnf
และเปลี่ยนbind-address
จาก127.0.0.1
เป็น*
การ
brew services restart mysql
จากนั้นเรียก
กระบวนการทั้งหมดสำหรับการเข้าสู่ระบบระยะไกล การเข้าสู่ระบบจากระยะไกลถูกปิดใช้งานโดยค่าเริ่มต้นคุณต้องเปิดด้วยตนเองสำหรับทุก ip .. เพื่อให้สามารถเข้าถึงได้ทุก ip
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'password';
IP เฉพาะ
GRANT ALL PRIVILEGES ON *.* TO 'root'@'your_desire_ip' IDENTIFIED BY 'password';
แล้วก็
flush privileges;
คุณสามารถตรวจสอบโฮสต์ผู้ใช้และรหัสผ่านของคุณ
SELECT host,user,authentication_string FROM mysql.user;
ตอนนี้หน้าที่ของคุณคือการเปลี่ยนแปลงสิ่งนี้
bind-address = 127.0.0.1
คุณสามารถค้นหาสิ่งนี้ได้
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
หากคุณไม่พบสิ่งนี้ลองทำสิ่งนี้
sudo nano /etc/mysql/my.cnf
แสดงความคิดเห็นในนี้
#bind-address = 127.0.0.1
จากนั้นเริ่ม Mysql ใหม่
sudo service mysql restart
ตอนนี้สนุกกับการเข้าสู่ระบบจากระยะไกล
เพียงแค่ FYI ฉันดึงผมออกมาด้วยปัญหานี้นานหลายชั่วโมง .. ในที่สุดฉันก็โทรหาผู้ให้บริการโฮสติ้งของฉันและพบว่าในกรณีของฉันใช้เซิร์ฟเวอร์คลาวด์ที่แผงควบคุมสำหรับ 1 และ 1 พวกเขามีไฟร์วอลล์สำรองที่คุณต้องโคลนและเพิ่มพอร์ต 3306 เมื่อเพิ่มฉันได้ตรงค่ะ
สำหรับผู้ที่ต้องการตรวจสอบพอร์ตไฟร์วอลล์ 3306 เปิดเช่นกันหากบริการไฟร์วอลล์ของคุณกำลังทำงานอยู่
บล็อกนี้จะติดตั้งเซิร์ฟเวอร์ MySQL บนเครือข่ายท้องถิ่นได้อย่างไรจะมีประโยชน์ในการตั้งค่าMySQL
ตั้งแต่เริ่มต้น
และสำหรับคนที่ใช้ OS X โปรดทราบว่าโดยทั่วไปแล้วพารามิเตอร์ bind-address จะถูกตั้งค่าไว้ในโปรแกรมเรียกใช้งานระบบและไม่อยู่ในไฟล์ my.ini ดังนั้นในกรณีของฉันฉันออกจาก<string>--bind-address=127.0.0.1</string>
/Library/LaunchDaemons/homebrew.mxcl.mariadb.plist
~/Library/LaunchAgents
หากmysqld
มีการกำหนดที่อยู่ผูกเป็นลูปแบ็ค / ที่อยู่ท้องถิ่น (เช่น127.0.0.1
) เซิร์ฟเวอร์จะไม่สามารถเข้าถึงได้จากโฮสต์ระยะไกลเพราะอินเตอร์เฟซย้อนกลับไม่สามารถเข้าถึงได้จากโฮสต์ระยะไกลใด ๆ
ตั้งค่าตัวเลือกนี้เป็น0.0.0.0
(::
สำหรับ IPv4 + 6) เพื่อยอมรับการเชื่อมต่อจากโฮสต์ใด ๆ หรือไปยังที่อยู่อื่นที่เข้าถึงได้จากภายนอกหากคุณต้องการอนุญาตการเชื่อมต่อในอินเทอร์เฟซเดียวเท่านั้น
บางครั้งจำเป็นต้องใช้ชื่อพีซีบน windows
ขั้นตอนแรก)ใส่ในไฟล์ config ของ mysql:
mysqld.cnf ตลาดหลักทรัพย์ผูกที่อยู่ = 0.0.0.0
(เพื่อให้การเชื่อมต่อ recibe ผ่าน tcp / ip)
ขั้นตอนที่สอง)สร้างผู้ใช้ใน mysql ผู้ใช้งานตารางโดยใช้ชื่อ pc บน windows propierties ไม่ใช่ ip
การเปิดใช้งานการเข้าถึงรูทระยะไกลอาจเป็นอันตรายได้ มันจะดีกว่าถ้าคุณจะตั้งค่าบัญชีผู้ใช้ที่มีสิทธิ์ จำกัด มากขึ้น สามขั้นตอนต่อไปนี้ควรทำ
ตรวจสอบให้แน่ใจว่าบรรทัดที่ขึ้นต้นด้วยbind-address ...
อย่างน้อยมีความเห็นในไฟล์ my.ini หรือ my.cnf ของคุณ หากไม่มีอยู่ให้ไปต่อ คุณสามารถค้นหาไฟล์นี้ในC:\ProgramData\MySQL\MySQL Server 8.0
Windows
หลังจากนั้นให้ตรวจสอบว่าบัญชีผู้ใช้ที่คุณกำลังสร้างการเชื่อมต่อนั้นไม่มีlocalhost
อยู่ในฟิลด์การจับคู่โฮสต์ จำกัด แม้ว่าจะไม่แนะนำ แต่คุณสามารถใส่%
ในช่องนั้นเพื่อการทดสอบได้ คุณสามารถทำได้โดยเปิดการเชื่อมต่อท้องถิ่นไปยังเซิร์ฟเวอร์ด้วย MySQL Workbench จากนั้นไปที่เซิร์ฟเวอร์> ผู้ใช้และสิทธิ์จากแถบเมนูและค้นหาบัญชีผู้ใช้ที่คุณต้องการเชื่อมต่อด้วย
ฟิลด์ "การจับคู่กับโฮสต์ จำกัด " เป็นสิ่งที่ทำให้คุณไม่สามารถเชื่อมต่อกับผู้อื่นได้ นั่นคือ จำกัด การเชื่อมต่อที่ยอมรับไปยังรูปแบบที่อยู่ IP เป็นการดีที่คุณควรเข้าถึงเซิร์ฟเวอร์ MySQL จากที่อยู่ IP หรือซับเน็ตแบบคงที่เพื่อให้คุณสามารถ จำกัด ได้มากที่สุด