Перейти к содержимому

Как открыть базу данных sql на другом компьютере

  • автор:

Внешнее подключение к MySQL

С помощью удаленного подключения к MySQL вы можете соединяться с базой данных на сервере хостинга с вашего домашнего компьютера, используя удобные для вас программы для работы с базами данных.

Простое подключение

Для настройки простого подключения к MySQL извне зайдите в Панель управления и перейдите в раздел «Базы данных» → «Доступ по IP».

Нажмите кнопку «Добавить IP» и укажите IP-адрес, с которым вы выходите в сеть. Узнать свой адрес можно на сайте inet.from.sh.

В форме можно указывать в том числе и IP-адреса с символом % в октетах. К примеру, для разграничения доступа с адресов одной подсети:

Теперь вы можете подключаться к базе данных на сервере хостинга с вашего компьютера. Для подключения используйте следующие настройки:

  • сервер для подключения: имя вашего домена, например yourdomain.ru;
  • порт для подключения: 3306;
  • имя пользователя и пароль: установленные вами при создании базы данных имя пользователя и пароль.

Пример подключения с помощью программы mysql (пароль будет запрошен при подключении):

mysql -P 3306 -h yourdomain.ru -u mylogin_user -p mylogin_db

Безопасное подключение через SSH-туннель

В целях обеспечения безопасности ваших данных используйте подключение к базам данных MySQL через SSH-туннель. Данные передаются по SSH-туннелю в зашифрованном виде, что исключает возможность их перехвата.

Подключение к БД MySQL с компьютера под управлением ОС MS Windows

Настройка SSH-туннеля

Установите на ваш компьютер программу putty. Это бесплатное программное обеспечение, скачать ее можно на официальном сайте.

В категории настроек «Session» в поле «Имя хоста» (Host Name) укажите домен вашего сайта.

Перейдите в категорию настроек Connection → SSH → Tunnels и в поле «Source port» укажите значение 3306, в поле «Destination» — localhost:3306.

После этого нажмите кнопку «Add».

После этого нажмите кнопку «Open». Установится соединение с вашим хостом.

В качестве логина и пароля используйте ваши данные для входа в Панель управления хостингом.

Туннель установлен. Для соединения с базой данных используйте имя пользователя и пароль, заданные вами при создании базы данных в разделе Панели управления «Базы данных». В качестве адреса сервера используйте 127.0.0.1, порт для подключения 3306.

Пример подключения с помощью программы mysql (пароль будет запрошен при подключении):

mysql -P 3306 -h 127.0.0.1 -u mylogin_user -p mylogin_db

Внимание: если на вашем компьютере уже работает сервер баз данных MySQL, подключение удаленному серверу по порту 3306 будет невозможно. В этом случае при создании подключения в putty укажите другой порт в качестве «Source port», например, 3307. Используйте этот порт при подключении к базе данных.

Подключение к БД MySQL с компьютера под управлением ОС Linux

В командной строке выполните следующую команду:

ssh -L3306:localhost:3306 -n yourlogin@yourdomain.ru

  • 3306 (сразу после ключа -L) — порт на локальном компьютере, к которому вы сможете подключаться клиентом mysql;
  • yourlogin — имя вашего аккаунта (логин в Панели управления);
  • yourdomain.ru — имя вашего сайта.

В качестве пароля используйте пароль для входа в Панель управления хостингом.

Туннель установлен. Для соединения с базой данных используйте имя пользователя и пароль, заданные вами при создании базы данных в разделе Панели управления «Базы данных». В качестве адреса сервера используйте 127.0.0.1, порт для подключения 3306.

Пример подключения с помощью программы mysql (пароль будет запрошен при подключении):

mysql -P 3306 -h 127.0.0.1 -u mylogin_user -p mylogin_db

Внимание: если на вашем компьютере уже работает сервер баз данных MySQL, подключение удаленному серверу по порту 3306 будет невозможно. В этом случае при запуске ssh сразу после ключа -L укажите альтернативный порт, например, 3307. Используйте этот порт при подключении к базе данных.

Проверка соединения с БД MySQL

Проверить соединение с БД можно посредством утилиты telnet. Войдите в интерфейс командной строки (в ОС MS Windows: Пуск → Выполнить → cmd.exe), наберите команду:

