У меня есть портативная версия базы данных MySQL, к которой я пытаюсь подключиться.

На компьютере под управлением Windows 10 я могу подключиться к нему, используя 127.0.0.1 через порт 3310.

Если я скопирую этот экземпляр на любой другой компьютер под управлением Windows 10, я смогу подключиться, используя IP.

Когда я копирую тот же экземпляр в VPS на Windows Server 2016, я не могу подключиться к базе данных, используя IP-адрес, он подключается только при использовании localhost.

Мне нужно подключиться, используя IP-адрес. Некоторые люди говорили мне, что у меня должна быть проблема с моим файлом hosts , но он точно такой же на обоих компьютерах.

Кто-нибудь имеет представление о том, что может быть причиной этого?

--- ОБНОВЛЕНИЕ 1 ---

Я знаю, что там localhost и 127.0.0.1 почти одинаковы. Но проблема для меня в том, что я использую устаревшее программное обеспечение, которое принимает только IP-адрес, поэтому я не могу использовать localhost.

Я не смог подключить программное обеспечение к базе данных, затем я установил HeidiSQL и попытался подключиться, используя 127.0.0.1 и он действительно не работал, поэтому я перешел на localhost и он подключился.

Поскольку я не могу изменить устаревшее программное обеспечение для использования localhost, мне нужно выяснить, почему MySQL не принимает соединения через 127.0.0.1

- ОБНОВЛЕНИЕ 2 -

Вот файл конфигурации SQL:

    # Example MariaDB config file for large systems.
    #
    # This is for a large system with memory = 512M where the system runs mainly
    # MariaDB.
    #
    # MariaDB programs look for option files in a set of
    # locations which depend on the deployment platform.
    # You can copy this option file to one of those
    # locations. For information about these locations, do:
    # 'my_print_defaults --help' and see what is printed under
    # Default options are read from the following files in the given order:
    # More information at: http://dev.mysql.com/doc/mysql/en/option-files.html
    #
    # In this file, you can use all long options that a program supports.
    # If you want to know which options a program supports, run the program
    # with the "--help" option.

    # The following options will be passed to all MariaDB clients
    [client]
    #password   = your_password
    port        = 3310
    socket      = /tmp/mysql.sock

    # Here follows entries for some specific programs

    # The MariaDB server
    [mysqld]
    port        = 3310
    socket      = /tmp/mysql.sock
    skip-external-locking
    key_buffer_size = 256M
    max_allowed_packet = 256M
    table_open_cache = 256
    sort_buffer_size = 1M
    read_buffer_size = 1M
    read_rnd_buffer_size = 4M
    myisam_sort_buffer_size = 64M
    thread_cache_size = 8
    query_cache_size= 16M
    # Try number of CPU's*2 for thread_concurrency
    thread_concurrency = 8

    # Point the following paths to different dedicated disks
    #tmpdir     = /tmp/

    # Don't listen on a TCP/IP port at all. This can be a security enhancement,
    # if all processes that need to connect to mysqld run on the same host.
    # All interaction with mysqld must be made via Unix sockets or named pipes.
    # Note that using this option without enabling named pipes on Windows
    # (via the "enable-named-pipe" option) will render mysqld useless!
    # 
    #skip-networking

    # Replication Master Server (default)
    # binary logging is required for replication
    #log-bin=mysql-bin

    # binary logging format - mixed recommended
    #binlog_format=mixed

    # required unique id between 1 and 2^32 - 1
    # defaults to 1 if master-host is not set
    # but will not function as a master if omitted
    server-id   = 1

    # Replication Slave (comment out master section to use this)
    #
    # To configure this host as a replication slave, you can choose between
    # two methods :
    #
    # 1) Use the CHANGE MASTER TO command (fully described in our manual) -
    #    the syntax is:
    #
    #    CHANGE MASTER TO MASTER_HOST=<host>, MASTER_PORT=<port>,
    #    MASTER_USER=<user>, MASTER_PASSWORD=<password> ;
    #
    #    where you replace <host>, <user>, <password> by quoted strings and
    #    <port> by the master's port number (3306 by default).
    #
    #    Example:
    #
    #    CHANGE MASTER TO MASTER_HOST='125.564.12.1', MASTER_PORT=3306,
    #    MASTER_USER='joe', MASTER_PASSWORD='secret';
    #
    # OR
    #
    # 2) Set the variables below. However, in case you choose this method, then
    #    start replication for the first time (even unsuccessfully, for example
    #    if you mistyped the password in master-password and the slave fails to
    #    connect), the slave will create a master.info file, and any later
    #    change in this file to the variables' values below will be ignored and
    #    overridden by the content of the master.info file, unless you shutdown
    #    the slave server, delete master.info and restart the slaver server.
    #    For that reason, you may want to leave the lines below untouched
    #    (commented) and instead use CHANGE MASTER TO (see above)
    #
    # required unique id between 2 and 2^32 - 1
    # (and different from the master)
    # defaults to 2 if master-host is set
    # but will not function as a slave if omitted
    #server-id       = 2
    #
    # The replication master for this slave - required
    #master-host     =   <hostname>
    #
    # The username the slave will use for authentication when connecting
    # to the master - required
    #master-user     =   <username>
    #
    # The password the slave will authenticate with when connecting to
    # the master - required
    #master-password =   <password>
    #
    # The port the master is listening on.
    # optional - defaults to 3306
    #master-port     =  <port>
    #
    # binary logging - not required for slaves, but recommended
    #log-bin=mysql-bin

    # Uncomment the following if you are using InnoDB tables
    #innodb_data_home_dir = C:\\mysql\\data\\
    #innodb_data_file_path = ibdata1:10M:autoextend
    #innodb_log_group_home_dir = C:\\mysql\\data\\
    # You can set .._buffer_pool_size up to 50 - 80 %
    # of RAM but beware of setting memory usage too high
    #innodb_buffer_pool_size = 256M
    #innodb_additional_mem_pool_size = 20M
    # Set .._log_file_size to 25 % of buffer pool size
    #innodb_log_file_size = 64M
    #innodb_log_buffer_size = 8M
    #innodb_flush_log_at_trx_commit = 1
    #innodb_lock_wait_timeout = 50

    [mysqldump]
    quick
    max_allowed_packet = 256M

    [mysql]
    no-auto-rehash
    # Remove the next comment character if you are not familiar with SQL
    #safe-updates

    [myisamchk]
    key_buffer_size = 128M
    sort_buffer_size = 128M
    read_buffer = 2M
    write_buffer = 2M

    [mysqlhotcopy]
    interactive-timeout

1 ответ1

0

По умолчанию конфигурация сервера mysql/mariadb предназначена только для прослушивания на локальном хосте (127.0.0.1). Чтобы разрешить удаленные подключения, вы должны привязаться к реальному IP-адресу. Вы можете указать конкретный IP, чтобы ограничить вещи. Кроме того, вы можете привязать все IP-адреса, закомментировав эту строку:

#bind-address = <some ip-address>

Вы опубликовали свой конфиг, а я не увидел эту строку, но убедитесь, что в вашей конфигурации нет строки адреса привязки.

Также убедитесь, что вы не пропускаете конфигурацию сети. Вы хотите, чтобы эта строка была закомментирована:

#skip-networking

Документация о разрешении удаленного доступа, которая объясняет это более подробно, находится здесь:https://mariadb.com/kb/en/library/configuring-mariadb-for-remote-client-access/

Вам также необходимо создать пользователя, которому разрешено подключаться либо со всех хостов, либо с конкретных хостов или сетей, к которым вы будете подключаться. См. Ссылку на документацию mariadb выше для получения подробной информации о создании пользователей, которые могут подключаться с удаленных узлов Например, чтобы создать пользователя "bloguser", который имеет все привилегии для всех таблиц в базе данных "myblog" и может подключаться с любого удаленного хоста:

GRANT ALL PRIVILEGES ON myblog.* TO 'bloguser'@'%' IDENTIFIED BY 'bloguser-password';

Конечно, ваша сетевая конфигурация должна разрешить порту 3306 (или вашему пользовательскому порту, если он был изменен) доступ к вашей базе данных через любые межсетевые экраны, которые у вас могут быть. Вы можете проверить базовый доступ к сети с удаленного хоста, используя telnet. Предположим, ваш IP-адрес сервера базы данных равен 1.2.3.4. В командной строке на удаленном компьютере попробуйте:

telnet 1.2.3.4 3306

Подождите, пока что-нибудь получится, провалится или истечет время ожидания. Вот некоторые результаты, которые вы можете увидеть и, возможно, что они означают:

  1. « Подключен к 1.2.3.4 » УСПЕХА!
  2. « Невозможно подключиться к удаленному хосту: время ожидания истекло ». У вас есть маршрут, но вы не можете его пройти. Может быть брандмауэр на сервере не разрешает 3306. Может быть ваша собственная сеть не разрешает 3306 исходящих.
  3. « Невозможно подключиться к удаленному хосту: нет маршрута к хосту ». Ваша система даже не знает, как добраться до этой сети.
  4. « Невозможно подключиться к удаленному хосту: соединение отклонено ». Общая причина этого заключается в том, что mariadb не работает или не прослушивает этот IP-адрес и порт. (привязан к 127.0.0.1 например). Возможно, брандмауэр отклонил соединение.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .