Как ни странно, но с базами данных мы сталкиваемся каждый день, даже не замечая этого... Когда же приходится замечать это (например, разрабатывая СУБД для сайта), возникает вопрос - как делать?
Можно, конечно, разработать свой формат (хорошо подходит для маленьких проектов) и использовать его, преисполнившись гордости, но когда идёт речь о тысячах элементов... Так и я - сначала разработал свою собственную СУБД со своим форматом, узкими возможностями, возможностью перехода СУБД с Perl'а на исполняемый двоичный код... Однако, очень скоро (практически сразу) стало понятно, что на этой "самопальной" технологии далеко не уедешь. И тогда я обратил свой взор на packages/All/mysql-server-xxxx
MySQL - это широко распространённая реализация СУБД на базе языка запросов SQL. Этот язык достаточно мощный, чтобы организовывать банк данных (!!!) с разграничением доступа по базам данных, таблицам и даже отдельным колонкам в таблицах (как правило, БД - реляционные; за более подробной информацией по базам данных, а также языку SQL обращаетесь к соответствующей литературе). Этот язык поддерживается такой известной СУБД, как Microsoft Access ™ ;). Язык SQL достаточно простой, а существование для него огромного количества программного обеспечения и интерфейсов для языков программирования (PERL и C не оставлены без внимания) приближает наш мир ещё на один шаг к совершенству;).
Тут всё до безобразия просто:
Cоздаются таблицы db, host, user, func, tables_priv, columns_priv (подробнее об этом ниже), затем нас просят не забыть установить пароль для пользователя root, показывают как запускать демон mysqld (да-да, mysql - это именно демон,причём сетевой!) и как тестировать его, куда писать об ошибках. Также в систему добавляется пользователь и группа mysql, от именм которых будет работать mysqld. Помимо сервера в систему добавляется клиент mysql.
Начинаем...
Запускаем демон (через /usr/local/etc/rc.d/mysql-server.sh start, либо через shutdown now, либо через reboot), смотрим кто какие сокеты у нас занимает.
Я думаю, что не следует пренебрегать инструкциями инсталлятора и игнорировать пароли для доступа к базе. Но для начала посмотрим, куда раскидали документацию по mysql; в /usr/local/share/doc/mysql/ спряталось очень хорошее руководство пользователя (2 Мб в html-формате!) по mysql; ищем в man mysql - выдаёт справку по использованию клиента для mysql, но в ссылках есть и mysqld. Вобщем, на отсутствие документации не жалуемся...
MySQL по умолчанию создаёт базы данных в директории /var/db/mysql/. Эта директория является корнем БАНКА ДАННЫХ. Если Вы создаёте какую-либо базу данных, то в этой директории создаётся ещё один каталог с именем базы. MySQL создаёт БД mysql и test. Test пустой, а вот в mysql хранится важная информация. Именно в эту базу данных записываются настройки СУБД, хранятся учётные записи пользователей и другая необходимая информация. Как видите, MySQL хранит информацию о СУБД в самой СУБД!
Чтобы сменить пароль для пользователей подключаемся к СУБД:
bash-2.05a# mysql -h localhost
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 4 to server version: 3.23.49
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql>
Для создания пользователей для СУБД и управления паролями вам необходим аккаунт суперпользователя, однако в mysql входить в систему как root необязательно; в командной строке введите следующее:
bash-2.05a$ mysql -h localhost -u root -p
Будет выдан запрос на ввод пароля суперпользователя (вообще, опция -u определяет, "под" каким пользователем Вы собираетесь войти в систему, а -p - указывает на необходимость запроса пароля. Если у вас аккаунт root беспарольный, то можете не писать эту опцию ;))
Как Вы уже знаете, вся информация о СУБД хранится в базе данных mysql. Вот её-то мы и будем использовать:
mysql> use mysql
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql>
В руководстве по mysql написано, что для смены пароля суперпользователя необходимо ввести следующую строку:
mysql> SET PASSWORD FOR root=PASSWORD('my_very_cool_pass');
Error: No articles to display