Вики IT-KB

Пошаговые руководства, шпаргалки, полезные ссылки...

Инструменты пользователя

Инструменты сайта


unix-linux:ubuntu:ubuntu-14-04-lts-trusty-tahr:how-to-install-lemp-web-server-on-ubuntu-14-04:setup-mysql-for-wordpress-and-phpbb

Настройка веб-сервера на базе стека LEMP в Ubuntu Server 14.04 LTS. Часть 6. Установка и настройка MySQL для поддержки Wordpress и phpBB

Как я понял, многие администраторы веб-серверов вместе с серверной службой MySQL предпочитают разворачивать веб-утилиту phpMyAdmin для более комфортной работы с базами данных MySQL. Однако исходя из принципа «разумно необходимого минимума», сопряжённого с соображениями о повышении уровня безопасности веб-сервера в целом, я полагаю, что можно прожить и без этого инструмента. К тому же количество операций по администрированию БД MySQL в нашем случае сведено к такой величине, при которой все действия запросто могут быть выполнены с помощью консольного клиента mysql-client при условии удалённого доступа к консоли нашего веб-сервера через SSH.


Установка MySQL

Установим сервер MySQL и консольный клиент для управления базами данных:

sudo apt-get update
sudo apt-get install mysql-server mysql-client

В процессе установки мы получим запрос на установление пароля для root-пользователя mysql. Не путайте этого пользователя с root-пользователем Linux и, соответственно назначайте пароль отличный от системного root-a.

После ввода пароля нас попросят ввести его ещё раз, чтобы исключить возможность опечаток/ошибок.


Запуск скрипта 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!

Соглашаемся с удалением тестовой БД. Это может быть важно, учитывая факты изложенные в некоторых источниках, например в заметке 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

Приведу выдержки с параметрами в некоорых секциях, на которые нужно обратить внимание и которые нужно изменить или добавить:

/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

Наполним файл содержимым:

/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, в корне любого из наших сайтов nginx:

sudo nano /var/www/html/blog/kJzfgdf5klhG2.php

Наполним скрипт вызовом php-функций для подключения к mysql с явным указанием учётных данных mysql-сервера:

<?php
  $link = mysqli_connect('localhost','root','MyStr#ngMySQLpaSSw0rD');
  if(!$link)
    die('Connection error (' . mysqli_connect_errno() . ') ' . mysqli_connect_error());
 
  echo 'OK... ' . mysqli_get_host_info($link) . "\n";
  mysqli_close($link);
?>

Перейдем веб-браузером по адресу 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 файла) в созданную БД и подключить к скриптам сайта. Эти процедуры будут рассмотрены в следующих частях руковоства.


Дополнительные источники информации

Ubuntu.ru Wiki - MySQL


Автор первичной редакции:
Алексей Максимов
Время публикации: 29.03.2016 22:03

Обсуждение

Ваш комментарий:
 

unix-linux/ubuntu/ubuntu-14-04-lts-trusty-tahr/how-to-install-lemp-web-server-on-ubuntu-14-04/setup-mysql-for-wordpress-and-phpbb.txt · Последние изменения: 07.11.2016 14:31 — Алексей Максимов