Link Search Menu Expand Document
09 Января 2021 г.

Сборка Mysql 8 из дистрибутива на Debian 10

Содержание
  1. Подготовка
  2. Создание пользователя
  3. Загрузка дистрибутива
  4. Распаковка и переименование
  5. Каталог с данными
  6. Запуск сервера и подключение к нему
  7. Тестирование работы сервера
  8. Запуск сервера при старте системы
  9. Итог

Чтобы запустить практически любой сайт, необходима база данных mysql.

Установим ее из готового дистрибутива в минимальной конфигурации.

Подготовка

Устанавливаем необходимые библиотеки для запуска mysql.

sudo apt-get install libaio1
sudo apt-get install libnuma1
sudo apt-get install libncurses5

Основные библиотеки для сборки мы установили в статье

Создание пользователя

Сперва следует создать пользователя mysql от которого будет демон mysqld.

sudo groupadd mysql # Добавляем группу
sudo useradd -r -g mysql -s /bin/false mysql # Создаем пользователя с группой mysql

Загрузка дистрибутива

Заходим на сервер и скачиваем с официального сайта минимальный дистрибутив в домашний каталог /home/alex/.

wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.22-linux-glibc2.17-x86_64-minimal.tar.xz

Распаковка и переименование

Распаковываем архив.

tar xvf mysql-8.0.22-linux-glibc2.17-x86_64-minimal.tar.xz # или xz -dc mysql-8.0.22-linux-glibc2.17-x86_64-minimal.tar.xz | tar x

Переименовываем директорию в более короткое имя.

mv mysql-8.0.22-linux-glibc2.17-x86_64-minimal mysql

В результате получили каталог mysql со следующими директориями:

  • bin - сервер mysqld, клиент и служебные программы.
  • docs - руководство MySQL в Info формате.
  • man - руководство unix.
  • include - заголовочные файлы.
  • lib - библиотеки.
  • share - сообщения об ошибках, и SQL файлы для установки базы данных.
  • support-files - прочие файлы.

Каталог с данными

Далее нужно инициализировать системные таблицы с указанием каталога данных.

/home/alex/mysql/bin/mysqld --initialize --user=mysql --basedir=/home/alex/mysql/ --datadir=/home/alex/mysql/data

Для удобства зайдем в директорию /home/alex/mysql и из нее выполним команду.

sudo ./bin/mysqld --initialize --user=mysql --basedir=/home/alex/mysql/ --datadir=/home/alex/mysql/data
2021-01-08T20:21:06.114129Z 0 [System] [MY-013169] [Server] /home/alex/mysql/bin/mysqld (mysqld 8.0.22) initializing of server in progress as process 1763
2021-01-08T20:21:06.120240Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started.
2021-01-08T20:21:06.498854Z 1 [System] [MY-013577] [InnoDB] InnoDB initialization has ended.
2021-01-08T20:21:07.382877Z 6 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: p&,Xl>sjf0i=

Сервер mysql создает учетную запись администратора и другие системные учетные записи. Так же генерирует временный пароль и заполняет справочные таблицы, все это хранится в директории /home/alex/mysql/data.

Сейчас сервер работает в режиме начальной загрузки, поэтому некоторый функционал у него ограничен.

Запуск сервера и подключение к нему

Теперь попробуем запустить сервер как демон с помощью программы mysqld_safe.

sudo ./bin/mysqld_safe --user=mysql &
Logging to '/home/alex/mysql/data/TestDebian10.err'.
2021-01-08T20:30:25.446289Z mysqld_safe Starting mysqld daemon with databases from /home/alex/mysql/data

Сервер запущен.

В другой сессии теперь можно к нему подключиться, введя рандомный пароль сгенерированный выше.

./bin/mysql -u root -p

После этого попадаем в интерфейс базы данных

Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 8.0.22

Copyright (c) 2000, 2020, 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>

Задаем новый пароль суперпользователя.

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'root-password';

Создаем еще несколько учетных записей и назначаем права.

CREATE USER 'root'@'127.0.0.1' IDENTIFIED WITH mysql_native_password BY 'root-password';
CREATE USER 'root'@'::1' IDENTIFIED WITH mysql_native_password BY 'root-password';
CREATE USER 'alex'@'%' IDENTIFIED WITH mysql_native_password BY 'passwd';
GRANT ALL PRIVILEGES ON *.* TO 'alex'@'%';

Тестирование работы сервера

Проверим версию

./bin/mysqladmin -u root -p version
Ver 8.0.22 for Linux on x86_64 (MySQL Community Server - GPL)
Copyright (c) 2000, 2020, 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.

Server version          8.0.22
Protocol version        10
Connection              Localhost via UNIX socket
UNIX socket             /tmp/mysql.sock
Uptime:                 25 min 40 sec

Threads: 2  Questions: 14  Slow queries: 0  Opens: 175  Flush tables: 3  Open tables: 93  Queries per second avg: 0.009

Остановим сервер и запустим снова.

sudo ./bin/mysqladmin -u root -p shutdown
sudo ./bin/mysqld --user=mysql

Выполним sql запрос.

./bin/mysql -u root -p -e "SELECT User FROM mysql.user" mysql

Так же можно проверить что запущен процесс ./bin/mysqld --user=mysql командой

ps aux|grep mysql

Запуск сервера при старте системы

Сейчас запуском и остановкой сервера мы занимаемся вручную, пришло время автоматизировать этот процесс.

Добавим команду запуска в файл /etc/rc.local :

/bin/sh -c 'cd /home/alex/mysql; ./bin/mysqld --user=mysql > /dev/null 2>&1 &'

Перезагрузим сервер. Если не увидели никаких ошибок, то база должна стартануть.

Итог

В итоге мы запустили минимально рабочую версию сервера mysql 8.0.22 запущенную из готового дистрибутива.


Возник вопрос или предложение пиши на почту alexsey_89@bk.ru или в Телеграмм канал

Дата публикации: 09 Января 2021 г.