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

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

  • Показать страницу
  • История страницы
  • Ссылки сюда
  • Оставить на чай
  • Экспорт в PDF
  • Наверх

  • 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 · Последнее изменение: 2024/02/25 19:32 — vladpolskiy