Как установить MySQL сервер на Ubuntu Linux 22.04 LTS

Источник: «How to install MySQL server on Ubuntu 22.04 LTS Linux»
Объясняем, как установить MySQL 8 сервер на Ubuntu linux 22.04 LTS с помощью APT, создать пользователей, базу данных и настроить сервер.

MySQL версии 8.0 — бесплатная система баз данных с открытым исходным кодом, используемая большинством веб-приложений и сайтов в Интернете. Обычно MySQL является частью стека LAMP (Linux, Apache, MySQL, PHP/Perl/Python). MySQL активно использует популярное программное обеспечение с открытым исходным кодом такое, как WordPress, MediaWiki и другие, в качестве механизма хранения базы данных. Давайте посмотрим, как установить MySQL сервер версии 8.х на сервер Ubuntu Linux 22.04 LTS, включая настройку новой базы данных, пользователей и тонкую настройку конфигурации сервера.

Шаг 1 — Обновление системы

Важно, чтобы вы обновили систему, выполнив следующие команды apt:

sudo apt update
sudo apt list --upgradable # получить список обновлений
sudo apt upgrade

Шаг 2 — Поиск пакетов MySQL сервер версии 8 в Ubuntu Linux 22.04 LTS

Используйте команду apt-cache или apt, как показано ниже, для поиска серверных и клиентских пакетов MySQL в Ubuntu 22.04 LTS. Например:

apt-cache search mysql-server

Система вернёт список доступных вариантов, включая сервер и клиент Oracle MySQL 8.xx и MariaDB 10.x в Ubuntu 22.04 LTS:

mysql-server - MySQL database server (metapackage depending on the latest version)
mysql-server-8.0 - MySQL database server binaries and system database setup
mysql-server-core-8.0 - MySQL database server binaries
default-mysql-server - MySQL database server binaries and system database setup (metapackage)
default-mysql-server-core - MySQL database server binaries (metapackage)
mariadb-server-10.6 - MariaDB database server binaries
mariadb-server-core-10.6 - MariaDB database core server files

Хотите узнать больше о пакете MySQL server под названием mysql-server-8.0? Выполните команду следующую команду apt, прежде чем устанавливать mysql:

apt info -a mysql-server-8.0
Package: mysql-server-8.0
Version: 8.0.29-0ubuntu0.22.04.2
Priority: optional
Section: database
Source: mysql-8.0
Origin: Ubuntu
Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
Original-Maintainer: Debian MySQL Maintainers <pkg-mysql-maint@lists.alioth.debian.org>
Bugs: https://bugs.launchpad.net/ubuntu/+filebug
Installed-Size: 1610 kB
Provides: virtual-mysql-server
Pre-Depends: adduser (>= 3.40), debconf, mysql-common (>= 5.5)
Depends: lsb-base (>= 3.0-10), mysql-client-8.0 (>= 8.0.29-0ubuntu0.22.04.2), mysql-common (>= 5.8+1.0.4~), mysql-server-core-8.0 (= 8.0.29-0ubuntu0.22.04.2), passwd, perl:any (>= 5.6), psmisc, debconf (>= 0.5) | debconf-2.0
Recommends: libhtml-template-perl, mecab-ipadic-utf8
Suggests: mailx, tinyca
Conflicts: mariadb-server-10.1, mariadb-server-10.3, mysql-server-5.7, virtual-mysql-server
Homepage: http://dev.mysql.com/
Task: lamp-server
Download-Size: 1391 kB
APT-Sources: http://archive.ubuntu.com/ubuntu jammy-updates/main amd64 Packages
Description: MySQL database server binaries and system database setup
MySQL is a fast, stable and true multi-user, multi-threaded SQL database
server. SQL (Structured Query Language) is the most popular database query
language in the world. The main goals of MySQL are speed, robustness and
ease of use.
.
This package contains all the infrastructure needed to setup system
databases.

