Вики 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

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Следующая версия
Предыдущая версия
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 [26.03.2016 23:07] – создано Алексей Максимов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 [07.11.2016 14:31] (текущий) – [Запуск скрипта mysql_secure_installation] Алексей Максимов
Строка 1: Строка 1:
 ===== Настройка веб-сервера на базе стека LEMP в Ubuntu Server 14.04 LTS. Часть 6. Установка и настройка MySQL для поддержки Wordpress и phpBB ===== ===== Настройка веб-сервера на базе стека 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 и консольный клиент для управления базами данных:
 +
 +<code>
 +sudo apt-get update
 +sudo apt-get install mysql-server mysql-client
 +</code>
 +
 +В процессе установки мы получим запрос на установление пароля для 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:
 +
 +<code>sudo mysql_secure_installation</code>
 +
 +Запущенный скрипт задаст нам ряд вопросов, на которые нужно будет правильно ответить для повышения безопасности сервера mysql.
 +На первый запрос введём ранее заданный нами пароль root-пользователя mysql:
 + 
 +<code>Enter current password for root (enter for none):
 +
 +OK, successfully used password, moving on...</code>
 +
 +На вопрос о смене пароля можно отказаться, так как ранее мы уже задали root-пароль:
 +
 +<code>You already have a root password set, so you can safely answer 'n'.
 +Change the root password? [Y/n] n
 +
 + ... skipping.</code>
 +
 +На вопрос об отключении анонимного пользователя отвечаем утвердительно:
 +
 +<code>Remove anonymous users? [Y/n] Y
 +
 + ... Success!</code>
 +
 +На вопрос об отключении удалённого доступа root-пользователя к mysql отвечаем утвердительно:
 +
 +<code>Disallow root login remotely? [Y/n] Y
 +
 + ... Success!</code>
 +
 +Соглашаемся с удалением тестовой БД. Это может быть важно, учитывая факты изложенные в некоторых источниках, например в заметке [[https://debian.pro/1252|Debian.pro - mysql-server в Ubuntu, база test. Решето.]]
 +
 +<code>
 +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!
 +</code>
 +
 +Как видим, в нашей инсталляции тестоввая БД отсутсвует в конфигурации по умолчанию.
 +
 +В конце работы скрипта соглашаемся с применением параметров безопасности:
 +
 +<code>
 +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!
 +</code>
 +
 +\\
 +==== Подключение к серверу MySQL ====
 +
 +Подключимся клиентом к серверу и посмотрим его статус. 
 +Выполним команду подключения от имени root-пользователя mysql:
 +
 +<code>mysql -u root -p</code>
 +
 +Будет запрошен пароль root, введём его и попадём в приглашение командной строки mysql-клиента для работы с сервером:
 +
 +<code>
 +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>
 +</code>
 +
 +Введём команду вывода информации о состоянии сервера mysql: 
 +
 +<code>mysql> status</code>
 +
 +Получим ответ отсервера:
 +
 +<code>
 +--------------
 +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
 +</code>
 +
 +\\
 +==== Изменение конфигурации сервера MySQL ====
 +
 +Как видно из предыдущего ответа mysql-сервера, для сервера и для вновь создаваемых БД по умолчанию установлена кодировка **latin1**.
 +Изменим это значение на **utf-8**, добавив соответсвующие параметры в главный конфигурационный файл mysql-сервера: **/etc/mysql/my.cnf**
 +
 +<code>sudo nano /etc/mysql/my.cnf</code>
 +
 +Приведу выдержки с параметрами в некоорых секциях, на которые нужно обратить внимание и которые нужно изменить или добавить:
 +
 +<file bash /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
 +
 +</file>
 +
 +Остальные параметры файла **my.cnf** в большинстве случаев можно оставить в значениях по умолчанию.
 +
 +Для вступления изменений в силу перезагрузим службу **mysql**: 
 +
 +<code>sudo service mysql restart</code>
 +
 +\\
 +==== Создание пользовательского файла настроек MySQL ====
 +
 +Для того, чтобы каждый раз не вводить учётные данные для подключения к mysql-серверу при работе с mysql-клиентом, можно создать пользовательский файл настроек **.my.cnf** в домашнем каталоге пользователя.
 +В нашем случае это будет полезно сделать ещё и для того, чтобы там же указать учётные данные для утилиты **mysqldump**, которую в перспективе мы будем вызывать из скриптов резервного копирования. 
 +Это позволит нам лишний раз "не светить" учётные данные пользователя mysql в скриптах.
 +Самое главное при создании файла **.my.cnf** правильно настроить права доступа к нему, чтобы не скомпрметировать хранимые в нём учётные данные.
 +Так как наши скрипты резервного копирования в перспективе будут выполняться от имени root-пользователя Linux, то и размещать файл **.my.cnf** мы будем в его домашней папке "/root/" 
 +
 +<code>
 +sudo touch /root/.my.cnf
 +sudo chown root:root /root/.my.cnf
 +sudo chmod 600 /root/.my.cnf
 +</code>
 +
 +Наполним файл содержимым: 
 +
 +<file bash /root/.my.cnf>
 +[mysql]
 +user = root
 +password = 'MyStr#ngMySQLpaSSw0rD'
 +
 +[mysqldump]
 +user = root
 +password = 'MyStr#ngMySQLpaSSw0rD'
 +</file>
 +
 +Созраняем файл и проверяем подключение к mysql предварительно переключившись в режим суперпользователя:
 +
 +<code>
 +sudo su-
 +sudo mysql
 +</code>
 +
 +Если **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]]: 
 +
 +<code>sudo nano /var/www/html/blog/kJzfgdf5klhG2.php</code>
 + 
 +Наполним скрипт вызовом php-функций для подключения к mysql с явным указанием учётных данных mysql-сервера:
 +
 +<code>
 +<?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);
 +?>
 +</code>
 +
 +Перейдем веб-браузером по адресу http://blog.mydomain.ru/kJHfgdf5klhHJ2.php
 +
 +Если в результате в браузере увидим текст "OK... Localhost via UNIX socket", то можно считать что связка MySQL и PHP работает.
 +
 +<WRAP center alert>
 +После проведения теста обязательно сразу удалим тестовый скрипт, чтобы избежать риска утечки учётных данных
 +
 +<code>sudo rm /var/www/html/blog/kJzfgdf5klhG2.php</code>
 +</WRAP>
 +
 +
 +\\
 +==== Создание баз данных MySQL для сайтов ====
 +
 +Создадим новые пустные базы данных для наших сайтов.
 +При созданиии будем придерживаться простой схемы разграничения доступа:\\
 +**1** пользователь mysql = **1** база данных = **1** сайт
 +
 +Подключимся к mysql
 +<code>
 +$ sudo su -
 +# mysql
 +</code>
 +
 +Создадим новую базу данных для первого сайта (блога Wordpress):
 +
 +<code mysql>
 +mysql> CREATE DATABASE `blog-db`;
 +
 +Query OK, 1 row affected (0.00 sec)
 +</code>
 +
 +Создадим нового пользователя mysql:
 +
 +<code mysql>
 +mysql> CREATE USER 'blog-usr'@'localhost' IDENTIFIED BY 'MySQLdbBlogPaSSw0rD';
 +
 +Query OK, 0 rows affected (0.00 sec)
 +</code>
 +
 +Выдадим пользователю полные права на доступ к базе:
 +
 +<code mysql>
 +mysql> GRANT ALL ON `blog-db`.* TO 'blog-usr'@'localhost';
 +
 +Query OK, 0 rows affected (0.00 sec)
 +</code>
 +
 +По аналогии создадим пустые базы данных для всех сайтов, которым нужен будет доступ к 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~~
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.1459022826.txt.gz · Последнее изменение: 26.03.2016 23:07 — Алексей Максимов

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki