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

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


software:development:ps_pycharm:mysql:mysql

Различия

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

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

Предыдущая версия справа и слеваПредыдущая версия
Следующая версия
Предыдущая версия
software:development:ps_pycharm:mysql:mysql [2024/02/25 19:32] – [Установка] vladpolskiysoftware:development:ps_pycharm:mysql:mysql [2024/02/25 20:10] (текущий) – [Ссылки и Примечания] vladpolskiy
Строка 11: Строка 11:
 \\   \\  
 Несмотря на отсутствие некоторого функционала, имеющегося у других СУБД, MySQL обладает достаточно обширным разнообразием доступных инструментов для создания приложений. Несмотря на отсутствие некоторого функционала, имеющегося у других СУБД, MySQL обладает достаточно обширным разнообразием доступных инструментов для создания приложений.
-=====Установка=====+=====Установка сервер MySQL в Ubuntu 22.04 LTS Linux=====
 ====Шаг 1 — Обновление системы==== ====Шаг 1 — Обновление системы====
 Важно, чтобы вы обновили систему, выполнив следующие команды apt: Важно, чтобы вы обновили систему, выполнив следующие команды apt:
Строка 143: Строка 143:
 sudo systemctl restart mysql.service sudo systemctl restart mysql.service
 sudo systemctl status mysql.service sudo systemctl status mysql.service
-<code>+</code>
   * **/etc/mysql/** — Основной каталог конфигурации MySQL сервера.   * **/etc/mysql/** — Основной каталог конфигурации MySQL сервера.
  
   * **/etc/mysql/my.cnf** — Файл конфигурации сервера баз данных MySQL. Отредактируйте файл .my.cnf ($HOME/.my.cnf), чтобы установить пользовательские параметры. Дополнительные настройки можно переопределить из следующих двух каталогов:   * **/etc/mysql/my.cnf** — Файл конфигурации сервера баз данных MySQL. Отредактируйте файл .my.cnf ($HOME/.my.cnf), чтобы установить пользовательские параметры. Дополнительные настройки можно переопределить из следующих двух каталогов:
 <code> <code>
 +/etc/mysql/conf.d/
 +/etc/mysql/mysql.conf.d/
 </code> </code>
 +  * **Порт TCP/3306** — TCP/3306 сетевой порт по умолчанию для MySQL сервера и привязывается к **127.0.0.1** по соображениям безопасности. Однако вы можете его изменить, если нужен доступ к VLAN или VPN CIDR. Затем можете получить доступ к серверу MySQL, используя набор сокетов **localhost** в каталоге **/run/mysqld/**.
 +====Шаг 4 — Защита сервера MySQL 8====
 +По умолчанию пароль не установлен, и необходимо настроить другие параметры. Давайте запустим следующую команду для настройки и защиты MySQL сервера:
 <code> <code>
 +sudo mysql_secure_installation
 </code> </code>
 +Программа запросит пароль для пользователя **root,** политику валидации пароля и предполагаемую надёжность пароля:
 +<code>
 +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
 +</code>
 +Далее удалим анонимного пользователя, отключим удалённый вход пользователя root в систему и удалим тестовую базу данных:
 +<code>
 +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!
 +</code>
 +====Шаг 5 — Включение загрузки MySQL сервера вместе с загрузкой системы====
 +Убедитесь, что MySQL сервер запускается при загрузке системы с помощью следующей команды:
 +<code>
 +sudo systemctl is-enabled mysql.service
 +</code>
 +Если загрузка не включена, введите следующую команду для включения загрузки:
 +<code>
 +sudo systemctl enable mysql.service
 +</code>
 +Проверьте состояние MySQL сервера, следующей командой:
 +<code>
 +sudo systemctl status mysql.service
 +</code>
 +Если всё в порядке, она должна вывести что-то вроде этого:
 +<code>
 +● 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.
 +</code>
 +====Шаг 6 — Запуск/Остановка/Перезапуск MySQL сервера====
 +Используя параметры командной строки, мы можем управлять MySQL сервером в Ubuntu 22.04 LTS. Давайте запустим сервер, если он ещё не запущен:
 +<code>
 +sudo systemctl start mysql.service
 +</code>
 +Для остановки MySQL сервера выполните следующую команду:
 +<code>
 +sudo systemctl stop mysql.service
 +</code>
 +Если MySQL сервер нужно перезапустить выполните:
 +<code>
 +sudo systemctl restart mysql.service
 +</code>
 +Посмотреть журнал службы MySQL можно командной **journalctl**:
 +<code>
 +sudo journalctl -u mysql.service -xe
 +</code>
 +Она выведет что-то вроде:
 +<code>
 +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.
 +</code>
 +Файл журнала ошибок MySQL сервера по умолчанию расположен в **/var/log/mysql/error.log**. Посмотреть последние записи можно с помощью команды **tail:**
 +<code>
 +sudo tail -f /var/log/mysql/error.log
 +</code>
 +<code>
 +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
 +</code>
 +====Шаг 7 — Войдите на MySQL 8 сервер для тестирования====
 +На данный момент мы узнали, как установить, настроить, защитить и запустить/остановить MySQL 8 сервер в Ubuntu 22.04 LTS. Пришло время зайти не сервер как root (администратор MySQL). Синтаксис команды следующий:
 +<code>
 +mysql -u {user} -p
 +mysql -u {user} -h {remote_server_ip} -p
 +mysql -u root -p
 +</code>
 +Пример сессии:
 +<code>
 +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>
 +</code>
 +Выполните команду **STATUS**, которая отображает версию и другую информацию о MySQL сервере:
 +<code>
 +STATUS;
 +</code>
 +<code>
 +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
 +--------------
 +</code>
 +Также версию MySQL сервера, можно посмотреть следующей командой:
 +<code>
 +SHOW VARIABLES LIKE "%version%";
 +</code>
 +<code>
 ++--------------------------+-------------------------+
 +| 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)
 +</code>
 +====Шаг 8 — Создание новой базы данных MySQL и пользователя/пароля====
 +Создадим новую базу данных mydemodb:
 +<code>
 +CREATE DATABASE mydemodb;
 +</code>
 +Затем создадим пользователя **vivekappusr** для базы данных **mydemodb** с паролем **aa09dd995C72_5355a598fc7D8ab1230a**:
 +<code>
 +CREATE USER 'vivekappusr'@'%' IDENTIFIED BY 'aa09dd995C72_5355a598fc7D8ab1230a';
 +</code>
 +Установим права:
 +<code>
 +GRANT SELECT, INSERT, UPDATE, DELETE ON mydemodb.* TO 'vivekappusr'@'%';
 +</code>
 +И конечно предоставим все привилегии на базу данных **mydemodb**:
 +<code>
 +GRANT ALL PRIVILEGES ON mydemodb.* TO 'vivekappusr'@'%';
 +</code>
 +Посмотрим пользователей MySQL и привилегии пользователя **vivekappusr** командами:
 +<code>
 +SELECT USER,host FROM mysql.user;
 +SHOW GRANTS FOR vivekappusr;
 +</code>
 +Войдём под новым пользователем в MySQL:
 +<code>
 +mysql -u vivekappusr -p mydemodb
 +mysql -u vivekappusr -h localhost -p mydemodb
 +</code>
 +Где,
 +
 +  * -u vivekappusr : Имя пользователя
 +  * -h localhost : Соединение с хостом localhost
 +  * -p : Запрос пароля
 +  * mydemodb : Соединение с базой данных: mydemodb
 +====Шаг 9 — Конфигурация сервера MySQL 8====
 +Откройте файл **/etc/mysql/mysql.conf.d/mysqld.cnf** с помощью текстового редактора, например:
 +<code>
 +sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf
 +</code>
 +Отредактируйте раздел mysqld в соответствии с вашими потребностями. Детальную информацию по параметрам можно узнать из [[https://dev.mysql.com/doc/|документации.]]
 +<code>
 +[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
 +</code>
 +Далее, я добавляю доступ по сети:
 +<code>
 +# 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
 +</code>
 +Немного тонкой настройки баз данных для проекта
 +<code>
 +# 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
 +</code>
 +Настройки таблицы в соответствии с потребностями проекта:
 +<code>
 +# 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
 +</code>
 +Настройка ведения логов:
 +<code>
 +# 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
 +</code>
 +Настройка **mysqldump** для бэкапов:
 +<code>
 +[mysqldump]
 +quick
 +quote_names
 +max_allowed_packet
 +</code>
 +===Настройка максимального количества отрытых файлов сервера MySQL(количество файловых дескрипторов)===
 +Для загруженного MySQL 8 сервера вам необходимо настроить параметры максимального количества открытых файлов с помощью **systemd**. В противном случае вы получите сообщение об ошибке «Ну удалось увеличить количество max_open_files больше, чем XXXX ». Запустите:
 +<code>
 +sudo systemctl edit mysql.service
 +</code>
 +Вы увидите следующий текст:
 +<code>
 +### 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
 +</code>
 +Добавьте свою конфигурацию между:
 +<code>
 +### Anything between here and the comment below will become the new contents of the file
 +
 +
 +
 +### Lines below this comment will be discarded
 +</code>
 +Например (замените **1800000** на желаемое значение. Для максимального поддерживаемого значения используйте **LimitNOFILE=infinity** вместо **LimitNOFILE=1800000**):
 +<code>
 +### 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
 +</code>
 +Создайте или отредактируйте **/etc/sysctl.d/100-custom.conf** и добавьте:
 +<code>
 +fs.nr_open=1800000
 +</code>
 +Обновите изменения:
 +<code>
 +sudo sysctl -p /etc/sysctl.d/100-custom.conf
 +</code>
 +Затем перезагрузите и перезапустите службу mysql:
 +<code>
 +sudo systemctl daemon-reload
 +sudo systemctl restart mysql
 +</code>
 +Проверьте:
 +<code>
 +mysql -u root -p -e 'SHOW GLOBAL VARIABLES LIKE "open_files_limit";'
 +</code>
 +Пример вывода:
 +<code>
 ++------------------+---------+
 +| Variable_name    | Value   |
 ++------------------+---------+
 +| open_files_limit | 1800000 |
 ++------------------+---------+
 +</code>
 +Также можете воспользоваться следующей командой, чтобы запросить текущий лимит открытых файлов MySQL сервера в Ubuntu 22.04 LTS:
 +<code>
 +cat /proc/$(cat /var/run/mysqld/mysqld.pid)/limits
 +## ИЛИ ##
 +grep 'open files' /proc/$(cat /var/run/mysqld/mysqld.pid)/limits
 +</code>
 +Выведет в консоль:
 +<code>
 +Max open files            1800000              1800000              files
 +</code>
 +
 =====Достоинства и недостатки===== =====Достоинства и недостатки=====
 Переходим к обзору сильных и слабых сторон MySQL от Oracle. Переходим к обзору сильных и слабых сторон MySQL от Oracle.
Строка 174: Строка 650:
 \\   \\  
 [[https://dev.mysql.com/downloads/repo/apt/|Репозиторий MySQL APT]] [[https://dev.mysql.com/downloads/repo/apt/|Репозиторий MySQL APT]]
 +\\  
 +[[https://www.cyberciti.biz/faq/installing-mysql-server-on-ubuntu-22-04-lts-linux/|Источник: «How to install MySQL server on Ubuntu 22.04 LTS Linux»]]
 +\\  
 +[[https://dev.mysql.com/doc/|MySQL Documentation]]
 +\\  
 +[[software:development:web:docs:learn:mariadb:вatabase_creation|База данных PHP MySQL]]
  
  
software/development/ps_pycharm/mysql/mysql.1708878737.txt.gz · Последнее изменение: vladpolskiy