Package: mysql-server-8.0
Version: 8.0.28-0ubuntu4
Priority: optional
Section: database
Source: mysql-8.0
Origin: Ubuntu
Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
Original-Maintainer: Debian MySQL Maintainers <pkg-mysql-maint@lists.alioth.debian.org>
Bugs: https://bugs.launchpad.net/ubuntu/+filebug
Installed-Size: 1603 kB
Provides: virtual-mysql-server
Pre-Depends: adduser (>= 3.40), debconf, mysql-common (>= 5.5)
Depends: lsb-base (>= 3.0-10), mysql-client-8.0 (>= 8.0.28-0ubuntu4), mysql-common (>= 5.8+1.0.4~), mysql-server-core-8.0 (= 8.0.28-0ubuntu4), passwd, perl:any (>= 5.6), psmisc, debconf (>= 0.5) | debconf-2.0
Recommends: libhtml-template-perl, mecab-ipadic-utf8
Suggests: mailx, tinyca
Conflicts: mariadb-server-10.1, mariadb-server-10.3, mysql-server-5.7, virtual-mysql-server
Homepage: http://dev.mysql.com/
Task: lamp-server
Download-Size: 1386 kB
APT-Sources: http://archive.ubuntu.com/ubuntu jammy/main amd64 Packages
Description: MySQL database server binaries and system database setup
MySQL is a fast, stable and true multi-user, multi-threaded SQL database
server. SQL (Structured Query Language) is the most popular database query
language in the world. The main goals of MySQL are speed, robustness and
ease of use.
.
This package contains all the infrastructure needed to setup system
databases.

mysql-server-8.0 vs mysql-server-core-8.0

  1. mysql-server-8.0 — этот пакет нужен практически во всех случаях. Он содержит исполняемые файлы сервера баз данных MySQL, клиенты и настройки системной базы данных.
  2. mysql-server-core-8.0 — этот пакет включает двоичные файлы сервера, но не содержит всей инфраструктуры, необходимой для настройки системных баз данных. Так что это более полезно для тех, кто настраивает контейнеры Linux (Docker, LXD и прочие) и не нуждается во всех этих вещах, таких как клиенты mysql.

Шаг 3 — Установка пакета MySQL 8 сервер

Давайте установим MySQL сервер версии 8.0 на Ubuntu 22.04 LTS:

sudo apt install mysql-server-8.0

Пример сеанса установки:

Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
The following package was automatically installed and is no longer required:
libfreetype6
Use 'apt autoremove' to remove it.
The following additional packages will be installed:
libcgi-fast-perl libcgi-pm-perl libclone-perl libencode-locale-perl libevent-pthreads-2.1-7 libfcgi-bin libfcgi-perl libfcgi0ldbl libhtml-parser-perl libhtml-tagset-perl libhtml-template-perl libhttp-date-perl libhttp-message-perl libio-html-perl liblwp-mediatypes-perl
libmecab2 libprotobuf-lite23 libtimedate-perl liburi-perl mecab-ipadic mecab-ipadic-utf8 mecab-utils mysql-client-8.0 mysql-client-core-8.0 mysql-common mysql-server-core-8.0
Suggested packages:
libdata-dump-perl libipc-sharedcache-perl libbusiness-isbn-perl libwww-perl mailx tinyca
The following NEW packages will be installed:
libcgi-fast-perl libcgi-pm-perl libclone-perl libencode-locale-perl libevent-pthreads-2.1-7 libfcgi-bin libfcgi-perl libfcgi0ldbl libhtml-parser-perl libhtml-tagset-perl libhtml-template-perl libhttp-date-perl libhttp-message-perl libio-html-perl liblwp-mediatypes-perl
libmecab2 libprotobuf-lite23 libtimedate-perl liburi-perl mecab-ipadic mecab-ipadic-utf8 mecab-utils mysql-client-8.0 mysql-client-core-8.0 mysql-common mysql-server-8.0 mysql-server-core-8.0
0 upgraded, 27 newly installed, 0 to remove and 0 not upgraded.
Need to get 28.6 MB of archives.
After this operation, 240 MB of additional disk space will be used.
Do you want to continue? [Y/n] y

Установка пароля для учётной записи root

Для установки пароля учётной записи root, запустите:

sudo mysql

Затем выполните sql запрос для установки пароля My7Pass@Word_9_8A_zE для учётной записи 'root@localhost. В имени учётной записи, после @ указывается с какого адреса будет обращаться пользователь. Для локальной машины указывают localhost или 127.0.0.1, для удалённой машины её IP-адрес. Для доступа из локальной или внешней сети %, но так делать не стоит без особой необходимости:

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'My7Pass@Word_9_8A_zE';
exit

