Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

MySQL रिमोट कनेक्शन [हमेशा की तरह नहीं]

फिर से शुरू किया गया समाधान:

मैंने उस mysqld को मार दिया जिसमें 3306 पोर्ट था और इसे फिर से शुरू किया।

मुझे लगता है कि यह एक बग या कुछ संबंधित जांच है जो मैंने चरण-दर-चरण की है:

1- 3306 को कनेक्ट करने के लिए एक प्रोग्राम बनाया

सबसे पहले मैं यह सुनिश्चित करने के लिए जावा में एक साधारण प्रोग्राम बनाता हूं कि मेरे फ़ायरवॉल में कोई समस्या नहीं है। कार्यक्रम सिर्फ परीक्षण के लिए केवल 2 मिनट में टीसीपी कनेक्शन के साथ 3306 पर एक बंदरगाह खोलता है, कार्यक्रम:

import java.io.IOException;
import java.net.ServerSocket;

public class PortMysqlTest {
    public static void main(String[] args) {
        int port = 3306;

        ServerSocket ss = null;
        try
        {
            ss = new ServerSocket(port);
            ss.setReuseAddress(true);
        }
        catch (IOException e)
        {
            System.out.println(e.getMessage());
        }

        long futureTime = System.currentTimeMillis() + 1000 * 60 * 2;
        while (System.currentTimeMillis() < futureTime)
        {
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }

        if (ss != null)
        {
            try
            {
                ss.close();
            }
            catch (IOException e)
            {
                System.out.println(e.getMessage());
            }
        }       
    }

2- mysql सेवा बंद कर दी

कार्यक्रम को क्रियान्वित करने से पहले मैंने mysql सेवा बंद कर दी:

sudo service mysql stop

या इसके साथ किया जा सकता है:

/etc/init.d/mysql stop

3- java PortMysqlTest के साथ मेरा प्रोग्राम शुरू किया

मेरा प्रोग्राम (PortMysqlTest) एक अपवाद फेंकता है जिसमें कहा गया है कि पता/पोर्ट जैसा कि पहले से ही mysqld द्वारा उपयोग किया जा रहा है!

आश्चर्य? जहां तक ​​​​मुझे पता है कि MySQL सेवा बंद कर दी गई है, बंदरगाह मुक्त होना चाहिए। क्या मैं सही हूँ? (मैं इस बारे में निश्चित नहीं हूं कि क्या कोई इसका उत्तर दे सकता है...)

4- मैंने उस एप्लिकेशन पीआईडी ​​की खोज की जो पते/पोर्ट का उपयोग कर रहा था:

sudo netstat -lpn | grep 3306

उत्तर:

tcp        0      0 127.0.0.1:3306          0.0.0.0:*               LISTEN      6736/mysqld

5- मैंने इस प्रक्रिया को समाप्त कर दिया:

kill -9 6736

ओबीएस, अगर आपको नहीं पता कि किल डू:6736 वह प्रक्रिया है जो पोर्ट को पकड़ रही थी, तो मुझे यह नंबर चरण 4, 6736/mysqld

के साथ मिला।

6- अब मैं अपना प्रोग्राम फिर से चलाता हूं:

java PortMysqlTest और टेलनेट (टेलनेट 66.123.173.170 3306) से कनेक्टेड बाहरी और यह काम करता है !

तो समस्या फ़ायरवॉल नहीं थी , क्योंकि मैं मशीन से 66.123.173.170 बाहरी रूप से जुड़ सकता था।

7- mysql सेवा फिर से शुरू की:

(मैंने अपने कार्यक्रम के लिए 2 मिनट इंतजार किया और 3306 पोर्ट को बंद कर दिया) और परीक्षण करने के लिए फिर से mysql सेवा शुरू की:

sudo service mysql start 

या

sudo /etc/init.d/mysql start

8- मैं टेलनेट के साथ बाहरी रूप से जुड़ा था:

telnet 66.123.173.170 3306

और काम किया!!!

मेरे द्वारा mysql से कनेक्ट करने का प्रयास करने के बाद:

mysql -h 66.123.173.170 -u root -p 

और काम किया!!!

निष्कर्ष: मुझे लगता है कि मेरी MySQL स्थापना के साथ एक बग था; या कुछ, (मुझे नहीं पता कि क्या है), MySQL को पुनरारंभ करते समय MySQL को कॉन्फ़िगरेशन नहीं मिलता है:

bind-address = 0.0.0.0 

या

bind-address = * 

मुझे आशा है कि यह किसी और की मदद करेगा।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. ऑफ़लाइन पुन:उपयोग के लिए sql तालिका के मान डाउनलोड करें

  2. MySQL:दो n:1 संबंध, लेकिन दोनों एक साथ नहीं

  3. PHP/PDO:तालिका बनाते समय तैयार कथन काम नहीं करते हैं?

  4. उपयोगकर्ता आईडी की सूची संग्रहीत करने का सर्वोत्तम तरीका

  5. वाईआई सीडीबीकनेक्शन डीबी कनेक्शन खोलने में विफल रहा:गूगल क्लाउड एसक्यूएल के साथ ड्राइवर नहीं मिल सका