telnet 127.0.0.1 3306

Если соединение установлено, процедуру настройки туннеля можно считать завершенной. В противном случае необходимо тщательно проверить настройки, убедиться в отсутствии сетевых проблем и связаться со службой технической поддержки.

Как открыть доступ к БД в MySQL на другом компьютере?

Здравствуйте! Сейчас я пишу небольшую программу в Unity, чтобы она считывала и выдавала данные из БД MySQL. Я только начала программировать, поэтому проект для многих скорее всего покажется очень легким, но у меня возникла проблема. В Editor у Unity все работает замечательно, но только на том компьютере, на котором находится моя БД. В принципе, это логично, ведь мой код подключается к БД через localhost, но какие настройки мне нужно предпринять, чтобы БД читалась с другого компьютера, на котором моей БД нет? я понимаю, что скорее всего придется подключать какой-то экстерный сервер (вроде посредника), но все-таки может есть какой-то другой путь? Заранее большое спасибо за ваши ответы!

Отслеживать
задан 13 фев 2018 в 13:49
1 1 1 серебряный знак 1 1 бронзовый знак

@Mark Shevchenko: большое спасибо за ваш ответ! что-то подобное я уже видела на англоязычном стоке. проблема теперь в следующем: у меня нет в my.ini строки «bind-address». могу ли я ее просто вручную прописать и закоменнтить? есть ли в этом вообще смысл?

14 фев 2018 в 14:03

вы не совсем в правильном месте уточнили свой вопрос. Отвечу Вам в комментарии, но ваш вопрос будет удалён чуть позже. Если у вас нет строки bind-address, значит, дело не в ней. Дайте права на таблицы пользователю username@% вмето username@localhost.

Присоединение и отсоединение базы данных (SQL Server)

Файлы данных и журналов транзакций базы данных можно отсоединить, а затем повторно подключиться к одному или другому экземпляру SQL Server. Отключение и присоединение базы данных полезно, если вы хотите изменить базу данных на другой экземпляр SQL Server на одном компьютере или переместить базу данных.

Безопасность

Разрешения на доступ к файлам устанавливаются во время выполнения определенных операций с базами данных, включая отсоединение и присоединение баз данных.

Не рекомендуется подключать или восстанавливать базы данных, полученные из неизвестных или ненадежных источников. В этих базах данных может содержаться вредоносный код, вызывающий выполнение непредусмотренных инструкций Transact-SQL или появление ошибок из-за изменения схемы или физической структуры базы данных.
Перед тем как использовать базу данных, полученную из неизвестного или ненадежного источника, выполните на тестовом сервере инструкцию DBCC CHECKDB для этой базы данных, а также изучите исходный код в базе данных, например хранимые процедуры и другой пользовательский код.

Отсоединение базы данных

Отключение базы данных удаляет ее из экземпляра SQL Server, но оставляет базу данных нетронутой в его файлах данных и файлах журнала транзакций. Затем эти файлы можно использовать для подключения базы данных к любому экземпляру SQL Server, включая сервер, с которого была отключена база данных.

Базу данных невозможно отсоединить в следующих случаях.

    База данных реплицируется и публикуется. При репликации база данных должна быть снята с публикации. Перед тем как отсоединить базу данных, необходимо отключить публикацию, выполнив процедуру sp_replicationdboption.

Заметка Если невозможно использовать процедуру sp_replicationdboption, можно удалить репликацию, выполнив процедуру sp_removedbreplication.

Заметка Невозможно отсоединить или присоединить моментальный снимок базы данных.

Резервное копирование, восстановление и отсоединение

Для разностных резервных копий отсоединение базы данных, доступной только для чтения, приводит к потере сведений о базовой копии для разностного копирования. Дополнительные сведения см. в разделе Разностные резервные копии (SQL Server).

Реакция на ошибки отсоединения

Ошибки, возникшие во время отсоединения базы данных, могут воспрепятствовать чистому закрытию базы данных и перестроению журнала транзакций. При получении сообщения об ошибке выполните следующие действие по исправлению.

  1. Заново присоедините все файлы, связанные с базой данных, а не только первичный файл.
  2. Исправьте неполадку, ставшую причиной сообщения об ошибке.
  3. Отсоедините базу данных повторно.

Присоединение базы данных