Основные файлы конфигурации и порты MySQL 8.xx

  1. mysql.service — Имя сервиса. Вы можете управлять им с помощью следующих команд systemctl:

    sudo systemctl start mysql.service
    sudo systemctl stop mysql.service
    sudo systemctl restart mysql.service
    sudo systemctl status mysql.service
  2. /etc/mysql/ — Основной каталог конфигурации MySQL сервера.

  3. /etc/mysql/my.cnf — Файл конфигурации сервера баз данных MySQL. Отредактируйте файл .my.cnf ($HOME/.my.cnf), чтобы установить пользовательские параметры. Дополнительные настройки можно переопределить из следующих двух каталогов:

    /etc/mysql/conf.d/
    /etc/mysql/mysql.conf.d/
  4. Порт TCP/3306 — TCP/3306 сетевой порт по умолчанию для MySQL сервера и привязывается к 127.0.0.1 по соображениям безопасности. Однако вы можете его изменить, если нужен доступ к VLAN или VPN CIDR. Затем можете получить доступ к серверу MySQL, используя набор сокетов localhost в каталоге /run/mysqld/.

Шаг 4 — Защита сервера MySQL 8

По умолчанию пароль не установлен, и необходимо настроить другие параметры. Давайте запустим следующую команду для настройки и защиты MySQL сервера:

sudo mysql_secure_installation

Программа запросит пароль для пользователя root, политику валидации пароля и предполагаемую надёжность пароля:

Securing the MySQL server deployment.

Enter password for user root: My7Pass@Word_9_8A_zE

VALIDATE PASSWORD COMPONENT can be used to test passwords
and improve security. It checks the strength of password
and allows the users to set only those passwords which are
secure enough. Would you like to setup VALIDATE PASSWORD component?

Press y|Y for Yes, any other key for No: Y

There are three levels of password validation policy:

LOW Length >= 8
MEDIUM Length >= 8, numeric, mixed case, and special characters
STRONG Length >= 8, numeric, mixed case, special characters and dictionary file

Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG: 2
Using existing password for root.

Estimated strength of the password: 100
Change the password for root ? (Press y|Y for Yes, any other key for No) : Y

New password: My7Pass@Word_9_8A_zE

Re-enter new password: My7Pass@Word_9_8A_zE

Estimated strength of the password: 100
Do you wish to continue with the password provided?(Press y|Y for Yes, any other key for No) : Y

Далее удалим анонимного пользователя, отключим удалённый вход пользователя root в систему и удалим тестовую базу данных:

By default, a MySQL installation has an anonymous user,
allowing anyone to log into MySQL without having to have
a user account created for them. This is intended only for
testing, and to make the installation go a bit smoother.
You should remove them before moving into a production
environment.

Remove anonymous users? (Press y|Y for Yes, any other key for No) : Y
Success.


Normally, root should only be allowed to connect from
'localhost'. This ensures that someone cannot guess at
the root password from the network.

Disallow root login remotely? (Press y|Y for Yes, any other key for No) : Y
Success.

By default, MySQL comes with a database named 'test' that
anyone can access. This is also intended only for testing,
and should be removed before moving into a production
environment.


Remove test database and access to it? (Press y|Y for Yes, any other key for No) : Y
- Dropping test database...
Success.

- Removing privileges on test database...
Success.

Reloading the privilege tables will ensure that all changes
made so far will take effect immediately.

Reload privilege tables now? (Press y|Y for Yes, any other key for No) : Y
Success.

All done!

Шаг 5 — Включение загрузки MySQL сервера вместе с загрузкой системы

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

sudo systemctl is-enabled mysql.service

Если загрузка не включена, введите следующую команду для включения загрузки:

sudo systemctl enable mysql.service

Проверьте состояние MySQL сервера, следующей командой:

sudo systemctl status mysql.service

Если всё в порядке, она должна вывести что-то вроде этого:

● mysql.service - MySQL Community Server
Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: enabled)
Active: active (running) since Wed 2022-08-10 23:46:30 UTC; 2min 19s ago
Process: 1498 ExecStartPre=/usr/share/mysql/mysql-systemd-start pre (code=exited, status=0/SUCCESS)
Main PID: 1506 (mysqld)
Status: "Server is operational"
Tasks: 39 (limit: 4575)
Memory: 361.5M
CPU: 1.090s
CGroup: /system.slice/mysql.service
└─1506 /usr/sbin/mysqld

Aug 10 23:46:30 nixcraft-mysql-8 systemd[1]: Starting MySQL Community Server...
Aug 10 23:46:30 nixcraft-mysql-8 systemd[1]: Started MySQL Community Server.

Шаг 6 — Запуск/Остановка/Перезапуск MySQL сервера

Используя параметры командной строки, мы можем управлять MySQL сервером в Ubuntu 22.04 LTS. Давайте запустим сервер, если он ещё не запущен:

sudo systemctl start mysql.service

Для остановки MySQL сервера выполните следующую команду:

sudo systemctl stop mysql.service

Если MySQL сервер нужно перезапустить выполните:

sudo systemctl restart mysql.service

Посмотреть журнал службы MySQL можно командной journalctl:

sudo journalctl -u mysql.service -xe

Она выведет что-то вроде:

May 10 05:09:01 ubuntu-nixcraft systemd[1]: Starting MySQL Community Server...
░░ Subject: A start job for unit mysql.service has begun execution
░░ Defined-By: systemd
░░ Support: http://www.ubuntu.com/support
░░
░░ A start job for unit mysql.service has begun execution.
░░
░░ The job identifier is 597.
May 10 05:09:01 ubuntu-nixcraft systemd[1]: Started MySQL Community Server.
░░ Subject: A start job for unit mysql.service has finished successfully
░░ Defined-By: systemd
░░ Support: http://www.ubuntu.com/support
░░
░░ A start job for unit mysql.service has finished successfully.
░░
░░ The job identifier is 597.

Файл журнала ошибок MySQL сервера по умолчанию расположен в /var/log/mysql/error.log. Посмотреть последние записи можно с помощью команды tail:

sudo tail -f /var/log/mysql/error.log
2022-05-10T05:08:59.396952Z 7 [System] [MY-013172] [Server] Received SHUTDOWN from user boot. Shutting down mysqld (Version: 8.0.29-0ubuntu0.22.04.2).
2022-05-10T05:08:59.399628Z 0 [System] [MY-011323] [Server] X Plugin ready for connections. Bind-address: '127.0.0.1' port: 33060, socket: /var/run/mysqld/mysqlx.sock
2022-05-10T05:09:00.873507Z 0 [System] [MY-010910] [Server] /usr/sbin/mysqld: Shutdown complete (mysqld 8.0.29-0ubuntu0.22.04.2) (Ubuntu).
2022-05-10T05:09:01.640964Z 0 [System] [MY-010116] [Server] /usr/sbin/mysqld (mysqld 8.0.29-0ubuntu0.22.04.2) starting as process 1463
2022-05-10T05:09:01.652378Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started.
2022-05-10T05:09:01.771700Z 1 [System] [MY-013577] [InnoDB] InnoDB initialization has ended.
2022-05-10T05:09:01.942385Z 0 [Warning] [MY-010068] [Server] CA certificate ca.pem is self signed.
2022-05-10T05:09:01.942503Z 0 [System] [MY-013602] [Server] Channel mysql_main configured to support TLS. Encrypted connections are now supported for this channel.
2022-05-10T05:09:01.974967Z 0 [System] [MY-010931] [Server] /usr/sbin/mysqld: ready for connections. Version: '8.0.29-0ubuntu0.22.04.2' socket: '/var/run/mysqld/mysqld.sock' port: 3306 (Ubuntu).
2022-05-10T05:09:01.974988Z 0 [System] [MY-011323] [Server] X Plugin ready for connections. Bind-address: '127.0.0.1' port: 33060, socket: /var/run/mysqld/mysqlx.sock

Шаг 7 — Войдите на MySQL 8 сервер для тестирования

На данный момент мы узнали, как установить, настроить, защитить и запустить/остановить MySQL 8 сервер в Ubuntu 22.04 LTS. Пришло время зайти не сервер как root (администратор MySQL). Синтаксис команды следующий:

mysql -u {user} -p
mysql -u {user} -h {remote_server_ip} -p
mysql -u root -p

Пример сессии:

Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 14
Server version: 8.0.30-0ubuntu0.22.04.1 (Ubuntu)

Copyright (c) 2000, 2022, Oracle and/or its affiliates.

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>

Выполните команду STATUS, которая отображает версию и другую информацию о MySQL сервере:

STATUS;
mysql  Ver 8.0.30-0ubuntu0.22.04.1 for Linux on x86_64 ((Ubuntu))

Connection id: 14
Current database:
Current user: root@localhost
SSL: Not in use
Current pager: stdout
Using outfile: ''
Using delimiter: ;
Server version: 8.0.30-0ubuntu0.22.04.1 (Ubuntu)
Protocol version: 10
Connection: Localhost via UNIX socket
Server characterset: utf8mb4
Db characterset: utf8mb4
Client characterset: utf8mb4
Conn. characterset: utf8mb4
UNIX socket: /var/run/mysqld/mysqld.sock
Binary data as: Hexadecimal
Uptime: 5 min 40 sec

