===== Настройка веб-сервера на базе стека LEMP в Ubuntu Server 14.04 LTS. Часть 6. Установка и настройка MySQL для поддержки Wordpress и phpBB ===== Как я понял, многие администраторы веб-серверов вместе с серверной службой **MySQL** предпочитают разворачивать веб-утилиту **phpMyAdmin** для более комфортной работы с базами данных MySQL. Однако исходя из принципа "разумно необходимого минимума", сопряжённого с соображениями о повышении уровня безопасности веб-сервера в целом, я полагаю, что можно прожить и без этого инструмента. К тому же количество операций по администрированию БД MySQL в нашем случае сведено к такой величине, при которой все действия запросто могут быть выполнены с помощью консольного клиента **mysql-client** при условии удалённого доступа к консоли нашего веб-сервера через [[:unix-linux:ubuntu:ubuntu-14-04-lts-trusty-tahr:how-to-install-lemp-web-server-on-ubuntu-14-04:setup-open-ssh-and-fail2ban|SSH]]. \\ ==== Установка MySQL ==== Установим сервер MySQL и консольный клиент для управления базами данных: sudo apt-get update sudo apt-get install mysql-server mysql-client В процессе установки мы получим запрос на установление пароля для root-пользователя mysql. Не путайте этого пользователя с root-пользователем Linux и, соответственно назначайте пароль отличный от системного root-a. {{ :unix-linux:ubuntu:ubuntu-14-04-lts-trusty-tahr:how-to-install-lemp-web-server-on-ubuntu-14-04:pasted:20160329-094834.png }} После ввода пароля нас попросят ввести его ещё раз, чтобы исключить возможность опечаток/ошибок. {{ :unix-linux:ubuntu:ubuntu-14-04-lts-trusty-tahr:how-to-install-lemp-web-server-on-ubuntu-14-04:pasted:20160329-094850.png }} \\ ==== Запуск скрипта mysql_secure_installation ==== Сразу после завершения процесса установки нам необходимо задействовать минимально безопасный режим работы сервера mysql. Для этого запустим специальный инструмент, входящий в состав поставки mysql: sudo mysql_secure_installation Запущенный скрипт задаст нам ряд вопросов, на которые нужно будет правильно ответить для повышения безопасности сервера mysql. На первый запрос введём ранее заданный нами пароль root-пользователя mysql: Enter current password for root (enter for none): OK, successfully used password, moving on... На вопрос о смене пароля можно отказаться, так как ранее мы уже задали root-пароль: You already have a root password set, so you can safely answer 'n'. Change the root password? [Y/n] n ... skipping. На вопрос об отключении анонимного пользователя отвечаем утвердительно: Remove anonymous users? [Y/n] Y ... Success! На вопрос об отключении удалённого доступа root-пользователя к mysql отвечаем утвердительно: Disallow root login remotely? [Y/n] Y ... Success! Соглашаемся с удалением тестовой БД. Это может быть важно, учитывая факты изложенные в некоторых источниках, например в заметке [[https://debian.pro/1252|Debian.pro - mysql-server в Ubuntu, база test. Решето.]] Remove test database and access to it? [Y/n] Y - Dropping test database... ERROR 1008 (HY000) at line 1: Can't drop database 'test'; database doesn't exist ... Failed! Not critical, keep moving... - Removing privileges on test database... ... Success! Как видим, в нашей инсталляции тестоввая БД отсутсвует в конфигурации по умолчанию. В конце работы скрипта соглашаемся с применением параметров безопасности: Reload privilege tables now? [Y/n] Y ... Success! Cleaning up... All done! If you've completed all of the above steps, your MySQL installation should now be secure. Thanks for using MySQL! \\ ==== Подключение к серверу MySQL ==== Подключимся клиентом к серверу и посмотрим его статус. Выполним команду подключения от имени root-пользователя mysql: mysql -u root -p Будет запрошен пароль root, введём его и попадём в приглашение командной строки mysql-клиента для работы с сервером: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 36 Server version: 5.5.47-0ubuntu0.14.04.1 (Ubuntu) Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> Введём команду вывода информации о состоянии сервера mysql: mysql> status Получим ответ отсервера: -------------- mysql Ver 14.14 Distrib 5.5.47, for debian-linux-gnu (x86_64) using readline 6.3 Connection id: 62 Current database: Current user: root@localhost SSL: Not in use Current pager: stdout Using outfile: '' Using delimiter: ; Server version: 5.5.47-0ubuntu0.14.04.1 (Ubuntu) Protocol version: 10 Connection: Localhost via UNIX socket Server characterset: latin1 Db characterset: latin1 Client characterset: utf8 Conn. characterset: utf8 UNIX socket: /var/run/mysqld/mysqld.sock Uptime: 20 min 53 sec \\ ==== Изменение конфигурации сервера MySQL ==== Как видно из предыдущего ответа mysql-сервера, для сервера и для вновь создаваемых БД по умолчанию установлена кодировка **latin1**. Изменим это значение на **utf-8**, добавив соответсвующие параметры в главный конфигурационный файл mysql-сервера: **/etc/mysql/my.cnf** sudo nano /etc/mysql/my.cnf Приведу выдержки с параметрами в некоорых секциях, на которые нужно обратить внимание и которые нужно изменить или добавить: [client] # Изменим кодировку по умолчанию для клиентских подключений на utf-8 default-character-set = utf8 [mysqld] # По умолчанию mysql не принимает tcp соединения т.к. прослушивает только 127.0.0.1 bind-address = 127.0.0.1 # Изменим кодировку по умолчанию для сервера # и вновь создаваемых баз с дефолтной latin1 на utf-8 # skip-character-set-client-handshake character-set-server = utf8 init-connect='SET NAMES utf8' collation-server=utf8_general_ci [mysqldump] # Изменим кодировку по умолчанию для утилиты резервного копирования на utf-8 default-character-set = utf8 Остальные параметры файла **my.cnf** в большинстве случаев можно оставить в значениях по умолчанию. Для вступления изменений в силу перезагрузим службу **mysql**: sudo service mysql restart \\ ==== Создание пользовательского файла настроек MySQL ==== Для того, чтобы каждый раз не вводить учётные данные для подключения к mysql-серверу при работе с mysql-клиентом, можно создать пользовательский файл настроек **.my.cnf** в домашнем каталоге пользователя. В нашем случае это будет полезно сделать ещё и для того, чтобы там же указать учётные данные для утилиты **mysqldump**, которую в перспективе мы будем вызывать из скриптов резервного копирования. Это позволит нам лишний раз "не светить" учётные данные пользователя mysql в скриптах. Самое главное при создании файла **.my.cnf** правильно настроить права доступа к нему, чтобы не скомпрметировать хранимые в нём учётные данные. Так как наши скрипты резервного копирования в перспективе будут выполняться от имени root-пользователя Linux, то и размещать файл **.my.cnf** мы будем в его домашней папке "/root/" sudo touch /root/.my.cnf sudo chown root:root /root/.my.cnf sudo chmod 600 /root/.my.cnf Наполним файл содержимым: [mysql] user = root password = 'MyStr#ngMySQLpaSSw0rD' [mysqldump] user = root password = 'MyStr#ngMySQLpaSSw0rD' Созраняем файл и проверяем подключение к mysql предварительно переключившись в режим суперпользователя: sudo su- sudo mysql Если **mysql** не запросил у нас учётные данные, значит их передача из файла **.my.cnf** работает. \\ ==== Проверка взаимодействия MySQL и PHP ==== Проверим возможность работы связки MySQL и PHP. Для этого создадим временный php-скрипт с каким-нибудь "диким" именем, например **kJzfgdf5klhG2.php**, в корне любого из [[:unix-linux:ubuntu:ubuntu-14-04-lts-trusty-tahr:how-to-install-lemp-web-server-on-ubuntu-14-04:setup-nginx-global-params-and-virtual-hosts-for-php-fpm|наших сайтов nginx]]: sudo nano /var/www/html/blog/kJzfgdf5klhG2.php Наполним скрипт вызовом php-функций для подключения к mysql с явным указанием учётных данных mysql-сервера: Перейдем веб-браузером по адресу http://blog.mydomain.ru/kJHfgdf5klhHJ2.php Если в результате в браузере увидим текст "OK... Localhost via UNIX socket", то можно считать что связка MySQL и PHP работает. После проведения теста обязательно сразу удалим тестовый скрипт, чтобы избежать риска утечки учётных данных sudo rm /var/www/html/blog/kJzfgdf5klhG2.php \\ ==== Создание баз данных MySQL для сайтов ==== Создадим новые пустные базы данных для наших сайтов. При созданиии будем придерживаться простой схемы разграничения доступа:\\ **1** пользователь mysql = **1** база данных = **1** сайт Подключимся к mysql $ sudo su - # mysql Создадим новую базу данных для первого сайта (блога Wordpress): mysql> CREATE DATABASE `blog-db`; Query OK, 1 row affected (0.00 sec) Создадим нового пользователя mysql: mysql> CREATE USER 'blog-usr'@'localhost' IDENTIFIED BY 'MySQLdbBlogPaSSw0rD'; Query OK, 0 rows affected (0.00 sec) Выдадим пользователю полные права на доступ к базе: mysql> GRANT ALL ON `blog-db`.* TO 'blog-usr'@'localhost'; Query OK, 0 rows affected (0.00 sec) По аналогии создадим пустые базы данных для всех сайтов, которым нужен будет доступ к mysql. Этого достаточно, чтобы в последствии залить дамп (резервную копию данных из *.sql файла) в созданную БД и подключить к скриптам сайта. Эти процедуры будут рассмотрены в следующих частях руковоства. \\ ==== Дополнительные источники информации ==== [[http://help.ubuntu.ru/wiki/mysql|Ubuntu.ru Wiki - MySQL]] ---- {{:user:blogroot.png?50&nolink |}} Автор первичной редакции:\\ [[user:blogroot|Алексей Максимов]] \\ Время публикации: 29.03.2016 22:03 {{tag>Linux Ubuntu "Ubuntu 14.04" "14.04 LTS" "Ubuntu Server" "web server" LEMP PHP MySQL charset Security root}} ~~DISCUSSION~~