Q:

Как работает mysql?

Привет. 
Вопрос по системам управления базами данных. Не понимаю, как работает mysql. Есть программа-клиент - это программа, которая ПОЛЬЗУЕТСЯ. Есть программа-сервер - это программа, которая ПРЕДОСТАВЛЯЕТ. Вот рисунок того, как СУБД работает в связке с PHP.

Из рисунка видно, браузер посылает GET-запрос веб-серверу - "Дай мне документ script.php, держи еще параметр". Веб-сервер находит этот документ в папке-сайте и отдает на отработку интерпретатору PHP со словами "Вот тебе документ, отработай его + держи серверные переменные, которые я из HTTP-заголовка запроса браузера вытащил ($_GET, $_SERVER)". Программа-интерпретатор PHP находит в скрипте <?php ...?> ЗАПРОС и посылает его СУБД, которая лезет в конкретную папку-базу данных, берет оттуда какие-то данные и ВЫДАЕТ обратно программе-интерпретатору PHP . Получается, что интерпретатор PHP - это клиент. На рисунке видно, что интерпретатор PHP и сервер mysql находятся на одном компьютере - сервере. Могут ли они (интерпретатор PHP и сервер mysql) быть на РАЗНЫХ компах? Если да, то по какому протоколу они "общаются" между собой? 
Например, браузер и веб-сервер общаются непосредственно по протоколу HTTP . Браузер делает запрос, который имеет вид "заголовок HTTP" + "тело данных (может быть пустым, если запрос идет методом GET)", происходит процесс передачи (опускаю момент, как именно данные передаются), а веб-сервер его получает в таком же виде. Потом веб-сервер отвечает браузеру.
Какая программа кроме интерпретатора PHP может быть клиентом сервера mysql?
Если я работаю с СУБД mysql в командной строке, то для работы надо зайти в программу mysql monitor - вводится mysql.exe -uroot -p . Зачем вводится логин и пароль при запуске mysql monitor? Еще можно ввести хост (\h). Можно ли работать с сервером mysql, когда клиент на одном компе ,а сервер mysql - на другом компе?
Как поймать вайршарком заголовок этого протокола mysql? хочу посмотреть, как происходит обмен данными

A:

Могут ли они (интерпретатор PHP и сервер MySQL) быть на разных компах?

Да! Обычно MySQL работает через локальную петлю, но она явлется сетевым адаптером, и ничто не мешает MySQL работать и через настоящую сеть.
Более того, по мере роста системы вынос БД на отдельную машину может быть вынужденной мерой, скажем, чтобы вместо одного сервера иметь кластер. Или... в Docker, к примеру, принято иметь контейнер с БД отдельно от контейнера приложения. А контейнеры взаимодействуют между собой по сети практически как разные машины.

Если да, то по какому протоколу они "общаются" между собой?

По протоколу MySQL. Отдельного названия у него нет, т. к. сформировался он в MySQL, и хотя появились и другие БД, его реализующие, они себя позиционируют как "совместимые с протоколом MySQL".

Какая программа кроме интерпретатора PHP может быть клиентом сервера MySQL?

Любая, при условии, конечно, что она может установить с сервером БД TCP-соединение (именно TCP, не уровнями выше) и может реализовать протокол MySQL.
Конечно, есть целый набор библиотек-коннекторов для разных языков, реализующий этот протокол, поэтому обычно достаточно подключить библиотеку и начинать работу. А поскольку одна из официальных библиотек-коннекторов написана на С, прицепить её можно почти к любому языку программирования.

Зачем вводится логин и пароль при запуске mysql monitor?

Потому что БД иначе не разрешит доступ. Это ж клиент. А сервер требует представиться перед началом работы, чтобы определить привилегии клиента.

Еще можно ввести хост (\h). Можно ли работать с сервером mysql, когда клиент на одном компе ,а сервер mysql - на другом компе?

Ключ h для того и нужен. Правда, у вас должна быть возможность дотянуться до порта, на котором работает MySQL. Сколько видел разных MySQL, по умолчанию они слушают только локальную петлю и внешние соединения не принимают. Из соображений безопасности, конечно. Это не мешает прокинуть этот порт через SSH-тоннель, где на том конце соединение будет видно, как с локальной машины. SSH относительно безопасен.