Threads: 2 Questions: 20 Slow queries: 0 Opens: 142 Flush tables: 3 Open tables: 61 Queries per second avg: 0.058
--------------

Также версию MySQL сервера, можно посмотреть следующей командой:

SHOW VARIABLES LIKE "%version%";
+--------------------------+-------------------------+
| Variable_name | Value |
+--------------------------+-------------------------+
| admin_tls_version | TLSv1.2,TLSv1.3 |
| immediate_server_version | 999999 |
| innodb_version | 8.0.30 |
| original_server_version | 999999 |
| protocol_version | 10 |
| replica_type_conversions | |
| slave_type_conversions | |
| tls_version | TLSv1.2,TLSv1.3 |
| version | 8.0.30-0ubuntu0.22.04.1 |
| version_comment | (Ubuntu) |
| version_compile_machine | x86_64 |
| version_compile_os | Linux |
| version_compile_zlib | 1.2.12 |
+--------------------------+-------------------------+
13 rows in set (0.00 sec)

Шаг 8 — Создание новой базы данных MySQL и пользователя/пароля

Создадим новую базу данных mydemodb:

CREATE DATABASE mydemodb;

Затем создадим пользователя vivekappusr для базы данных mydemodb с паролем aa09dd995C72_5355a598fc7D8ab1230a:

CREATE USER 'vivekappusr'@'%' IDENTIFIED BY 'aa09dd995C72_5355a598fc7D8ab1230a';

Установим права:

GRANT SELECT, INSERT, UPDATE, DELETE ON mydemodb.* TO 'vivekappusr'@'%';

И конечно предоставим все привилегии на базу данных mydemodb:

GRANT ALL PRIVILEGES ON mydemodb.* TO 'vivekappusr'@'%';

Посмотрим пользователей MySQL и привилегии пользователя vivekappusr командами:

SELECT USER,host FROM mysql.user;
SHOW GRANTS FOR vivekappusr;

Войдём под новым пользователем в MySQL:

mysql -u vivekappusr -p mydemodb
mysql -u vivekappusr -h localhost -p mydemodb

Где,

Шаг 9 — Конфигурация сервера MySQL 8

Откройте файл /etc/mysql/mysql.conf.d/mysqld.cnf с помощью текстового редактора, например:

sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf

Отредактируйте раздел mysqld в соответствии с вашими потребностями. Детальную информацию по параметрам можно узнать из документации.

[mysqld]
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
datadir = /var/lib/mysql
log-error = /var/log/mysql/error.log

Далее, я добавляю доступ по сети:

# server LAN/VLAN IP and port
bind_address = 10.147.164.6
port = 3306
skip_external_locking
skip_name_resolve
max_allowed_packet = 256M
max_connect_errors = 1000000

Немного тонкой настройки баз данных для проекта

# InnoDB
default_storage_engine = InnoDB
innodb_buffer_pool_instances = 1
innodb_buffer_pool_size = 512M
innodb_file_per_table = 1
innodb_flush_log_at_trx_commit = 0
innodb_flush_method = O_DIRECT
innodb_log_buffer_size = 16M
innodb_log_file_size = 512M
innodb_stats_on_metadata = 0
innodb_read_io_threads = 64
innodb_write_io_threads = 64

# MyISAM Settings (set if you are using MyISAM)
key_buffer_size = 32M

low_priority_updates = 1
concurrent_insert = 2

# Connection Settings
max_connections = 100

back_log = 512
thread_cache_size = 100
thread_stack = 192K

interactive_timeout = 180
wait_timeout = 180

# Buffer Settings
join_buffer_size = 4M
read_buffer_size = 3M
read_rnd_buffer_size = 4M
sort_buffer_size = 4M

Настройки таблицы в соответствии с потребностями проекта:

# Table Settings (see below for open file limits)
table_definition_cache = 40000
table_open_cache = 40000
open_files_limit = 60000

max_heap_table_size = 128M
tmp_table_size = 128M

# Search Settings
ft_min_word_len = 3

Настройка ведения логов:

# Logging
log_error = /var/lib/mysql/mysql_error.log
log_queries_not_using_indexes = 1
long_query_time = 5
slow_query_log = 0 # Disabled for production
slow_query_log_file = /var/lib/mysql/mysql_slow.log

Настройка mysqldump для бэкапов:

[mysqldump]
quick
quote_names
max_allowed_packet

Настройка максимального количества отрытых файлов сервера MySQL(количество файловых дескрипторов)

Для загруженного MySQL 8 сервера вам необходимо настроить параметры максимального количества открытых файлов с помощью systemd. В противном случае вы получите сообщение об ошибке «Ну удалось увеличить количество max_open_files больше, чем XXXX ». Запустите:

sudo systemctl edit mysql.service

Вы увидите следующий текст:

### Editing /etc/systemd/system/mysql.service.d/override.conf
### Anything between here and the comment below will become the new contents of the file



### Lines below this comment will be discarded
### /lib/systemd/system/mysql.service
# # MySQL systemd service file
#
# [Unit]
# Description=MySQL Community Server
# After=network.target
#
# [Install]
# WantedBy=multi-user.target
#
# [Service]
# Type=notify
# User=mysql
# Group=mysql
# PIDFile=/run/mysqld/mysqld.pid
# PermissionsStartOnly=true
# ExecStartPre=/usr/share/mysql/mysql-systemd-start pre
# ExecStart=/usr/sbin/mysqld
# TimeoutSec=infinity
# Restart=on-failure
# RuntimeDirectory=mysqld
# RuntimeDirectoryMode=755
# LimitNOFILE=10000
#
# # Set enviroment variable MYSQLD_PARENT_PID. This is required for restart.
# Environment=MYSQLD_PARENT_PID=1

Добавьте свою конфигурацию между:

### Anything between here and the comment below will become the new contents of the file



### Lines below this comment will be discarded

Например (замените 1800000 на желаемое значение. Для максимального поддерживаемого значения используйте LimitNOFILE=infinity вместо LimitNOFILE=1800000):

### Editing /etc/systemd/system/mysql.service.d/override.conf
### Anything between here and the comment below will become the new contents of the file
[Service]
LimitNOFILE=1800000



### Lines below this comment will be discarded

### /lib/systemd/system/mysql.service
# # MySQL systemd service file
#
# [Unit]
# Description=MySQL Community Server
# After=network.target
#
# [Install]
# WantedBy=multi-user.target
#
# [Service]
# Type=notify
# User=mysql
# Group=mysql
# PIDFile=/run/mysqld/mysqld.pid
# PermissionsStartOnly=true
# ExecStartPre=/usr/share/mysql/mysql-systemd-start pre
# ExecStart=/usr/sbin/mysqld
# TimeoutSec=infinity
# Restart=on-failure
# RuntimeDirectory=mysqld
# RuntimeDirectoryMode=755
# LimitNOFILE=10000
#
# # Set enviroment variable MYSQLD_PARENT_PID. This is required for restart.
# Environment=MYSQLD_PARENT_PID=1

Создайте или отредактируйте /etc/sysctl.d/100-custom.conf и добавьте:

fs.nr_open=1800000

Обновите изменения:

sudo sysctl -p /etc/sysctl.d/100-custom.conf

Затем перезагрузите и перезапустите службу mysql:

sudo systemctl daemon-reload
sudo systemctl restart mysql

Проверьте:

mysql -u root -p -e 'SHOW GLOBAL VARIABLES LIKE "open_files_limit";'

Пример вывода:

+------------------+---------+
| Variable_name | Value |
+------------------+---------+
| open_files_limit | 1800000 |
+------------------+---------+

Также можете воспользоваться следующей командой, чтобы запросить текущий лимит открытых файлов MySQL сервера в Ubuntu 22.04 LTS:

cat /proc/$(cat /var/run/mysqld/mysqld.pid)/limits
## ИЛИ ##
grep 'open files' /proc/$(cat /var/run/mysqld/mysqld.pid)/limits

Выведет в консоль:

Max open files            1800000              1800000              files

Итоги

Вот и всё, сервер Oracle MySQL версии 8.xx настроен и правильно работает на сервере Ubuntu Linux 22.04 LTS. Кроме того, вы узнали, как добавить новую базу данных, пользователя, пароль и настроить конфигурацию сервера для вашего проекта. Смотрите документацию по базе данных Oracle MySQL по SQL и другим командам.

Дополнительные материалы

Предыдущая Статья

Примитивные объекты в JavaScript: Когда их использовать (часть 2)

Следующая Статья

Как определить, когда элемент входит или выходит из области просмотра с помощью ванильного JavaScript