Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: Доступ к удаленной базе данных из PHP-скрипта?

Сообщения:  [1-10]   [11-14] 

 
 автор: cheops   (12.06.2012 в 23:41)   письмо автору
 
   для: Владимир55   (12.06.2012 в 23:32)
 

1. 3306 порт - это стандартный порт MySQL, как 80 для браузера, т.е. его можно не указывать, если сильно хочется указать, то можно это сделать традиционным способом в адресе localhost:3306, server.name.dev:3306.
2. Для выбора базы данных есть специальная функция mysql_select_db().
3. Даже лишку.
>Можно попросить создать пустую базу до 10 Гб со всеми правами, или для начала это лишнее?
Я бы поопасился так наглеть :))), тем более куда вам 10Гб?
4. Я думаю любой клиент можно использовать, какой вам удобнее, можно даже phpMyAdmin задействовать (причем расположенный локально у вас на машине!).

  Ответить  
 
 автор: Владимир55   (12.06.2012 в 23:32)   письмо автору
 
   для: cheops   (12.06.2012 в 19:42)
 

мне кажется владелец той базы вряд предоставит вам доступ на уровне СУБД.
может и не разрешат, а может наоборот - проблем не возникнет

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

* * *

1. Однако в атрибутах доступа я вижу номер порта. Порт 3306. Но дело не в том, какой именно порт, а где мне его указать? Ведь обычно используется только три элемента для доступа к базе - адрес сервера, логин, пароль. А куда же записать порт?

А вообще мне казалось, что само понятие "порт" связано с сервером, а не с базой...

* * *

2. И еще.

На сервере оказалось не одна база, а три. Имена их известны и работать можно со всеми тремя, но как указать в запросе, к какой именно базе идет конкретное обращение?

* * *

3. Во всех этих базах мне предоставлены права на:
- Получение данных
- Создание временных таблиц (существующих в рамках текущей сессии подключения к базе)
- Создание/изменение/выполнение хранимых функций и процедур
- Создание/просмотр представлений (VIEW)
- До 50 одновременных соединений с сервером MySQL
- Использовать постоянные соединения (mysql_pconnect).

Этого достаточно, чтобы попробовать получить что-нибудь из базы? Или нужны какие-то права контроля исполнения, без которых скрипт не настроить?

Можно попросить создать пустую базу до 10 Гб со всеми правами, чтобы научиться туда писать выборки, или для начала это лишнее?
База принадлежит крупной западной фирме и я слегка побаиваюсь ненароком что-нибудь там испортить...

* * *

4. Для подключения к базе рекомендуется использовать MySQL-клиент Navicat. Его можно скачать с самого сервера.

А что это такое?

  Ответить  
 
 автор: cheops   (12.06.2012 в 19:42)   письмо автору
 
   для: ols   (12.06.2012 в 18:33)
 

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

  Ответить  
 
 автор: ols   (12.06.2012 в 18:33)   письмо автору
 
   для: Владимир55   (12.06.2012 в 09:57)
 

Владимир, мне кажется владелец той базы вряд предоставит вам доступ на уровне СУБД.
cheops, предложил отличный вариант с xml.
Тут можно поступить двумя способами.
1. Если владелец согласится, то разработать некий интерфейс API для предоставления данных стороннему сервису. Обмен данных осущестляется в XML-формате.
2. Поуступить так, как предложил фрилансер, вполне разумный вариант. Чтобы вас не смущала сторона этичности, договоритесь с владельцем сайта.

  Ответить  
 
 автор: Владимир55   (12.06.2012 в 18:24)   письмо автору
 
   для: cheops   (12.06.2012 в 18:04)
 

Да, интересно очень получается! Спасибо!

Запросов, действительно, требуется несколько...

  Ответить  
 
 автор: cheops   (12.06.2012 в 18:04)   письмо автору
 
   для: Владимир55   (12.06.2012 в 16:09)
 

>Почему так?
>Ведь база данных продолжает работать как прежде. Страница его сайта (вместе с исполненым
>запросом)открывается мгновенно - значит, связь осуществляется быстро.
Страница открывается быстро, потому, что запросу и ответу бежать никуда по проводам не нужно - все происходит на уровне отражаемого в память файла... т.е. поместил запрос в оперативную память, его от туда баз данных взяла и обработала, потом положили ответ опять в память, откуда его взял скрипт (ну упрощенно так). Когда же вы шлете запрос по сети, на это уходит определенное время. Вы не один в Интернете, по вашему каналу, по каналу базы данных, по промежуточным каналам идет множество пакетов, запрос должен быть перекачен с одного сервера на другой, в ответ выдается результирующая таблица - хорошо если короткая, а не пару мегабайт, которых нужно перекачать обратно. Т.е. пять секунд - это вполне себе объективная реальность только для получения одного SQL-запроса (а их может быть несколько, а пока PHP не получит один ответ - он с места не сдвинется). В реальности это выглядит так, допустим пользователь отправляет вашему серверу запрос 1с, он практически сразу выдается и получает ответ 1с = 2с, теперь вместо "практически сразу" подставляйте 5с умноженное количество запросов. Понятно, что цифры взяты с потолка, однако, ситуация такова что вы становитесь заложником сети, лишь для формирования ответа... где-нибудь в Урюпински траторист разрезал оптоволоконный кабель и сигнал пошел через узкий международный канал в обход через какую-нибудь америку... время ответа от базы данных возросло до 20с и вы ничего не можете сделать, так как даже не представляете где и что делать. Если бы это был один запрос в сутки - вероятность этого была бы не велика, однако, если у вас таких запросов тысячи, вы просто можете ими выделенный вам канал забить - гоняя одни и те же данные по тысячами однотипных запросов. Поэтому в большинстве случаев прибегают к репликации - два или больше MySQL сервера, в один идет запись, а в другой передается бинарный лог, который вносит изменения, в результате данные передаются только один раз, а оба сервера содержат копию базы данных (пусть даже подчиненный сервер слегка отстает).

  Ответить  
 
 автор: Владимир55   (12.06.2012 в 16:09)   письмо автору
 
   для: cheops   (12.06.2012 в 15:02)
 

возможно владелец базы данных совершенно не захочет открывать вам её

Если я с чем-то соприкоснулся, то уж хочется разобраться. В любом случае, любопытство меня разбирает (по поводу того, как это делается).

запрос будет идти туда и ответ обратно за какое-то время, которое будет сильно больше, по сравнению с запросом к локальной базе данных

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

Или запросы к базе распространяются по сети каким-то особенным образом, и потому медленнее кодов открытия сайтов?

  Ответить  
 
 автор: cheops   (12.06.2012 в 15:02)   письмо автору
 
   для: Владимир55   (12.06.2012 в 11:26)
 

Все будет ровно также, PHP все-равно куда посылать запрос через TCP/IP к параллельному серверу на текущей машине или куда-то в дебри Интернета - это вообще не его забота, это забота TCP/IP, который работает давно и надежно. Другое дело, что запрос будет идти туда и ответ обратно за какое-то время, которое будет сильно больше, по сравнению с запросом к локальной базе данных. Впрочем ограничение в 30 секунд не должно срабатывать, так как время ожидания ответа от базы данных не учитывается (ну раньше по крайней мере не учитывалось). Хотя пользователю ответ придется подождать, конечно, подольше.

PS Впрочем, вы сильно не обнадеживайтесь, возможно владелец базы данных совершенно не захочет открывать вам её или у него вообще нет для этого технической возможности. Кроме того, ваши запросы - это дополнительная нагрузка, что в условиях такой объемной базы может быть критично. Помимо всего прочего, у меня большое подозрение, что там уже используется репликация и скорее всего (я бы так поступил) владелец вам предложит создать реплику базы данных, чтобы вы его сервера не трогали, а сами обеспечивали мощности для своей реплики (при необходимости осуществляя горизонтальное масштабирование).

  Ответить  
 
 автор: Владимир55   (12.06.2012 в 11:26)   письмо автору
 
   для: cheops   (12.06.2012 в 11:09)
 

А результат выполнения запроса получить как?

Я бы сделал
<?
    
//Выполнение SQL-запроса
    
$result mysql_query($query);
    
//Обработка и вывод результатов SQL-запроса
    
while ($row mysql_fetch_array($resultMYSQL_ASSOC)){


Но это если бы внутри сервера. А как данные с чужого сервера другого хостера попадут в переменные на моем скрипте?

Разве такое возможно?

  Ответить  
 
 автор: cheops   (12.06.2012 в 11:09)   письмо автору
 
   для: Владимир55   (12.06.2012 в 10:56)
 

Через PHP-скрипт точно также как и прямой разбор страницы, только обычно используют что-то более удобное, например, XML-формат. Если у вас будет открыт доступ непосредственно к базе данных, то вместо localhost нужно будет указать адрес сервера.

>С Денвера это возможно?
Можно.

  Ответить  

Сообщения:  [1-10]   [11-14] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования