===== Настройка веб-сервера на базе стека 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~~