База знаний

Часто задаваемые вопросы, на которые мы уже ответили

MySQL

MySQL — реляционная система управления базами данных, доступная для работы на различных операционных системах. В данной инструкции мы установим и настроим MySQL-сервер на виртуальную машину с ОС семейства Unix.

Установка

Debian/Ubuntu

  • Устанавливаем пакеты MySQL-сервера, клиента и для взаимодействия с PHP:
$ apt-get install mysql-server mysql-client php5-mysql

В процессе установки появится диалоговое окно, где нужно ввести root-пароль для MySQL.

CentOS 6

  • Аналогично Debian/Ubuntu, устанавливаем пакеты MySQL-сервера, клиента и для взаимодействия с PHP:
$ yum install mysql-server php-mysql

CentOS 7

По умолчанию в CentOS 7 при выполнении команды yum install mysql производится установка MariaDB.

Перед установкой необходимо подключить репозиторий с официального сайта MySQL.

  • Устанавливаем утилиту wget:
$ yum install wget
  • Загружаем официальный репозиторий MySQL:
$ wget http://repo.mysql.com/mysql57-community-release-el7.rpm
  • Выполняем его подключение:
$ rpm -ivh mysql57-community-release-el7.rpm
  • Обновляем менеджер пакетов:
$ yum update
  • Устанавливаем MySQL-сервер и пакет для работы с PHP:
$ yum install mysql-server php-mysql
  • В процессе установки будет создан случайный root-пароль, найти его можно в /var/log/mysqld.log:
$ grep 'temporary password' /var/log/mysqld.log

Обновление MySQL

Рассмотрим порядок действий для обновления MySQL до 5.7, так как чаще всего требуется именно это.

Аналогичным образом при необходимости можно произвести и даунгрейд, подключив не обновлённые, а архивные репозитории.

CentOS

  • Загружаем и подключаем репозиторий с необходимой версией:
$ cd /root/
$ wget https://dev.mysql.com/get/mysql57-community-release-el7-9.noarch.rpm
$ rpm -i /root/mysql57-community-release-el7-9.noarch.rpm
$ yum makecache
  • Создаем дамп баз данных на случай, если в ходе обновления возникнут ошибки:
$ mysqldump --all-databases > all_databases.sql
  • Останавливаем текущую версию сервера во избежание конфликта:
$ systemctl stop mysql
  • Запускаем обновление, сразу подтвердив необходимость операции обновления и подтверждения ключа репозитория (ключ -y):
$ yum -y update
  • Производим установку MySQL-сервера:
$ yum install mysql-server
  • Обновляем MySQL и перезагружаем сервис:
$ mysql_upgrade
$ service mysql restart

Debian/Ubuntu

  • Создаем дамп баз данных на случай, если в ходе обновления возникнут ошибки:
$ mysqldump --all-databases > all_databases.sql
  • загружаем и подключаем репозиторий с необходимой нам версией:
$ cd ~
$ wget http://dev.mysql.com/get/mysql-apt-config_0.6.0-1_all.deb
$ dpkg -i mysql-apt-config_0.6.0-1_all.deb
$ apt-get update
  • Устанавливаем MySQL-сервер:
$ apt-get install mysql-server
  • Обновляем MySQL и перезагружаем сервис:
$ mysql_upgrade
$ service mysql restart

Установка и настройка PhpMyAdmin

Установка

Debian/Ubuntu


$ apt-get update
$ apt-get install phpmyadmin php-gettext
  • В появившемся диалогом окне выбираем apache2.
  • Отвечаем yes на вопрос, хотите ли вы использовать dbconfig-common для настройки базы данных.
  • Вводим пароль администратора базы данных.
  • Вводим пароль для самого phpMyAdmin.
  • Перезагружаем веб-сервер:
$ systemctl restart apache2

CentOS

  • Устанавливаем репозиторий EPEL:
$ yum install epel-release
  • Обновляем репозитории и выполняем установку PhpMyAdmin с необходимыми модулями:
$ yum update
$ yum install phpmyadmin php-mbstring php-gettext

Сброс root-пароля

  • Останавливаем MySQL-сервер
$ systemctl stop mysql

или

systemctl stop mysqld
  • Запускаем MySQL-сервер в безопасном режиме:
$ /usr/sbin/mysqld --skip-grant-tables --skip-networking &
  • Авторизуемся под пользователем root (пароль не потребуется, т.к. сервер запущен в безопасном режиме):
$ mysql -u root
  • Для последующего изменения пароля сбрасываем все привилегии:
> FLUSH PRIVILEGES;
  • Производим смену пароля:
> UPDATE mysql.user SET Password=PASSWORD('newpwd') WHERE User='root';
  • Повторно сбрасываем привилегии:
> FLUSH PRIVILEGES;
  • Останавливаем MySQL-сервер и запускаем в обычном режиме:
$ systemctl stop mysql
$ systemctl start mysql

Настройка MySQL-сервера

Настройки сервера хранятся в файле конфигурации /etc/mysql/my.cnf.

После применения изменений обязательно нужно перезапустить MySQL-сервер:

$ systemctl restart mysql

Указание кодировок и collation

  • В секцию [mysqld] добавляем параметры:
    • character-set-server — кодировка для всего сервера;
    • collation-server — порядок символов и строк на основе алфавитного порядка и классов эквивалентности;
    • init-connect — строка, выполняемая для каждого клиента при соединении.
character-set-server=utf8
collation-server=utf8_general_ci
init-connect="SET NAMES utf8" 

Вместо UTF-8 указываем ту кодировку, которая требуется проекту.

Количество подключений, таймаут

  • В секцию [mysqld] добавляем параметры:
    • max_connections — количество одновременных соединений с сервером;
    • wait_timeout — максимальное время жизни запроса.
max_connections = 250
wait_timeout=60

Внешнее подключение

  • По умолчанию сервер MySQL принимает соединения только с локальной машины. Чтобы открыть доступ для внешних соединений изменяем значение bind-address с 127.0.0.1 на:
bind-address            = 192.168.1.23 #разрешить подключатся только с указанного IP
bind-address            = 0.0.0.0 #разрешить подключатся с любого хоста

MySQL Tuner

MySQL Tuner подключается к работающему экземпляру MySQL-сервера и предоставляет рекомендации по конфигурации на основе рабочей нагрузки. Экземпляр должен работать не менее 24 часов перед запуском тюнера, при этом чем дольше экземпляр работает уже, тем лучше будут рекомендации.

Установка выполняется с помощью команды:

Debian/Ubuntu

$ apt-get install mysqltuner

CentOS

$ yum install mysqltuner

Запустить mysqltuner можно следующим образом:

$ mysqltuner

В выводе будет много весьма полезной информации, особое внимание стоит обратить на рекомендации в конце. Они укажут, какие переменные должны быть настроены в разделе [mysqld] конфигурационного файла.

Была ли эта инструкция полезной?