Всем привет. Меня выписали из больницы. Здоровье пока слабое. Буду потихоньку восстанавливать активность на канале, но многие вещи пока не в состоянии делать, т.к. быстро утомляюсь.
Пока что продолжим цикл про собственный веб-сервер. Ранее мы установили веб-сервер Apache и язык программирования PHP. Остался третий компонент – база данных.
Зачем нам база данных?
Конечно, это не обязательный компонент, но современные сайты без баз данных в принципе сложно представить. Логины-пароли пользователей, новости, комментарии – всё это данные, и все они должны где-то храниться.
Для наших упражнений мы задумали сделать сайт-каталог в широком смысле. То есть мы можем создавать и хранить записи, которые описывают наши вещи, или просто заметки, ну то есть в целом можно каталогизировать что угодно. Поэтому база нам всё равно нужна, и начнём с неё, а какую-нибудь практическую задачу для сайта придумаем по ходу пьесы.
Почему это база данных?
Вопрос тут именно в слове "база", то есть что значит "база"?
Вообще говоря, любой набор данных можно назвать базой данных, и она у нас уже есть. Например, в компьютере есть жёсткий диск. На диске лежат файлы. Вы можете создать новый файл – то есть единицу данных – и поместить в него какую-то информацию. Если мы ведём каталог, то можем просто записать кучу строчек в один текстовый файл. Либо каждую строчку сохранить в собственный отдельный файл. И в том и в другом случае мы получили некое хранилище.
У этого хранилища есть, во-первых, структура – то есть мы знаем, где, какие данные и в каком формате там хранятся. И во-вторых, у него есть средства для получения данных. Мы можем искать файлы в проводнике, и затем открыть, например, файл с помощью текстового редактора, прочитать его глазами, или скопировать из него текст, и т.д.
Совокупность самих данных, плюс способ хранения, плюс способ поиска и извлечения, и составляет базу данных.
Естественно, что вместо хранения каких-то самопальных файлов с какими-то хаотичными записями было бы круто иметь именно централизованную, надёжную и унифицированную систему для хранения, поиска и обработки данных, с которой можно работать в том числе программно.
SQL и NoSQL
Базы данных можно поделить на две категории. Они отличаются тем, как представлены данные, как налажены структурные связи между ними, и какими методами производится поиск данных.
SQL – это специальный язык запросов для обработки данных (Structured Query Language). До него мы доберёмся, но на данный момент надо знать, что SQL в силу своей природы формирует определённый подход к организации данных. Это похоже на объектно-ориентированный подход в программировании: каждый набор данных описан как отдельный объект со своей структурой и свойствами, а объекты связаны друг с другом через специальные ссылки.
В свою очередь, NoSQL – это вообще не язык, это просто не-SQL. NoSQL-база не имеет выраженной структуры или объектов, а представляет собой произвольную коллекцию из пар "ключ–значение".
Оба подхода имеют практическое применение и сильные и слабые стороны. Мы начнём с более традиционного, и сейчас будем ставить систему управления базой данный (СУБД) на основе SQL, а именно – знаменитый "мускул", MySQL.
Что из себя представляет MySQL?
Физически это программа, которая является сервером. Пример сервера у нас уже есть – это Apache. Но Apache это HTTP-сервер, который обслуживает HTTP-запросы. И как мы знаем, для HTTP-запросов выделен специальный порт 80, который и слушает сервер.
MySQL-сервер тоже слушает запросы. Но это уже не HTTP, а SQL-запросы. И естественно, чтобы слушать эти запросы, также выделен специальный порт: 3306.
То есть, у нас на машине будет работать два сервера: первый это Apache на порту 80, и второй это MySQL на порту 3306. Они независимы друг от друга, это самостоятельные сущности, каждая из которых обслуживает собственные запросы по собственному протоколу.
Установка MySQL
Качаем архив отсюда: https://dev.mysql.com/downloads/mysql/
Далее распаковываем архив в какую-нибудь папку. Как вы помните, мы выделили под всяческую разработку папку c:/usr/dev, в которой уже есть Apache и PHP, так что ничего не мешает добавить c:/usr/dev/mysql.
Далее заходим в подкаталог /bin, где находятся исполняемые файлы MySQL. И инициализируем базу:
mysqld --initialize-insecure
Что здесь происходит:
mysqld это программа-сервер (сравните с httpd). Буква "d" в конце указывает на то, что это "daemon", то есть в Линукс-терминологии программа, которая работает в фоновом режиме.
Ключ запуска --initialize-insecure заставляет выполнить первичную инициализацию каталога данных, внутренних таблиц и пользовательских прав. В данном случае мы генерируем пользователя root без пароля, поэтому insecure (небезопасно). На самом деле это роли пока не играет, а нам так проще.
После того, как каталог данных проинициализирован (по умолчанию он будет находиться в подкаталоге /data), нам останется только добавить сервис MySQL в систему, чтобы он загружался автоматически и работал в фоновом режиме (это нужно делать с правами администратора):
mysqld --install
А добавив сервис, можно его наконец запустить:
net start mysql
Всё, у нас должен быть работающий сервер базы данных. Проверить его работу мы можем, запустив программу mysql.exe из подкаталога /bin.
Обратите внимание, что это не mysqld, а просто mysql – клиентская программа, которая присоединяется к серверу. При запуске нужно указать имя пользователя root:
mysql -u root
Если вы видите такой экран, то значит всё работает. Мы можем уже начать вводить какие-то SQL-запросы. Например,
show databases;
Показывает, какие базы данных сейчас есть на сервере.
Мы видим четыре базы, и все они – служебные, то есть мы ими пользоваться не можем, они нужны самому MySQL, чтобы поддерживать структуру данных и вести статистику. Чтобы хранить собственные данные, нам нужно создать собственную базу.
Этим мы займёмся в следующих выпусках, когда начнём делать собственный сайт-каталогизатор.
А пока вы можете выйти из MySQL-клиента с помощью команды exit :)
Читайте дальше: Создание базы данных