Вы можете присоединить скопированную или отсоединяемую базу данных SQL Server. При присоединении базы данных SQL Server 2005 (9.x), содержащей файлы полнотекстового каталога на экземпляр SQL Server, файлы каталога присоединяются из предыдущего расположения вместе с другими файлами базы данных, так же, как и в SQL Server 2005 (9.x). Дополнительные сведения см. в разделе Обновление полнотекстового поиска.

При присоединении базы данных должны быть доступны все файлы данных (файлы MDF и NDF). Если у какого-либо файла данных путь отличается от того, каким он был при первом создании или последнем присоединении, необходимо указать текущий путь к файлу.

Если присоединенный первичный файл данных доступен только для чтения, ядро СУБД предполагает, что база данных доступна только для чтения.

При первом присоединении зашифрованной базы данных к экземпляру SQL Server владелец базы данных должен открыть главный ключ базы данных, выполнив следующую инструкцию: OPEN MASTER KEY DECRYPTION BY PASSWORD = ‘password’ Рекомендуется включить автоматическую расшифровку главного ключа, выполнив следующую инструкцию: ALTER MASTER KEY ADD ENCRYPTION BY SERVICE MASTER KEY . Дополнительные сведения см. в статьях CREATE MASTER KEY (Transact-SQL) и ALTER MASTER KEY (Transact-SQL).

Требования для присоединения файлов журналов частично зависят от того, доступна база данных для записи и чтения или только для чтения.

  • Для базы данных, доступной для записи и чтения, обычно можно присоединить файл журнала в новом расположении. Однако в некоторых случаях для повторного соединения базы данных требуются файлы ее существующих журналов. Поэтому всегда храните все отсоединенные файлы журналов, пока база данных не будет успешно присоединена без них. Если у базы данных, доступной для записи и чтения, только один файл журнала и для него не указано новое расположение, операция присоединения использует старое расположение файла. Если он найден, применяется старый файл журнала независимо от того, была ли база данных выключена чисто. Однако если старый файл журнала не найден и база данных была выключена чисто и не имеет активной цепочки журналов, то операция присоединения пытается построить новый файл журнала для базы данных.
  • Если присоединенный первичный файл данных доступен только для чтения, ядро СУБД предполагает, что база данных доступна только для чтения. Для базы данных, доступной только для чтения, файл или файлы журнала должны быть доступны в расположении, указанном в первичном файле базы данных. Невозможно создать новый файл журнала, так как SQL Server не может обновить расположение журнала, хранящееся в основном файле.

Изменение метаданных при присоединении базы данных

Если база данных, доступная только для чтения, отсоединяется, а затем снова присоединяется, то данные о текущей базовой копии для разностного копирования будут утеряны. Базовая копия для разностного копирования — это последняя из полных резервных копий всех данных из базы данных или из подмножества файлов и файловых групп, содержащихся в базе данных. Без сведений о базовой резервной копии база данных master утрачивает синхронизацию с базой данных, доступной только для чтения, и дальнейшее создание разностных резервных копий может привести к непредвиденным результатам. Таким образом, если с базой данных, доступной только для чтения, используются разностные резервные копии, то после повторного присоединения базы данных необходимо установить новую базовую копию для разностного копирования, создав полную резервную копию. Сведения о разностных резервных копиях см. в разделе «Разностные резервные копии» (SQL Server).

После присоединения происходит запуск базы данных. Обычно присоединение базы данных переводит ее в то же состояние, в котором она находилась на момент отсоединения или копирования. Однако операции присоединения и отсоединения отключают создание межбазовых цепочек владения для этой базы данных. Сведения о том, как включить цепочки владения, см. в разделе Параметр конфигурации сервера «cross db ownership chaining».

По умолчанию в целях безопасности параметры is_broker_enabled, is_honor_broker_priority_on и is_trustworthy_on устанавливаются в значение OFF при подключении базы данных. Сведения о настройке этих параметров см. в статье ALTER DATABASE (Transact-SQL). Дополнительные сведения о метаданных см. в статье Управление метаданными при предоставлении доступа к базе данных на другом сервере.

Резервное копирование, восстановление и присоединение

Подобно любой базе данных, которая полностью или частично вне сети, база данных с восстановлением файлов не может быть присоединена. Базу данных можно присоединить после остановки последовательности восстановления. Затем можно снова запустить последовательность восстановления.

Присоединение базы данных к другому экземпляру сервера

База данных, созданная в более поздней версии SQL Server, не может быть подключена в ранних версиях. Это исключает физическое использование базы данных с более старой версией ядра СУБД. Тем не менее это относится к состоянию метаданных и не влияет на режим совместимости базы данных. Дополнительные сведения см. в разделе Уровень совместимости ALTER DATABASE (Transact-SQL).

При присоединении базы данных к другому экземпляру сервера для обеспечения ее согласованного функционирования для пользователей и приложений может понадобиться повторное создание некоторых или всех метаданных базы данных, например имен входа и задания, на другом экземпляре сервера. Дополнительные сведения см. в разделе «Управление метаданными» при создании базы данных, доступной на другом экземпляре сервера (SQL Server).

Связанные задачи

Отсоединение базы данных

  • sp_detach_db (Transact-SQL)
  • Отсоединение базы данных

Присоединение базы данных

  • CREATE DATABASE (SQL Server Transact-SQL)
  • Присоединение базы данных
  • sp_attach_db (Transact-SQL)
  • sp_attach_single_file_db (Transact-SQL)

Обновление базы данных при помощи операций отсоединения и присоединения

Перемещение базы данных при помощи операций отсоединения и присоединения

Удаление моментального снимка базы данных

Делаем доступной базу данных для удаленного подключения

Начнем с того что бывают случаи, когда нужно делать приложение с подключением к базе данных. Это делается для того чтобы особо не копаться в бэкэнд разработке и сконцентрироваться на фронтэнде из-за нехватки рук и навыков. Я не берусь говорить, что мое решение будет безопасным, но оно работает.

Поскольку я не люблю платить за хостинг, я воспользовался сетью на своей работе, там есть белый IP. Вот ее структура:

У меня имеется доступ к нескольким компьютерам точнее к 192.168.1.2 (он же 192.168.0.2) там стоит Linux и к 192.168.0.3 с Windows. В общем, для своего приложения я выбрал mysql и посмотрел что есть на Linux. Там уже был установлен он, но пароль никто не знает, а те кто знали забыли (те кто работал до меня). Узнав что он никому не нужен, я его удалил и попытался установить заново. Память не хватало и поскольку чтобы исправить эту ошибку пришлось бы подключать к нему монитор и клавиатуру с мышью, я решил бросить это дело. Тем более что машина с Windows куда мощней и плюс ко всему у меня у самого стоит она на ноутбуке домашнем. В принципе саму установку я описывать не буду, есть куча мануалов и видео про это. Установив mysql на Windows машину, я решил сделать бэкап таблиц с ноутбука на рабочую станцию.

Делается это так (в моем случае):

mysqldump -uroot -p your_base > dump_file.sql 

Далее в новой базе данных создаем базу данных и восстанавливаем бэкап на «новой» машине.

mysql -h localhost -u root -p 
create database your_base; use your_base; 
mysql -uroot -p your_base < dump_file.sql 
show tables; 

Файл с бэкапом надо на новую машину положить и возможно если не в директории с утилитой то полный путь к ней. (Я просто залил бэкап на гитхаб и клонировал его на новую машину). Я бы добавил как создаются сами таблицы, но не сохранил скрины, да и думаю это не сложно даже студенту 2-3 курса.

Когда восстановил все таблицы, пришло время сделать доступным удаленный доступ к бд. В общем, такие команды к успеху не привели (выдал только право на чтение select)

create user 'client'@'%' IDENTIFIED by 'client'; grant select on your_base . * to 'client'@'%'; flush privileges; 

Точнее я мог подключится к базе только командой,

mysql -h localhost -u client -pclient 

а такой уже не мог

mysql -h 192.168.0.3 -u client -pclient 

мне это не подходило также не мог подключится через этот адрес и от root.

Помогла программка mysql workbench там в настройках меняете localhost на % и работает, хотя client это не помогло. Теперь вы можете подключаться к бд из консоли или из кода с любого адреса.

Еще нужно сделать сеть домашней или предприятия и выключить брандмауэр Windows иначе не сможете даже сделать пинг этой машины(не то чтобы подключится к бд).

Пол дела сделано, дальше нужно чтобы я мог из дома подключится к базе данных.

Как видно из схемы сети, то до интернета надо пройти путь от 192.168.0.3 до 192.168.1.1 (роутер) пойдем в обратную сторону. Настроим маршрут от 192.168.1.1 до 192.168.1.2 вот таким образом:

В общем, картинку не показывает — напишу руками:

route add 192.168.0.0 mask 255.255.255.0 gateway 192.168.1.2 

Это можно сделать только в одной подсети то есть нельзя сразу пробросить на адрес 192.168.0.2 или 192.168.0.3

Это нужно чтобы роутер знал где находится подсеть 192.168.0.0/24 (учите основы сетей это полезно).

Теперь добавляем проброс порта 3306 (порт mysql по дефолту (если вы его при установки только не поменяли)) на адрес 192.168.1.2

Вот осталось сделать самое сложное это сделать форвардинг на линукс машине(на ней две сетевые карточки 192.168.1.2 (интерфейс enp3s1) и 192.168.0.2(интерфейс enp3s0) чтобы сетевухи знали что перебросить их с 192.168.1.2 на 192.168.0.2, а потом на нашу Windows машину с MySql.

sudo iptables -A FORWARD -i enp3s1 -o enp3s0 -p tcp --syn --dport 3306 -m conntrack --ctstate NEW -j ACCEPT sudo iptables -A FORWARD -i enp3s1 -o enp3s0 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT sudo iptables -A FORWARD -i enp3s0 -o enp3s1 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT sudo iptables -t nat -A PREROUTING -i enp3s1 -p tcp --dport 3306 -j DNAT --to-destination 192.168.0.3 sudo iptables -t nat -A POSTROUTING -o enp3s0 -p tcp --dport 3306 -d 192.168.0.3 -j SNAT --to-source 192.168.1.2 и последняя строчка сохраняет введенные команды чтобы они при перезапуске оси не стерлись sudo service iptables-persistent save 

Т.е. 1я строчка значит что мы принимаем первое соединение, 2-я и 3-я что можно в обе стороны пускать пакеты, 4-я и 5-я значит замену адреса назначения и источника. И вуаля можно коннектиться из дома через mysql. И напоследок мой код на с++ который это делает:

//DataBaseConnection.cpp #include "DataBaseConnection.h" DataBaseConnection::DataBaseConnection() < >void DataBaseConnection::Connect() < // Получаем дескриптор соединения conn = mysql_init(NULL); if (conn == NULL) < // Если дескриптор не получен – выводим сообщение об ошибке fprintf(stderr, "Error: can'tcreate MySQL-descriptor\n"); //exit(1); //Если используется оконное приложение >// Подключаемся к серверу if (!mysql_real_connect(conn, "192.168.0.3", "root", "password", "your_base", NULL, NULL, 0)) < // Если нет возможности установить соединение с сервером // базы данных выводим сообщение об ошибке fprintf(stderr, "Error: can't connect to database: %s\n", mysql_error(conn)); >else < // Если соединение успешно установлено выводим фразу - "Success!" fprintf(stdout, "Success!\n"); >> std::vector DataBaseConnection::Query() < vectordrum.clear(); std::string query = "SELECT * FROM drum where char * q = query.c_str(); qstate = mysql_query(conn, q); if (!qstate) < res = mysql_store_result(conn); while (row = mysql_fetch_row(res)) < //printf("ID: %s,Position: %s, Image: %s\n", row[0], row[1], row[2]); vectordrum.push_back(row[2]); >> else < std::cout return vectordrum; > void DataBaseConnection::Close() < // Закрываем соединение с сервером базы данных mysql_close(conn); >DataBaseConnection::~DataBaseConnection() < vectordrum.clear(); >//DataBaseConnection.h #pragma once #include #include #include #pragma comment(lib,"mysqlcppconn.lib") #pragma comment(lib,"libmysql.lib") class DataBaseConnection < public: DataBaseConnection(); void Connect(); std::vectorQuery(); void Close(); ~DataBaseConnection(); MYSQL *conn; MYSQL_ROW row; MYSQL_RES *res; int qstate; std::vector vectordrum; >; 

Теперь можно смело скидывать эту программу кому угодно, и не надо переписывать чтобы она работала локально.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *