Mysql

Мануал mysql на русском: Документация по MYSQL 8? — Хабр Q&A

Содержание

Установка MySQL 8 Community на Windows 10 – пошаговая инструкция для начинающих | Info-Comp.ru

Приветствую всех посетителей сайта Info-Comp.ru! Сегодня мы с Вами подробно рассмотрим процесс установки бесплатной редакции MySQL 8 Community на операционную систему Windows 10.

Что такое MySQL?

MySQL – бесплатная реляционная система управления базами данных. Разработку и поддержку MySQL осуществляет компания Oracle.

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

Заметка! Что такое СУБД.

Недавно я проводил анализ данных нескольких официальных рейтингов популярности СУБД и другой статистической информации, с целью определить, какая СУБД действительно является самой популярной, и, как результат, MySQL на текущей момент является самой популярной СУБД в мире. Ознакомиться со всеми результатами моего анализа можете в материале – ТОП 5 популярных систем управления базами данных.

Редакции MySQL 8

MySQL 8 выпускается в нескольких редакциях.

MySQL Standard Edition

MySQL Standard Edition – это редакция со стандартным функционалом, она позволяет реализовать высокопроизводительные, надежные и масштабируемые приложения.

MySQL Enterprise Edition

MySQL Enterprise Edition – данная редакция включает в себя полный функционал и набор дополнительных инструментов, которые предназначены для достижения самой высокой масштабируемости, безопасности и надежности.

MySQL Cluster Carrier Grade Edition

MySQL Cluster (CGE) – это распределенная база данных, сочетающая линейную масштабируемость и высокую доступность. Она предназначена для критически важных приложений.

MySQL Community Edition – это бесплатная редакция, которую можно абсолютно свободно скачать с официального сайта MySQL. Редакция поддерживает весь необходимый функционал для реализации полноценных интернет ресурсов.

Подробнее о редакциях MySQL можете почитать на официальном сайте – https://www.mysql.com/products/

Пошаговая установка MySQL 8 на Windows 10

Сейчас мы пошагово рассмотрим весь процесс установки MySQL 8 в редакции Community на операционную систему Windows 10.

Кроме сервера MySQL мы еще установим и MySQL Workbench – это инструмент, с помощью которого осуществляется разработка баз данных и администрирование MySQL Server.

Примечание! Для установки MySQL 8 на Windows 10 требуется среда Microsoft .NET Framework 4.5.2 или более новая версия.

Шаг 1 – Скачивание программы MySQL 8 для Windows 10

Чтобы перейти к установке MySQL 8, сначала необходимо скачать дистрибутив этой программы.

Скачать MySQL 8 в редакции Community можно, как было уже отмечено, абсолютно свободно с официального сайта, вот ссылка на страницу загрузки – https://dev.mysql.com/downloads/installer

После перехода на страницу Вы можете выбрать способ загрузки дистрибутива, нам предлагают два способа:

  • Скачать Web-установщик – небольшая по размеру программа, которая загружает все необходимые компоненты для установки MySQL. Можно использовать для установки MySQL на компьютерах, где есть интернет;
  • Скачать полный установщик – дистрибутив программы MySQL, который включает все необходимые компоненты. В данном случае Вы можете использовать этот дистрибутив для установки MySQL на компьютере как с доступом, так и без доступа к интернету. Например, Вы можете скачать этот файл на компьютере, где есть интернет, а использовать его для установки MySQL на другом компьютере, который без интернета.

Для примера давайте скачаем полный дистрибутив программы MySQL, для этого нажимаем «Download» напротив соответствующего пункта.

Потом нам предлагают авторизоваться, используя учетные данные Oracle, если они есть, или зарегистрироваться, тем самым создать учетную запись Oracle. Однако если Вы этого не хотите, то в нижней части есть ссылка «No thanks, just start my download», нажав на которую сразу начнется загрузка MySQL.

Нажимаем на эту ссылку и ждем окончания загрузки.

В результате у Вас должен загрузится файл mysql-installer-community-8.0.18.0.msi размером примерно 415 мегабайт.

Шаг 2 – Запуск установки и выбор типа установки MySQL

Далее запускаем скаченный файл, в итоге запустится программа установки MySQL. Сначала выбираем тип установки.

Нам предлагают несколько вариантов:

  • Developer – это вариант по умолчанию, он предполагает установку всего того, что требуется разработчику, это и MySQL Server, и MySQL Workbench и другие инструменты для работы с MySQL;
  • Server Only – этот вариант предполагает установку только сервера MySQL;
  • Client Only – этот вариант предполагает установку только клиентской части для работы с MySQL Server, т.е. серверная часть устанавливаться не будет;
  • Full – установка всех включённых в дистрибутив компонентов;
  • Custom – выборочная установка, в данном случае Вы можете установить только то, что нужно Вам.

Вариант по умолчанию, т.е. Developer, подойдет для большинства случаев, особенно если Вы устанавливаете MySQL на домашнем компьютере для каких-то своих целей (изучение MySQL, изучение SQL и так далее).

Я оставляю этот вариант, нажимаем «Next».

Примечание! Интерфейс программы установки, как и интерфейс программы MySQL Workbench на английском языке.

Шаг 3 – Проверка и установка дополнительных компонентов

Затем программа установки проверит систему на наличие компонентов, которые требуются для работы некоторых расширений MySQL. В моем случае программа установки выдала два предупреждения для расширений MySQL For Excel и MySQL For Visual Studio. Если Вы планируете пользоваться этими компонентами, то Вам нужно устранить эти замечания. Для этого в свою очередь Вам необходимо установить эти компоненты (т.е. выделить их и нажать «Execute», некоторые могут установиться и автоматически).

Однако если Вы не будете использовать расширения MySQL For Excel и MySQL For Visual Studio, то можете сразу нажать «Next».

Заметка! Установка Visual Studio 2019 Community на Windows 10.

Программа установки выдаст предупреждение, связанное с отсутствием некоторых компонентов, жмем «Yes».

Шаг 4 – Установка компонентов MySQL

Все готово для установки MySQL, на данном шаге программа установки выдаст все компоненты MySQL, которые готовы к установке, нажимаем «Execute».

В результате начнется последовательная установка компонентов MySQL.

Шаг 5 – Завершение установки компонентов MySQL

Когда напротив каждого пункта появится зеленая галочка, установка будет завершена.

Нажимаем «Next».

Шаг 6 – Настройка компонентов MySQL

Все компоненты установлены, но не все настроены, поэтому нам необходимо их настроить. Программа установки покажет, какие конкретно компоненты требуется настроить. В нашем случае это MySQL Server, MySQL Router и Samples and Examples.

Нажимаем «Next».

Шаг 7 – Настройка MySQL Server (параметр High Availability)

Сначала нам обязательно необходимо настроить MySQL Server.

Первым делом настраиваем параметр «High Availability» (Высокая доступность), который отвечает за то, как будет установлен MySQL сервер. В нашем случае, как и в большинстве других, требуется стандартный «Standalone MySQL Server» (Автономный сервер) – это классический вариант установки MySQL Server.

Поэтому выбираем первый пункт и жмем «Next».

Шаг 8 – Настройка MySQL Server (Type and Networking)

Далее настраиваем тип сервера и сеть. В нашем случае можно оставить все по умолчанию:

  • Тип – Development Computer;
  • Протокол – TCP/IP;
  • Порт – 3306;
  • Галочку «Open Windows Firewall ports for network access» необходимо поставить.

В случае необходимости Вы можете более тонко настроить MySQL Server, использовав для этого расширенные параметры. Чтобы это сделать, поставьте галочку «Show Advanced and Logging Options».

Для продолжения жмем «Next».

Шаг 9 – Настройка метода аутентификации в MySQL Server

8 версия MySQL поддерживает новый метод аутентификации, который и рекомендовано использовать, оставляем как есть и нажимаем «Next».

В случае необходимости Вы можете выбрать второй пункт, который использовался в MySQL 5.

Шаг 10 – Настройка пользователей MySQL

После этого нам нужно придумать пароль для пользователя root (это главный администратор MySQL).

Кроме этого, мы можем добавить дополнительных пользователей, чтобы это сделать, необходимо нажать на кнопку «Add User».


И ввести необходимые данные:

  • User Name – вводим имя пользователя;
  • Host – оставляем «All Hosts»;
  • Role – выбираем роль пользователя;
  • Password и Confirm Password – придумываем и вводим пароль, который будет у этого пользователя.

Нажимаем «ОК».

После этого пользователь будет создан.

Нажимаем «Next» для продолжения.

Шаг 11 – Настройка службы MySQL в Windows

Теперь нам необходимо настроить службу MySQL, которая будет работать в Windows.

Мы можем задать:

  • Windows Service Name – Имя службы;
  • «Start the MySQL Server at System Startup» – если эта галочка стоит, то служба MySQL будет запускаться вместе с запуском Windows;
  • Run Windows Service – от имени какой учетной записи будет работать служба MySQL в Windows. Standard System Account – это системная учетная запись.

Можно все оставить по умолчанию, я так и поступаю.

Нажимаем «Next».

Заметка! «Режим бога» в Windows – что это такое и как его включить в Windows 10?

Шаг 12 – Применение параметров MySQL Server

Все параметры MySQL Server настроены, однако нам еще нужно их применить и сохранить. Для этого на следующем окне нажимаем «Execute».

Шаг 13 – Завершение настройки MySQL Server

Когда все галочки будут проставлены и отобразится сообщение «Successful», процесс будет завершен, нажимаем «Finish».

Статус MySQL Server будет изменен на «Configuration complete».

Чтобы продолжить настройку, нажимаем «Next».

Шаг 14 – Настройка MySQL Router

В данном случае нам предлагают настроить маршрутизатор MySQL, однако это делать необязательно, можем сразу нажать «Finish».

Для того чтобы перейти к настройке следующего компонента, нажимаем «Next».

Заметка! Если Вас интересует язык SQL, то рекомендую почитать книгу «SQL код» это самоучитель по языку SQL для начинающих программистов. В ней очень подробно рассмотрены основные конструкции языка.

Шаг 15 – Установка тестовых данных на MySQL

Далее мы можем установить тестовые данные на MySQL Server, например, для обучения. Чтобы это сделать, вводим пароль пользователя Root и нажимаем «Check» для проверки, если подключение установлено, значит все хорошо и можно продолжать.

Нажимаем «Next».

Чтобы применить все параметры и начать извлечение тестовых данных на MySQL Server, нажимаем «Execute».

Процесс будет завершен, когда галочки будут проставлены и отобразится сообщение «Successful».

Нажимаем «Finish».

Шаг 16 – Завершение настройки компонентов MySQL

Все компоненты настроены. Нажимаем «Next».

Шаг 17 – Завершение всего процесса установки и настройки MySQL

MySQL Server и все необходимые для работы с ним компоненты установлены и настроены: это и MySQL Workbench, и различные коннекторы, и документация, и даже тестовая база данных.

Чтобы сразу же запустить MySQL Workbench после завершения установки, поставьте галочку «Start MySQL Workbench after Setup».

Нажимаем «Finish».

Заметка! Установка Microsoft SQL Server 2019 Express на Windows 10.

Запуск MySQL Workbench

После установки MySQL в меню Windows 10 появятся все необходимые ярлыки, которые Вы можете использовать. Например, для запуска среды «MySQL Workbench 8» можно использовать соответствующий ярлык.

Заметка! Если Вас интересует SQL и T-SQL, рекомендую пройти наши курсы по T-SQL, с помощью которых Вы «с нуля» научитесь работать с SQL и программировать с использованием языка T-SQL в Microsoft SQL Server.

Подключение к MySQL используя MySQL Workbench

Чтобы подключиться к серверу MySQL и посмотреть на объекты базы данных, на таблицы, представления и так далее, запустите MySQL Workbench, например, как указано выше. В результате откроется MySQL Workbench, где на стартовой странице у нас уже будет одно подключение к локальному серверу, которое будет осуществляться от имени пользователя root.

Нажимаем на него.

Затем вводим пароль, чтобы сохранить его и не вводить каждый раз при подключении мы можем поставить галочку «Save password in vault».

Нажимаем «ОК».

В итоге мы подключимся к серверу, и чтобы посмотреть на схему данных, нам в окне навигатора необходимо перейти на вкладку «Schemas».

Кроме того, мы можем скрыть ненужные окна, для этого можно использовать специальные значки в правой верхней части среды MySQL Workbench.

У нас отобразится схема данных, теперь мы можем посмотреть, какие объекты есть в БД и, например, учиться писать SQL запросы.

Для наглядности я скрыл боковое окно.

В данном примере мы послали запрос SELECT на выборку данных из таблицы address. Как видите, данные вернулись и все работает.

Заметка! Еще больше статей, посвященных различным СУБД, можете найти в разделе сайта – Базы данных и язык SQL.

Видео-инструкция – Установка MySQL 8 на Windows 10

Заметка! Для комплексного изучения языка SQL рекомендую пройти онлайн-курс по основам SQL для начинающих. На курсе применяется моя авторская последовательная методика обучения, а язык SQL рассматривается как стандарт. Курс включает много практики: онлайн-тестирование, задания и многое другое.

У меня на этом все, надеюсь, материал был Вам полезен, удачи и пока!

Нравится127Не нравится

Настройка сервера баз данных MySQL в операционной системе Windows

После завершения загрузки запустите программу установки следующим образом.

  1. Щелкните правой кнопкой мыши загруженный установочный файл (например, mysql-installer-community-5.6.14.0.msi ) и выберите пункт ‘Выполнить’.
    Запустится программа установки MySQL.

  1. На панели приветствия выберите ‘Установить продукты MySQL’.

  1. На панели информации о лицензии ознакомьтесь с лицензионным соглашением, установите флажок принятия и нажмите кнопку ‘Далее’.

  1. На панели ‘Найти последние продукты’ нажмите кнопку ‘Выполнить’.
    После завершения операции нажмите кнопку ‘Далее’.

  1. На панели «Тип настройки» выберите параметр «Пользовательская», а затем нажмите кнопку «Далее».

  1. На панели ‘Выбор компонентов обеспечения’ убедитесь, что выбран MySQL Server 5.6.x, и нажмите кнопку ‘Далее’.

  1. На панели ‘Проверить требования’ нажмите кнопку ‘Далее’.

  1. На панели ‘Установка’ нажмите кнопку ‘Выполнить’.
    После успешного завершения установки сервера на панели ‘Установка’ отображается информационное сообщение. Нажмите кнопку «Далее».

  1. На странице ‘Настройка’ нажмите кнопку ‘Далее’.

  1. На первой странице конфигурации сервера MySQL (1/3) установите следующие параметры:

    • Тип конфигурации сервера. Выберите вариант ‘Компьютер для разработки’.

    • Включите поддержку сети TCP/IP. Убедитесь, что флажок установлен, и задайте следующие параметры ниже:

    • Номер порта. Укажите порт подключения. По умолчанию установлено значение 3306; не следует изменять его без необходимости.

    • Откройте порт брандмауэра для доступа к сети. Выберите исключение добавления брандмауэра для указанного порта.

    • Расширенная настройка. Выберите флажок ‘Показать расширенные параметры’ для отображения дополнительной страницы конфигурации для настройки расширенных параметров для экземпляра сервера (если требуется).

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

Нажмите кнопку «Далее».

  1. На второй странице конфигурации сервера MySQL (2/3) установите следующие параметры:

    • Пароль учетной записи root.

    • Пароль root для MySQL. Введите пароль пользователя root.

    • Повторите ввод пароля. Повторно введите пароль пользователя root.

Примечание. Пользователь root — это пользователь, который имеет полный доступ к серверу баз данных MySQL — создание, обновление и удаление пользователей и так далее. Запомните пароль пользователя root (администратора) – он понадобится вам при создании примера базы данных.

  • Учетные записи пользователя MySQL. Нажмите кнопку ‘Добавить пользователя’ для создания учетной записи пользователя. В диалоговом окне ‘Сведения о пользователе MySQL’ введите имя пользователя, роль базы данных и пароль (например, !phpuser ). Нажмите кнопку «ОК».
    Нажмите кнопку «Далее».

    1. На третьей странице конфигурации сервера MySQL (3/3) установите следующие параметры:

  • Имя службы Windows. Укажите имя службы Windows, которая будет использоваться для экземпляра сервера MySQL.

  • Запустите сервер MySQL при запуске системы. Не снимайте этот флажок, если сервер MySQL требуется для автоматического запуска при запуске системы.

  • Запуск службы Windows в качестве. Возможны следующие варианты.

  • Стандартная системная учетная запись. Рекомендуется для большинства сценариев.

  • Нестандартный пользователь. Существующая учетная запись пользователя рекомендуется для сложных сценариев.
    Нажмите кнопку «Далее».

    1. На странице ‘Обзор конфигурации’ нажмите кнопку ‘Далее’.

    2. После успешного завершения настройки на панели ‘Завершение’ появляется информационное сообщение. Нажмите кнопку «Завершить».

Примечание. Для проверки успешности настройки запустите диспетчер задач. Если MySQLd-nt.exe присутствует в списке ‘Процессы’, сервер базы данных запущен.

Установки и настройка MySQL 5.5.23

Статья описывает процесс установки и первоначальной настройки на локальном компьютере, работающим под операционной системой Windows XP, прекрасно зарекомендовавшей себя связки программ, используемых при создании, как крупных, так и средних веб-проектов: Apache, MySQL, PHP и phpMyAdmin.

Авторы: Виктор Волков, Иван Шумилов

Содержание:


Сайт разработчика: http://www. mysql.com/
Документация: http://dev.mysql.com/doc/
Дистрибутив: http://www.mysql.com/downloads/mysql/
Прямая ссылка: mysql-5.5.23-win32.msi
Скачайте самораспаковывающийся архив «Windows (x86, 32-bit), MSI Installer» и запустите его.

Установка MySQL в картинках

Далее будут показаны те диалоговые окна, в которых необходимо делать какой-либо выбор.

Нажмите в данном окне выборочную установку компонентов «Custom».

 

Здесь вы можете выбрать дополнительные компоненты и сменить установочную директорию программы.

 

Теперь приступим к настройке MySQL сервера.

 

Выбираем детализированную настройку — «Detailed Configuration».

 

Отмечаем пункт «Developer Machine». Мы ведь разработчики – правда? 🙂

 

Выбрав пункт «Multifunctional Database», вы сможете работать как с таблицами типа InnoDB (с возможностью использования транзакций), так и с высокоскоростной MyISAM (как правило для веб-разработок используется именно этот тип таблиц).

 

Выбор диска и директории для хранения таблиц типа InnoDB.

 

В данном диалоговом окне выбирается максимально возможное количество подключений к серверу MySQL. При выборе «Decision Support (DSS)/OLAP», максимальное количество подключений будет ограничено двадцатью, чего более чем достаточно при установке сервера на домашнем компьютере и отсутствии большого количества одновременных подключений.

 

Отметив «Enable TCP/IP Networking» мы включаем поддержку TCP/IP соединений и выбираем порт, через который они будут осуществляться. Стандартным для сервера MySQL является порт 3306. Отметив «Enable Strict Mode», мы задаем режим строгого соответствия стандарту SQL (данную опцию рекомендуется оставлять включенной).

 

Обратите внимание на выставление настроек данного окна. Отметив «Manual Selected Default Character Set / Collation» и выбрав из ниспадающего меню «cp1251» определяем, что изначально для таблиц будет использоваться кодировка Cyrillic Windows (cp1251), что означает корректную работу с русским языком в данной кодировке.

 

Если отметить «Install As Windows Service», сервер будет запускаться в виде сервиса, что является рекомендуемым способом запуска. Ниже, в ниспадающем списке, задается имя сервиса. Далее, уберите галочку рядом с «Launch the MySQL Server automatically» — мы будем запускать сервер вручную. Также поставьте галочку рядом с «Include Bin Directory in Windows PATH» — это позволит установить видимость директории «bin», для командной строки.

 

Установите пароль пользователя «root». Советую сделать это. Поставьте хотя бы какой-нибудь простенький пароль, только не оставляйте поле пустым, это убережёт вас от возможных неприятностей в дальнейшем.

 

В данном окне обратите внимание на строку «Write configuration file», которая указывает на месторасположение конфигурационного файла MySQL — «my.ini», далее, его необходимо будет немного отредактировать.

 

Откройте для редактирования файл «my.ini».

  1. В раздел [client], после строки:
    port=3306
    Добавьте строку определяющую каталог содержащий файлы описания кодировок:
    character-sets-dir=»C:/Program Files/MySQL/MySQL Server 5. 5/share/charsets»
  2. В раздел [mysqld], после строки:
    port=3306
    Добавьте следующие две строки, первая из которых вам уже известна, вторая – устанавливает кодировку в которой данные передаются MySQL:
    character-sets-dir=»C:/Program Files/MySQL/MySQL Server 5.5/share/charsets»
    init-connect=»SET NAMES cp1251″
  3. Далее, найдите строку:
    default-storage-engine=INNODB
    Замените изначально устанавливаемый тип таблиц на MYISAM:
    default-storage-engine=MYISAM

Сохраните изменения и закройте файл «my.ini».
Установка и настройка сервера MySQL – завершена.

1 Создание базы данных [Zabbix Documentation 5.4]

1 Создание базы данных

Обзор

База данных Zabbix должна быть создана в процессе установки Zabbix сервера или прокси.

Этот раздел предлагает инструкции для создания базы данных Zabbix. Отдельный скрипт схемы поставляется для каждой поддерживаемой базы данных.

Файлы schema.sql, images.sql and data.sql размещены в подпапке database исходных кодов Zabbix. Если Zabbix установлен из распространяемых пакетов, обратитесь к документации распространителя.

Для базы данных Zabbix прокси необходимо импортировать только schema.sql (без images.sql и data.sql)

MySQL
shell> mysql -uroot -p<пароль>
mysql> create database zabbix character set utf8 collate utf8_bin;
mysql> grant all privileges on zabbix.* to [email protected] identified by '<пароль>';
mysql> quit;

Если вы используете пакеты Zabbix продолжите ознакомление с инструкциями для Debian/Ubuntu или RHEL/CentOS, чтобы импортировать данные в базу данных.

shell> cd database/mysql
shell> mysql -uzabbix -p<пароль> zabbix < schema.sql
# остановитесь здесь, если вы создаете базу данных для Zabbix прокси
shell> mysql -uzabbix -p<пароль> zabbix < images. sql
shell> mysql -uzabbix -p<пароль> zabbix < data.sql
PostgreSQL

У вас должна быть база данных с правами создания объектов базы данных. Следующая команда командной оболочки создаст zabbix. Задайте пароль при появлении запроса и затем повторите этот пароль (обратите внимание, что сначала возможно у вас будет запрошен пароль для sudo):

shell> sudo -u postgres createuser --pwprompt zabbix

Теперь мы настроим базу данных zabbix (последний параметр) с ранее созданным пользователем в качестве владельца (-O zabbix) и импортируем изначальную схему и данные (предполагается, что вы находитесь в корневой папке исходных кодов Zabbix):

shell> sudo -u postgres createdb -O zabbix -E Unicode -T template0 zabbix

Если вы используете пакеты Zabbix продолжите ознакомление с инструкциями для Debian/Ubuntu или RHEL/CentOS, чтобы импортировать данные в базу данных.

shell> cd database/postgresql
shell> cat schema. sql | sudo -u zabbix psql zabbix
# остановитесь здесь, если вы создаете базу данных для Zabbix прокси.
shell> cat images.sql | sudo -u zabbix psql zabbix
shell> cat data.sql | sudo -u zabbix psql zabbix

Приведенные выше команды представлены как пример, который будет работать на большинстве GNU/Linux инсталляций. Вы можете использовать другие команды, например “psql -U <username>” зависит от того каким образом настроена ваша система/база данных. Если у вас появились проблемы с настройкой базы данных, пожалуйста, проконсультируйтесь с вашим администратором баз данных.

Oracle

Мы полагаем, что пользователь zabbix базы данных с паролем пароль уже существует и имеет права на создание объектов в ORCL службе, расположенной на хост сервере базы данных Oracle c shell пользователем пользователь, который имеет доступ в папку /tmp. Zabbix требует базу данных в Юникод кодировке и национальную кодировку UTF8. Проверьте текущие настройки:

sqlplus> select parameter,value from v$nls_parameters where parameter='NLS_CHARACTERSET' or parameter='NLS_NCHAR_CHARACTERSET';

Если вы создаете базу данных для Zabbix сервера вам необходимо поместить куда-то изображения на хост с Oracle из исходных кодов Zabbix. Скопируйте их в /tmp/zabbix_images папку на хосте с Oracle:

shell> cd /путь/к/исходным/кодам/zabbix
shell> ssh [email protected]_host "mkdir /tmp/zabbix_images"
shell> scp -r misc/images/png_modern [email protected]_host:/tmp/zabbix_images/

Теперь подготовьте базу данных:

shell> cd /путь/к/исходным/кодам/zabbix/database/oracle
shell> sqlplus zabbix/пароль@oracle_host/ORCL
sqlplus> schema.sql
# остановитесь здесь, если вы создаете базу данных для Zabbix прокси
sqlplus> images.sql
sqlplus> data.sql

Теперь временную папку можно удалить:

shell> ssh [email protected]_host "rm -rf /tmp/zabbix_images"
SQLite

Использование SQLite поддерживается только на Zabbix прокси!

Если с Zabbix прокси используется SQLite, то база данных будет автоматически создана, если она еще не существует.

shell> cd database/sqlite3
shell> sqlite3 /var/lib/sqlite/zabbix.db < schema.sql

Вернуться в раздел установки.

быстрый старт, управление схемой данных

Веб-разработчик растёт вместе с проектами, которые он создаёт и развивает. С ростом проектов увеличивается сложность программной части, неизбежно возрастает количество обрабатываемых ею данных, а так же сложность схемы данных. Общение с другими вебщиками показывает, что огромной популярностью среди нас пользуются базы данных MySQL, а для управления ими — небезызвестный PHPMyAdmin. Переходя от маленьких проектов к большим, от cms к фреймворкам, многие, как и я, остаются верны MySQL. Однако для проектирования сложной базы данных с большим количеством таблиц и связей, возможностей PHPMyAdmin катастрофически не хватает. Поэтому я решил написать обзор MySQL Workbench — замечательной бесплатной десктопной программы для работы с MySQL.


В первой части обзора я расскажу о самых основах работы с программой, так что, можете использовать эту статью как руководство начинающего пользователя. Вторая часть будет посвящена использованию Workbench в бою при работе с удалённым сервером. В ней я дам базовые инструкции и рекомендации по настройке подключения сервера и синхронизации с ним.

MySQL Workbench — инструмент для визуального проектирования баз данных, интегрирующий проектирование, моделирование, создание и эксплуатацию БД в единое бесшовное окружение для системы баз данных MySQL.

Должен сказать, что программа действительно великолепная. Она позволяет быстро и с удовольствием накидывать схемы данных проекта, проектировать сущности и связи между ними, безболезненно внедрять изменения в схему и так же быстро и безболезненно синхронизировать её с удалённым сервером. А графический редактор EER-диаграмм, напоминающих забавных таракашек, позволяет увидеть общую картину модели данных и насладиться её лёгкостью и элегантностью 🙂 После первой же пробы этот инструмент становится незаменимым помощником в боевом арсенале веб-программиста.

Скачать MySQL Workbench

Дистрибутив MySQL Workbench доступен на этой странице. Самая свежая версия программы на момент написания статьи — Version 6.1. Перед скачиванием требуется выбрать одну из следующих платформ:

  • Microsoft Windows (доступны MSI Installer и ZIP архив)
  • Ubuntu Linux
  • Fedora
  • Red Hat Enterprise Linux / Oracle Linux
  • Mac OS X

После выбора платформы вам предлагают зарегистрироваться или авторизоваться в Oracle. Если не хотите, внизу есть ссылка «No thanks, just start my download» — жмите на неё 😉

Начало работы

Стартовый экран программы отражает основные направления её функциональности — проектирование моделей баз данных и их администрирование:

В верхней части экрана находится список подключений к MySQL серверам ваших проектов, а список последних открытых моделей данных — в нижней части экрана. Работа обычно начинается с создания схемы данных или загрузки существующей структуры в MySQL Workbench. Приступим к работе!

Создание и редактирование модели данных

Для добавления модели нажимаем плюсик рядом с заголовком «Models» или выбираем «File → New Model» (Ctrl + N):

На этом экране вводим имя базы данных, выбираем кодировку по умолчанию и, если нужно, заполняем поле комментария. Можно приступать к созданию таблиц.

Добавление и редактирование таблицы

Список баз данных проекта и список таблиц в пределах базы данных будет располагаться во вкладке «Physical Schemas». Чтобы создать таблицу, дважды кликаем на «+Add Table»:

Откроется удобный интерфейс для редактирования списка полей и их свойств. Здесь мы можем задать название поля, тип данных, а так же установить для полей различные атрибуты: назначить поле первичным ключом (PK), пометить его Not Null (NN), бинарным (BIN), уникальным (UQ) и другие, установить для поля авто-инкремирование (AI) и значение по умолчанию (Default).

Управление индексами

Добавлять, удалять и редактировать индексы таблиц можно во вкладке «Indexes» интерфейса управления таблицей:

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

Связи между таблицами

Установка внешних ключей и связывание таблиц возможно только для таблиц InnoDB (эта система хранения данных выбирается по умолчанию). Для управления связями в каждой таблице находится вкладка «Foreign Keys»:

Для добавления связи открываем вкладку «Foreign Keys» дочерней таблицы, вводим имя внешнего ключа и выбираем таблицу-родителя. Далее в средней части вкладки в графе Column выбираем поле-ключ из дочерней таблицы, а в графе Referenced Column — соответствующее поле из родительской таблицы (тип полей должен совпадать). При создании внешних ключей в дочерней таблице автоматически создаются соответствующие индексы.

В разделе «Foreign Key Options» настраиваем поведение внешнего ключа при изменении соответствующего поля (ON UPDATE) и удалении (ON DELETE) родительской записи:

  • RESTRICT — выдавать ошибку при изменении / удалении родительской записи
  • CASCADE — обновлять внешний ключ при изменении родительской записи, удалять дочернюю запись при удалении родителя
  • SET NULL — устанавливать значение внешнего ключа NULL при изменении / удалении родителя (неприемлемо для полей, у которых установлен флаг NOT NULL!)
  • NO ACTION — не делать ничего, однако по факту эффект аналогичен RESTRICT

В приведённом примере я добавил к дочерней таблице UserProfile внешний ключ для связи с родительской таблицей User. При редактировании поля userId и удалении позиций из таблицы User аналогичные изменения будут автоматически происходить и со связанными записями из таблицы UserProfile.

Наполнение таблицы базовыми данными

При создании проекта в базу данных часто нужно добавлять стартовые данные. Это могут быть корневые категории, пользователи-администраторы и т.д. В управлении таблицами MySQL Workbench для этого существует вкладка «Inserts»:

Как видно из примера, в случае, если перед записью в базу данных к данным нужно применить какую-то функцию MySQL, это делается с помощью синтаксиса \func functionName(‘data’), например, \func md5(‘password’).

После ввода данных необходимо сохранить их в локальную базу данных нажатием на кнопку «Apply Changes».

Создание EER диаграммы (диаграммы «сущность-связь»)

Для представления схемы данных, сущностей и их связей в графическом виде в MySQL Workbench существует редактор EER-диаграмм. Для создания диаграммы в верхней части экрана управления базой данных дважды кликаем на иконку «+Add Diagram»:

В его интерфейсе можно создавать и редактировать таблицы, добавлять между ними связи различных типов. Чтобы добавить уже существующую в схеме таблицу на диаграмму, просто перетащите её из панели «Catalog Tree».

Для экспорта схемы данных в графический файл выберите «File → Export», а затем один из вариантов (PNG, SVG, PDF, PostScript File).

Импорт существующей схемы данных (из SQL дампа)

Если у нас уже есть схема данных, её можно без труда импортировать в MySQL Workbench для дальнейшей работы. Для импорта модели из SQL файла выбираем «File → Import → Reverse Engineer MySQL Create Script…», после чего выбираем нужный SQL файл и жмём «Execute >»

В MySQL Workbench так же предусмотрен импорт и синхронизация модели данных нарямую с удалённым сервером. Для этого потребуется создать подключение удалённого доступа к MySQL, о которых я расскажу в продолжении данного обзора.

Демо-проект из статьи доступен для скачивания по этой ссылке. Желаю успехов и красивых таракашек схем!


Установка MySQL в Ubuntu 20.04

Предыдущая версия настоящего обучающего модуля составлена Хейзел Вирдо

Введение

MySQL — это система управления базами данных с открытым исходным кодом, которая, как правило, устанавливается в составе популярного стека LAMP (Linux, Apache, MySQL, PHP/Python/Perl). Она использует реляционную модель и язык структурированных запросов (SQL) для управления данными.

В этом обучающем руководстве мы рассмотрим, как установить 8-ю версию MySQL на сервер Ubuntu 20.04. В результате вы получите рабочую реляционную базу данных, которую вы сможете использовать для создания следующего сайта или приложения.

Предварительные требования

Для данного обучающего руководства вам потребуется следующее:

Шаг 1 — Установка MySQL

На Ubuntu 20.04 вы можете установить MySQL с помощью репозитория пакетов APT. На момент написания этого руководства в репозитории Ubuntu по умолчанию доступна версия MySQL 8.0.19.

Для установки обновите индекс пакетов на вашем сервере, если еще не сделали этого:

Затем выполните установку пакета mysql-server:

  • sudo apt install mysql-server

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

Шаг 2 — Настройка MySQL

Для новых установок MySQL необходимо запустить встроенный в СУБД скрипт безопасности. Этот скрипт меняет ряд наименее защищенных опций, используемых по умолчанию, для таких функций, как, например, удаленный вход для пользователя root и тестовые пользователи.

Запустите скрипт безопасности с помощью команды sudo:

  • sudo mysql_secure_installation

При этом откроется серия диалогов, где вы сможете внести некоторые изменения в параметры безопасности установки MySQL. В первом запросе вам предложат определить, хотите ли вы настроить плагин валидации пароля, который вы можете использовать для проверки надежности вашего пароля MySQL.

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

Output

Securing the MySQL server deployment. Connecting to MySQL using a blank password. 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

Независимо от того, захотите ли вы выполнить настройку плагина валидации пароля, в следующем запросе вас попросят установить пароль для пользователя root MySQL. Введите и подтвердите безопасный пароль по вашему выбору:

Output

Please set the password for root here. New password: Re-enter new password:

Если вы использовали плагин валидации пароля, то получите информацию о надежности вашего нового пароля. Затем скрипт спросит, хотите ли вы продолжить использовать пароль, который вы только что ввели, или хотите ввести новый пароль. Если вы удовлетворены надежностью пароля, который вы только что ввели, введите Y для продолжения:

Output

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

Далее вы можете использовать клавиши Y и ENTER, чтобы принять ответы по умолчанию для всех последующих вопросов. Выбрав эти ответы, вы удалите ряд анонимных пользователей и тестовую базу данных, отключите возможность удаленного входа пользователя root и загрузите новые правила, чтобы внесенные изменения немедленно активировались в MySQL.

Обратите внимание, что несмотря на то, что вы установили пароль для root user MySQL, аутентификация с помощью пароля при подключении к оболочке MySQL для этого пользователя не настроена. Если необходимо, вы можете изменить эту настройку в шаге 3.

Шаг 3 — Настройка аутентификации и прав пользователя (опционально)

В системах Ubuntu при запуске MySQL 5. 7 (и более поздние версии) для root пользователя MySQL по умолчанию устанавливается аутентификация с помощью плагина auth_socket, а не пароля. Во многих случаях это обеспечивает более высокую безопасность и удобство, однако это также может осложнить ситуацию, если вам нужно предоставить доступ к пользователю внешней программе (например, phpMyAdmin).

Для использования пароля для подключения к MySQL в качестве root пользователя необходимо изменить метод аутентификации с auth_socket на другой плагин, например caching_sha2_password или mysql_native_password. Для этого откройте командную строку MySQL через терминал:

Затем проверьте, какой метод аутентификации используют ваши аккаунты пользователей MySQL с помощью следующей команды:

  • SELECT user,authentication_string,plugin,host FROM mysql.user;

Output

+------------------+------------------------------------------------------------------------+-----------------------+-----------+ | user | authentication_string | plugin | host | +------------------+------------------------------------------------------------------------+-----------------------+-----------+ | debian-sys-maint | $A$005$lS|M#3K #XslZ.xXUq.crEqTjMvhgOIX7B/zki5DeLA3JB9nh0KwENtwQ4 | caching_sha2_password | localhost | | mysql.infoschema | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | caching_sha2_password | localhost | | mysql.session | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | caching_sha2_password | localhost | | mysql.sys | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | caching_sha2_password | localhost | | root | | auth_socket | localhost | +------------------+------------------------------------------------------------------------+-----------------------+-----------+ 5 rows in set (0.00 sec)

В этом примере вы можете видеть, что root пользователь действительно использует метод аутентификации с помощью плагина auth_socket. Для настройки учетной записи root на использование метода аутентификации с помощью пароля запустите команду ALTER USER​​​, чтобы изменить используемый плагин аутентификации и установить новый пароль.

Не забудьте изменить password​​​ на более надежный пароль и убедитесь, что эта команда заменит пароль root, заданный на шаге 2:

  • ALTER USER 'root'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'password';

Примечание. Предыдущее выражение ALTER USER устанавливает аутентификацию root user MySQL с помощью плагина caching_sha2_password​​. Согласно официальной документации MySQL, caching_sha2_password​​​ считается предпочтительным плагином аутентификации MySQL, так как он обеспечивает более защищенное шифрование пароля, чем более старая, но все еще широко используемая версия mysql_native_password.

Однако многие приложения PHP, например phpMyAdmin, работают ненадежно с caching_sha2_password. Если вы планируете использовать эту базу данных с приложением PHP, возможно, вам потребуется установить аутентификацию root с помощью mysql_native_password​​:

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

Затем выполните команду FLUSH PRIVILEGES, которая просит сервер перезагрузить предоставленные таблицы и ввести в действие изменения:

Проверьте методы аутентификации, применяемые для каждого из ваших пользователей, чтобы подтвердить, что root-пользователь больше не использует для аутентификации плагин auth_socket:

  • SELECT user,authentication_string,plugin,host FROM mysql.user;

Output

+------------------+------------------------------------------------------------------------+-----------------------+-----------+ | user | authentication_string | plugin | host | +------------------+------------------------------------------------------------------------+-----------------------+-----------+ | debian-sys-maint | $A$005$lS|M#3K #XslZ.xXUq.crEqTjMvhgOIX7B/zki5DeLA3JB9nh0KwENtwQ4 | caching_sha2_password | localhost | | mysql.infoschema | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | caching_sha2_password | localhost | | mysql.session | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | caching_sha2_password | localhost | | mysql.sys | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | caching_sha2_password | localhost | | root | *3636DACC8616D997782ADD0839F92C1571D6D78F | caching_sha2_password | localhost | +------------------+------------------------------------------------------------------------+-----------------------+-----------+ 5 rows in set (0.00 sec)

Результаты данного примера показывают, что теперь root user MySQL проходит аутентификацию с помощью caching_sha2_password. Убедившись в этом на своем сервере, вы можете выйти из оболочки MySQL:

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

Примечание. Если у вас активирована аутентификация root​​ с помощью пароля, как описано в предыдущих параграфах, вам потребуется использовать другую команду для доступа к оболочке MySQL. Следующая команда будет запускать ваш клиент MySQL с обычными правами пользователя, и вы получите права администратора внутри базы данных только с помощью аутентификации:

Создайте нового пользователя и придумайте для него надежный пароль:

  • CREATE USER 'sammy'@'localhost' IDENTIFIED BY 'password';

Затем предоставьте вашему новому пользователю соответствующие права. Например, вы можете предоставить пользователю права доступа ко всем таблицам в базе данных, а также можете добавлять, изменять и удалять права пользователя с помощью этой команды:

  • GRANT ALL PRIVILEGES ON *.* TO 'sammy'@'localhost' WITH GRANT OPTION;

Обратите внимание, что на данный момент вам не нужно запускать команду FLUSH PRIVILEGES снова. Данная команда нужна только при изменении предоставленных таблиц с применением таких выражений, как INSERT, UPDATE или DELETE. Поскольку вы создали нового пользователя вместо изменения существующего, команда FLUSH PRIVILEGES​​​ не требуется.

После этого выйдите из оболочки MySQL:

В заключение проверим установку MySQL.

Шаг 4 — Тестирование MySQL

Независимо от способа установки MySQL должна запускаться автоматически. Чтобы проверить это, проверьте ее статус.

  • systemctl status mysql.service

Результат будет выглядеть примерно так:

Output

● mysql.service - MySQL Community Server Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: enabled) Active: active (running) since Tue 2020-04-21 12:56:48 UTC; 6min ago Main PID: 10382 (mysqld) Status: "Server is operational" Tasks: 39 (limit: 1137) Memory: 370.0M CGroup: /system.slice/mysql.service └─10382 /usr/sbin/mysqld

Если MySQL не запускается, можно активировать ее с помощью команды sudo systemctl start mysql.

В качестве дополнительной проверки вы можете попробовать подключиться к базе данных с помощью инструмента mysqladmin, который позволяет запускать команды администрирования. Например, эта команда позволяет подключиться к MySQL в качестве пользователя root (-u root), запросить пароль (-p) и обеспечить возврат версии.

  • sudo mysqladmin -p -u root version

Результат должен выглядеть примерно следующим образом:

Output

mysqladmin Ver 8.0.19-0ubuntu5 for Linux on x86_64 ((Ubuntu)) 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.19-0ubuntu5 Protocol version 10 Connection Localhost via UNIX socket UNIX socket /var/run/mysqld/mysqld.sock Uptime: 10 min 44 sec Threads: 2 Questions: 25 Slow queries: 0 Opens: 149 Flush tables: 3 Open tables: 69 Queries per second avg: 0.038

Это означает, что система MySQL запущена и работает.

Заключение

Теперь на вашем сервере установлена базовая версия MySQL. Ниже представлены несколько примеров следующих возможных шагов:

включение сервера и доступ к его администрированию – QNAP Россия и СНГ

MySQL — свободная реляционная система управления базами данных. MySQL является решением для малых и средних приложений. Обычно MySQL используется в качестве сервера, к которому обращаются локальные или удалённые клиенты, однако в дистрибутив входит библиотека внутреннего сервера, позволяющая включать MySQL в автономные программы.

Гибкость СУБД MySQL обеспечивается поддержкой большого количества типов таблиц: пользователи могут выбрать как таблицы типа MyISAM, поддерживающие полнотекстовый поиск, так и таблицы InnoDB, поддерживающие транзакции на уровне отдельных записей. Более того, СУБД MySQL поставляется со специальным типом таблиц EXAMPLE, демонстрирующим принципы создания новых типов таблиц. Благодаря открытой архитектуре и GPL-лицензированию, в СУБД MySQL постоянно появляются новые типы таблиц.

Множество приложений, такие как MediaWiki, Joomla, WordPress, Asterisk поддерживают таблицы MySQL и нуждаются в них для полноценной работы.

 

Чтобы включить сервер откройте веб-интерфейс QNAP Turbo NAS и зайдите в меню Панель Управления > Серверы приложений > Сервер MySQL. Установите галочки Включить сервер MySQL и установите галочку Включить сеть TCP/IP, если сервер будут использовать приложения в локальной сети или Интернете.

Нажмите Применить.

 

Теперь сервер MySQL включен и работает. Этого достаточно для работы некоторых приложений.

 

Для управления сервером понадобится установить phpMyAdmin.

PHPMyAdmin — веб-приложение с открытым кодом, написанное на языке PHP и представляющее собой веб-интерфейс для администрирования СУБД MySQL. PHPMyAdmin позволяет через браузер осуществлять администрирование сервера MySQL, запускать команды SQL и просматривать содержимое таблиц и баз данных. Приложение пользуется большой популярностью у веб-разработчиков, так как позволяет управлять СУБД MySQL без непосредственного ввода SQL команд, предоставляя дружественный интерфейс.

На сегодняшний день PHPMyAdmin широко применяется на практике. Последнее связано с тем, что разработчики интенсивно развивают свой продукт, учитывая все нововведения СУБД MySQL.

Приложение распространяется под лицензией GNU General Public License и поэтому многие другие разработчики интегрируют его в свои разработки, например XAMPP, Denwer, AppServ, Open Server.

 

Установить phpMyAdmin можно через App Center. Откройте App Сenter через главное меню, или запустив ярлык на рабочем столе веб-конфигуратора.

 

Введите часть названия phpMyAdmin в строку поиска. Нажмите Добавить на карточке приложения.

 

Дождитесь, пока приложение пройдет все стадии установки.

 

Проверьте включен ли у вас веб-сервер. Если нет, то включите. Зайдите в меню Панель управления > Серверы приложений > Веб-сервер. Установите галочку Включить, нажмите Применить.

 

 

Запустите приложение phpMyAdmin через главное меню, или кликнув на ярлык на рабочем столе веб-конфигуратора.

 

Приложение откроется в новой вкладке браузера. Приложение использует тот порт, который назначен на вашем QNAP Turbo NAS для веб-сервера (по умолчанию 80). Это следует учитывать, если вы хотите предоставить удаленный доступ из Интернета к этому приложению.

Логин по умолчанию root, пароль по умолчанию admin.

 

Можно приступать к редактированию базы.

 

В нашей базе знаний есть статьи по схожим темам:


Полезные дополнительные ссылки:

10.12 Настройка языка сообщений об ошибках

10.12 Настройка языка сообщений об ошибках

По умолчанию mysqld выдает сообщения об ошибках в
Английский, но они могут отображаться на любом из нескольких других
языки: чешский, датский, голландский, эстонский, французский, немецкий, греческий,
Венгерский, итальянский, японский, корейский, норвежский, норвежский,
Польский, португальский, румынский, русский, словацкий, испанский или
Шведский. Это относится к сообщениям, которые сервер записывает в ошибку.
log и отправляет клиентам.

Чтобы выбрать язык, на котором сервер пишет сообщения об ошибках,
следуйте инструкциям в этом разделе. Для получения информации о
изменение набора символов для сообщений об ошибках (а не
язык), см. Раздел 10.6, «Набор символов сообщения об ошибке». Для общего
информацию о настройке регистрации ошибок см.
Раздел 5.4.2, «Журнал ошибок».

Сервер ищет файл сообщения об ошибке, используя следующие правила:

  • Он ищет файл в каталоге, состоящем из двух
    значения системных переменных,
    lc_messages_dir и
    lc_messages , с последним
    преобразовано в название языка.Предположим, вы запускаете
    сервер с помощью этой команды:

      mysqld --lc_messages_dir = / usr / share / mysql --lc_messages = fr_FR  

    В этом случае mysqld отображает локаль
    fr_FR на язык
    французский и ищет файл ошибки в
    / usr / share / mysql / french каталог.

    По умолчанию языковые файлы расположены в
    общий / mysql / ЯЗЫК
    в базовом каталоге MySQL.

  • Если файл сообщения не может быть найден в каталоге
    построенный, как только что описано, сервер игнорирует
    lc_messages значение и использование
    только lc_messages_dir
    ценность как место, в котором искать.

  • Если сервер не может найти настроенный файл сообщения, он
    записывает сообщение в журнал ошибок, чтобы указать на проблему и
    по умолчанию используются встроенные сообщения на английском языке.

Система lc_messages_dir
переменная может быть установлена ​​только при запуске сервера и имеет только глобальный
значение только для чтения во время выполнения.
lc_messages можно установить на сервере
при запуске и имеет глобальные значения и значения сеанса, которые можно изменить в
время выполнения. Таким образом, язык сообщений об ошибках можно изменить, пока
сервер запущен, и у каждого клиента может быть собственное сообщение об ошибке
язык, установив его сеанс
lc_messages значение до желаемого
название локали.Например, если сервер использует
fr_FR локаль для сообщений об ошибках, клиент может
выполните этот оператор, чтобы получать сообщения об ошибках на английском языке:

  НАБОР lc_messages = 'en_US';  

1 Создание базы данных [Zabbix Documentation 5.4]

1 Создание базы данных

Обзор

База данных Zabbix должна быть создана во время установки Zabbix сервера или прокси.

В этом разделе представлены инструкции по созданию базы данных Zabbix. Для каждой поддерживаемой базы данных доступен отдельный набор инструкций.

UTF-8 — единственная кодировка, поддерживаемая Zabbix. Известно, что он работает без каких-либо недостатков безопасности. Пользователи должны знать, что существуют известные проблемы безопасности при использовании некоторых других кодировок.

MySQL

Набор символов utf8 и utf8_bin необходим для правильной работы Zabbix сервера / прокси с базой данных MySQL.

 оболочка> mysql -uroot -p <пароль>
mysql> создать базу данных набор символов zabbix utf8 collate utf8_bin;
mysql> создать пользователя 'zabbix' @ 'localhost', идентифицированного как '<пароль>';
mysql> предоставить все привилегии на zabbix. * 'zabbix' @ 'localhost';
mysql> выйти; 

Если вы устанавливаете из Zabbix пакеты , остановитесь на этом и продолжите с инструкциями для RHEL / CentOS или Debian / Ubuntu по импорту данных в базу данных.

Если вы устанавливаете Zabbix из исходников, переходите к импорту данных в базу данных.Для базы данных прокси Zabbix необходимо импортировать только schema.sql (без images.sql и data.sql):

Оболочка

> база данных cd / mysql
оболочка> mysql -uzabbix -p <пароль> zabbix  mysql -uzabbix -p <пароль> zabbix  mysql -uzabbix -p <пароль> zabbix 
PostgreSQL

У вас должен быть пользователь базы данных с разрешениями на создание объектов базы данных.Следующая команда оболочки создаст пользователя zabbix . Укажите пароль при появлении запроса и повторите пароль (обратите внимание, сначала вас могут попросить ввести пароль sudo ):

Оболочка

> sudo -u postgres createuser --pwprompt zabbix 

Теперь мы настроим базу данных zabbix (последний параметр) с ранее созданным пользователем в качестве владельца ( -O zabbix ).

Оболочка

> sudo -u postgres createdb -O zabbix -E Unicode -T template0 zabbix 

Если вы устанавливаете из Zabbix пакеты , остановитесь на этом и продолжите с инструкциями для RHEL / CentOS или Debian / Ubuntu по импорту исходной схемы и данных в базу данных.

Если вы устанавливаете Zabbix из источников, переходите к импорту исходной схемы и данных (при условии, что вы находитесь в корневом каталоге источников Zabbix). Для базы данных прокси Zabbix необходимо импортировать только schema.sql (без images.sql и data.sql).

Оболочка

> база данных cd / postgresql
оболочка> cat schema.sql | sudo -u zabbix psql zabbix
# остановитесь здесь, если вы создаете базу данных для Zabbix прокси
оболочка> cat images.sql | sudo -u zabbix psql zabbix
оболочка> cat data.sql | sudo -u zabbix psql zabbix 

Приведенные выше команды представлены в качестве примера, который будет работать в большинстве установок GNU / Linux.Вы можете использовать разные команды, например. грамм. «Psql -U <имя пользователя>» в зависимости от того, как настроена ваша система / база данных. Если у вас возникли проблемы с настройкой базы данных, обратитесь к администратору базы данных.

Шкала времени DB

Инструкции по созданию и настройке TimescaleDB представлены в отдельном разделе.

Оракул

Инструкции по созданию и настройке базы данных Oracle приведены в отдельном разделе.

SQLite

Использование SQLite поддерживается только для Zabbix proxy !

Если вы используете SQLite с Zabbix прокси, база данных будет создана автоматически, если она не существует.

 оболочка> база данных cd / sqlite3
оболочка> sqlite3 /var/lib/sqlite/zabbix.db 

Вернитесь в раздел установки.

MySQL месяц язык | Sytist Manual | Статьи

ar_AE : арабский - Объединенные Арабские Эмираты ar_BH : арабский - Бахрейн
ar_DZ : арабский - Алжир ar_EG : арабский - Египет
ar_IN : арабский - Индия ar_IQ : арабский - Ирак
ar_JO : арабский - Иордания ar_KW : арабский - Кувейт
ar_LB : арабский - Ливан ar_LY : арабский - Ливия
ar_MA : арабский - Марокко ar_OM : арабский - Оман
ar_QA : арабский - Катар ar_SA : арабский - Саудовская Аравия
ar_SD : арабский - Судан ar_SY : арабский - Сирия
ar_TN : арабский - Тунис ar_YE : арабский - Йемен
be_BY : Белорусский - Беларусь bg_BG : Болгарский - Болгария
ca_ES : каталонский - Испания cs_CZ : Чехия - Чешская Республика
da_DK : датский - Дания de_AT : Германия - Австрия
de_BE : немецкий - Бельгия de_CH : Германия - Швейцария
de_DE : немецкий - Германия de_LU : Немецкий - Люксембург
en_AU : английский - Австралия en_CA : английский - Канада
en_GB : английский - Великобритания en_IN : Английский - Индия
en_NZ : английский - Новая Зеландия en_PH : английский - Филиппины
en_US : английский - США en_ZA : английский - Южная Африка
en_ZW : Английский - Зимбабве es_AR : испанский - Аргентина
es_BO : Испанский - Боливия es_CL : Испанский - Чили
es_CO : испанский - Колумбия es_CR : Испанский - Коста-Рика
es_DO : Испанский - Доминиканская Республика es_EC : испанский - Эквадор
es_ES : испанский - Испания es_GT : испанский - Гватемала
es_HN : испанский - Гондурас es_MX : испанский - Мексика
es_NI : испанский - Никарагуа es_PA : испанский - Панама
es_PE : испанский - Перу es_PR : испанский - Пуэрто-Рико
es_PY : испанский - Парагвай es_SV : испанский - Сальвадор
es_US : испанский - США es_UY : испанский - Уругвай
es_VE : испанский - Венесуэла et_EE : Эстонский - Эстония
eu_ES : Basque - Баскский fi_FI : финский - Финляндия
fo_FO : Фарерские острова - Фарерские острова fr_BE : французский - Бельгия
fr_CA : французский - Канада fr_CH : французский - Швейцария
fr_FR : французский - Франция fr_LU : Французский - Люксембург
gl_ES : Галисийский - Испания gu_IN : Гуджарати - Индия
he_IL : иврит - Израиль hi_IN : хинди - Индия
hr_HR : Хорватский - Хорватия hu_HU : Венгерский - Венгрия
id_ID : Индонезийский - Индонезия is_IS : исландский - Исландия
it_CH : итальянский - Швейцария it_IT : Итальянский - Италия
ja_JP : японский - Япония ko_KR : Корейский - Республика Корея
lt_LT : Литовский - Литва lv_LV : Латвийский - Латвия
mk_MK : Македонский - БЮРМ mn_MN : Монголия - Монгольский
мс_MY : Малайский - Малайзия nb_NO : норвежский (букмол) - Норвегия
nl_BE : Голландский - Бельгия nl_NL : Голландский - Нидерланды
№_NO : норвежский - Норвегия pl_PL : Польский - Польша
pt_BR : Португальский - Бразилия pt_PT : Португальский - Португалия
ro_RO : Румынский - Румыния ru_RU : Русский - Россия
ru_UA : Россия - Украина sk_SK : Словацкий - Словакия
sl_SI : словенский - Словения sq_AL : Албанский - Албания
sr_YU : Сербский - Югославия sv_FI : шведский - Финляндия
sv_SE : шведский - Швеция ta_IN : Тамил - Индия
te_IN : телугу - Индия th_TH : Тайский - Таиланд
tr_TR : Турецкий - Турция uk_UA : Украинский - Украина
ur_PK : урду - Пакистан vi_VN : Вьетнамский - Вьетнам
zh_CN : китайский - Китай zh_HK : китайский - Гонконг
zh_TW : китайский - Тайвань, провинция Китая

Экспресс-интеграция с базой данных

Чтобы добавить возможность подключения баз данных к приложениям Express, достаточно просто загрузить соответствующий Node.js для базы данных в вашем приложении. В этом документе кратко объясняется, как добавить и использовать некоторые из самых популярных модулей Node.js для систем баз данных в вашем приложении Express:

Эти драйверы баз данных являются одними из многих доступных. Для других вариантов,
поиск на сайте npm.

Кассандра

Модуль : cassandra-driver

Установка

  $ npm установить cassandra-driver
  

Пример

  var cassandra = require ('cassandra-driver')
var client = новая кассандра.Клиент ({contactPoints: ['localhost']})

client.execute ('выберите ключ из system.local', function (err, result) {
  если (ошибка) бросить ошибку
  console.log (result.rows [0])
})
  

Диван

Модуль : couchnode

Установка

  $ npm установить кушетку
  

Пример

  var couchbase = require ('couchbase')
var bucket = (новый couchbase.Cluster ('http: // localhost: 8091')) .openBucket ('bucketName')

// добавляем документ в корзину
ведро.insert ('документ-ключ', {имя: 'Мэтт', размер обуви: 13}, function (err, result) {
  if (err) {
    console.log (ошибка)
  } еще {
    console.log (результат)
  }
})

// получаем все документы с размером обуви 13
var n1ql = 'SELECT d. * FROM `bucketName` d WHERE shoeSize = $ 1'
var query = N1qlQuery.fromString (n1ql)
bucket.query (запрос, [13], функция (ошибка, результат) {
  if (err) {
    console.log (ошибка)
  } еще {
    console.log (результат)
  }
})
  

Диван DB

Модуль : nano

Установка

  $ npm установить nano
  

Пример

  var nano = require ('nano') ('http: // localhost: 5984')
нано.db.create ('книги')
var books = nano.db.use ('книги')

// Вставляем книжный документ в базу данных книг
books.insert ({name: 'Искусство войны'}, null, function (err, body) {
  if (err) {
    console.log (ошибка)
  } еще {
    console.log (тело)
  }
})

// Получаем список всех книг
books.list (function (err, body) {
  if (err) {
    console.log (ошибка)
  } еще {
    console.log (body.rows)
  }
})
  

УровеньDB

Модуль : levelup

Установка

  $ npm уровень установки levelup leveldown
  

Пример

  var levelup = require ('levelup')
var db = levelup ('./ mydb ')

db.put ('имя', 'LevelUP', function (err) {
  if (err) return console.log ('Ooops!', err)

  db.get ('имя', функция (ошибка, значение) {
    if (err) return console.log ('Ooops!', err)

    console.log ('имя =' + значение)
  })
})
  

MySQL

Модуль : mysql

Установка

  $ npm установить mysql
  

Пример

  var mysql = требуется ('mysql')
var connection = mysql.createConnection ({
  хост: 'localhost',
  пользователь: 'dbuser',
  пароль: 's3kreee7',
  база данных: 'my_db'
})

связь.соединять()

connection.query ('ВЫБРАТЬ 1 + 1 КАК решение', function (err, rows, fields) {
  если (ошибка) бросить ошибку

  console.log ('Решение:', rows [0] .solution)
})

connection.end ()
  

MongoDB

Модуль : mongodb

Установка

  $ npm установить mongodb
  

Пример (v2. *)

  var MongoClient = require ('mongodb'). MongoClient

MongoClient.connect ('mongodb: // localhost: 27017 / animals', function (err, db) {
  если (ошибка) бросить ошибку

  дб.collection ('млекопитающие'). find (). toArray (function (err, result) {
    если (ошибка) бросить ошибку

    console.log (результат)
  })
})
  

Пример (v3. *)

  var MongoClient = require ('mongodb'). MongoClient

MongoClient.connect ('mongodb: // localhost: 27017 / animals', function (err, client) {
  если (ошибка) бросить ошибку

  var db = client.db ('животные')

  db.collection ('млекопитающие'). find (). toArray (function (err, result) {
    если (ошибка) бросить ошибку

    console.log (результат)
  })
})
  

Если вам нужен драйвер объектной модели для MongoDB, посмотрите Mongoose.

Neo4j

Модуль : neo4j-драйвер

Установка

  $ npm установить neo4j-драйвер
  

Пример

  var neo4j = require ('neo4j-driver')
var driver = neo4j.driver ('neo4j: // localhost: 7687', neo4j.auth.basic ('neo4j', 'letmein'))

var session = driver.session ()

session.readTransaction (function (tx) {
  return tx.run ('MATCH (n) RETURN count (n) AS count')
    .then (function (res) {
      console.log (res.records [0].получить ('считать'))
    })
    .catch (функция (ошибка) {
      console.log (ошибка)
    })
})
  

Оракул

Модуль : oracledb

Установка

ПРИМЕЧАНИЕ. См. Предварительные условия для установки.

  $ npm установить oracledb
  

Пример

  const oracledb = require ('oracledb')
const config = {
  пользователь: '<ваш пользователь БД>',
  пароль: '<ваш пароль БД>',
  connectString: 'локальный: 1521 / orcl'
}

асинхронная функция getEmployee (empId) {
  позвольте соединиться

  пытаться {
    conn = ждать oracledb.getConnection (конфигурация)

    const результат = ожидание conn.execute (
      'выберите * из сотрудников, где employee_id =: id',
      [empId]
    )

    console.log (result.rows [0])
  } catch (err) {
    console.log ('Ой!', ошибся)
  } наконец-то {
    if (conn) {// назначение conn сработало, нужно закрыть
      ожидание conn.close ()
    }
  }
}

getEmployee (101)
  

PostgreSQL

Модуль : pg-обещание

Установка

  $ npm установить pg-обещание
  

Пример

  var pgp = require ('pg-prom') (/ * параметры * /)
var db = pgp ('postgres: // имя пользователя: пароль @ хост: порт / база данных')

дб.one ('ВЫБРАТЬ $ 1 КАК значение', 123)
  .then (функция (данные) {
    console.log ('ДАННЫЕ:', data.value)
  })
  .catch (функция (ошибка) {
    console.log ('ОШИБКА:', ошибка)
  })
  

Redis

Модуль : redis

Установка

  $ npm установить Redis
  

Пример

  var redis = require ('redis')
var client = redis.createClient ()

client.on ('ошибка', function (err) {
  console.log ('Ошибка' + ошибка)
})

client.set ('строковый ключ', 'строка val', redis.Распечатать)
client.hset ('хеш-ключ', 'хеш-тест 1', 'какое-то значение', redis.print)
client.hset (['хеш-ключ', 'хеш-тест 2', 'другое значение'], redis.print)

client.hkeys ('hash key', function (err, answers) {
  console.log (answers.length + 'ответы:')

  ответы.forEach (функция (ответ, я) {
    console.log ('' + i + ':' + ответить)
  })

  client.quit ()
})
  

SQL Server

Модуль : утомительно

Установка

  $ npm установка утомительна
  

Пример

  var Connection = require («утомительно»).Связь
var Request = require ('tedious'). Request

var config = {
  сервер: 'localhost',
  аутентификация: {
    тип: 'по умолчанию',
    параметры: {
      userName: 'your_username', // обновить меня
      пароль: 'your_password' // обновить меня
    }
  }
}

var connection = новое соединение (конфигурация)

connection.on ('подключиться', function (err) {
  if (err) {
    console.log (ошибка)
  } еще {
    executeStatement ()
  }
})

function executeStatement () {
  request = new Request ("select 123, 'hello world'", function (err, rowCount) {
    if (err) {
      приставка.журнал (ошибка)
    } еще {
      console.log (rowCount + 'строки')
    }
    connection.close ()
  })

  request.on ('строка', функция (столбцы) {
    columns.forEach (function (column) {
      if (column.value === null) {
        console.log ('NULL')
      } еще {
        console.log (значение столбца)
      }
    })
  })

  connection.execSql (запрос)
}
  

SQLite

Модуль : sqlite3

Установка

  $ npm установить sqlite3
  

Пример

  var sqlite3 = require ('sqlite3').подробный()
var db = новый sqlite3.Database (': память:')

db.serialize (function () {
  db.run ('СОЗДАТЬ ТАБЛИЦУ lorem (текст информации)')
  var stmt = db.prepare ('ВСТАВИТЬ ЗНАЧЕНИЯ (?)')

  for (var i = 0; i <10; i ++) {
    stmt.run ('Ipsum' + i)
  }

  stmt.finalize ()

  db.each ('ВЫБРАТЬ идентификатор строки как идентификатор, информация ОТ lorem', function (err, row) {
    console.log (row.id + ':' + row.info)
  })
})

db.close ()
  

Elasticsearch

Модуль : elasticsearch

Установка

  $ npm установить elasticsearch
  

Пример

  var elasticsearch = require ('elasticsearch')
var client = elasticsearch.Клиент ({
  хост: 'локальный: 9200'
})

client.search ({
  index: 'книги',
  тип: 'книга',
  тело: {
    запрос: {
      multi_match: {
        запрос: 'express js',
        поля: ['название', 'описание']
      }
    }
  }
}). then (function (response) {
  var hits = response.hits.hits
}, функция (ошибка) {
  console.trace (сообщение об ошибке)
})
  

Как поддерживать полный Unicode в базах данных MySQL · Mathias Bynens

Альтернативное название: Что мы делаем для правильного хранения U + 1F4A9 PILE OF POO ( 💩 ) .

Используете ли вы кодировку MySQL utf8 в своих базах данных? В этой статье я объясню, почему вам следует перейти на utf8mb4 и как это сделать.

UTF-8

Кодировка UTF-8 может представлять каждый символ в наборе символов Unicode, который находится в диапазоне от U + 000000 до U + 10FFFF. Это 1114 112 возможных символов. (Еще не всем этим кодовым точкам Unicode были присвоены символы, но это не мешает UTF-8 кодировать их.)

UTF-8 - кодировка переменной ширины; он кодирует каждый символ, используя от одного до четырех 8-битных байтов. Символы с меньшими числовыми значениями кодовой точки кодируются с использованием меньшего количества байтов. Таким образом, UTF-8 оптимизирован для общего случая, когда используются символы ASCII и другие символы BMP (чьи кодовые точки находятся в диапазоне от U + 000000 до U + 00FFFF), при этом разрешая астральные символы (чьи кодовые точки находятся в диапазоне от U + 010000 до U + 10FFFF) для сохранения.

MySQL

utf8

В течение долгого времени я использовал кодировку MySQL utf8 для баз данных, таблиц и столбцов, предполагая, что она сопоставлена ​​с кодировкой UTF-8, описанной выше.Используя utf8 , я смогу сохранить в своей базе данных любой символ, который захочу - по крайней мере, я так думал.

Когда я писал о внутренней кодировке символов JavaScript, я заметил, что не было возможности вставить символ U + 1D306 TETRAGRAM FOR CENTER ( 𝌆 ) в базу данных MySQL за этим сайтом. Столбец, который я пытался обновить, имел сопоставление utf8_unicode_ci , а кодировка соединения была установлена ​​на utf8 .

  mysql> УСТАНОВИТЬ ИМЕНА utf8; # просто чтобы подчеркнуть, что кодировка соединения установлена ​​на `utf8` 
Query OK, затронуты 0 строк (0.00 сек)

mysql> ОБНОВИТЬ имя_базы_данных.имя_таблицы УСТАНОВИТЬ имя_столбца = 'foo𝌆bar' ГДЕ id = 9001;
Запрос выполнен, 1 строка затронута, 1 предупреждение (0,00 сек)
Сопоставлено строк: 1 Изменено: 1 Предупреждения: 1

mysql> SELECT column_name FROM database_name.table_name WHERE id = 9001;
+ ------------- +
| имя_столбца |
+ ------------- +
| foo |
+ ------------- +
1 строка в наборе (0,00 сек)

Контент был усечен по первому астральному символу Юникода, в данном случае 𝌆 - поэтому при попытке вставить foo𝌆bar вместо этого вставляется foo , что приводит к потере данных (и, возможно, к проблемам безопасности; см. Ниже) .MySQL тоже вернул предупреждающее сообщение:

  mysql> ПОКАЗАТЬ ПРЕДУПРЕЖДЕНИЯ; 
+ --------- + ------ + ------------------------------- ----------------------------------------------- +
| Уровень | Код | Сообщение |
+ --------- + ------ + ------------------------------- ----------------------------------------------- +
| Предупреждение | 1366 | Неверное строковое значение: '\ xF0 \ x9D \ x8C \ x86' для столбца 'column_name' в строке 1 |
+ --------- + ------ + ------------------------------- ----------------------------------------------- +
1 строка в наборе (0.00 сек)

Оказывается, кодировка MySQL utf8 лишь частично реализует правильную кодировку UTF-8. Он может хранить только символы в кодировке UTF-8, которые состоят из одного-трех байтов; закодированные символы, занимающие четыре байта, не поддерживаются.

Поскольку астральные символы (чьи кодовые точки находятся в диапазоне от U + 010000 до U + 10FFFF) состоят из четырех байтов в UTF-8, вы не можете сохранить их с помощью реализации MySQL utf8 .

Это касается не только символа , но и более важных символов, таких как U + 01F4A9 PILE OF POO ( 💩 ).В общей сложности это 1 048 575 возможных кодовых точек, которые вы не можете использовать. Фактически, MySQL utf8 позволяет хранить только 5,88% ( (0x00FFFF + 1) / (0x10FFFF + 1) ) всех возможных кодовых точек Unicode. Правильный UTF-8 может кодировать 100% всех кодовых точек Unicode.

Как показано выше, такое поведение может привести к потере данных, но становится еще хуже - это может привести к уязвимостям безопасности . Вот несколько примеров, все из которых были обнаружены после публикации этой статьи:

TL; кодировка DR MySQL utf8 названа неудобно, поскольку она отличается от правильной кодировки UTF-8.Он не предлагает полную поддержку Unicode, что может привести к потере данных или уязвимостям безопасности.

MySQL

utf8mb4

К счастью, MySQL 5.5.3 (выпущенный в начале 2010 года) представил новую кодировку под названием utf8mb4 , которая соответствует правильному UTF-8 и, таким образом, полностью поддерживает Unicode, включая астральные символы.

Переход с MySQL

utf8 на utf8mb4

Шаг 1. Создайте резервную копию

Создайте резервную копию всех баз данных на сервере, который вы хотите обновить.Безопасность прежде всего!

Шаг 2. Обновите сервер MySQL

Обновите сервер MySQL до версии v5.5.3 + или попросите администратора сервера сделать это за вас.

Шаг 3. Измените базы данных, таблицы и столбцы

Измените набор символов и свойства сопоставления баз данных, таблиц и столбцов, чтобы использовать utf8mb4 вместо utf8 .

  # Для каждой базы данных: 
ALTER DATABASE имя_базы_данных CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
# Для каждой таблицы:
ALTER TABLE имя_таблицы CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
# Для каждого столбца:
ALTER TABLE имя_таблицы CHANGE имя_столбца имя_столбца VARCHAR (191) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
# (Не копируйте это вслепую! Точное выражение зависит от типа столбца, максимальной длины и других свойств.Вышеупомянутая строка является просто примером столбца VARCHAR.)

Поскольку utf8mb4 полностью обратно совместим с utf8 , никаких моджибаке или других форм потери данных происходить не должно. (Но у вас есть резервная копия, верно?)

Шаг 4. Проверьте максимальную длину столбцов и ключей индекса

Это, наверное, самая утомительная часть всего процесса обновления.

При преобразовании из utf8 в utf8mb4 максимальная длина столбца или ключа индекса не изменяется и составляет байт .Следовательно, он меньше с точки зрения символов, потому что максимальная длина символа теперь составляет четыре байта вместо трех.

Например, столбец TINYTEXT может содержать до 255 байтов, что соответствует 85 трехбайтовым или 63 четырехбайтовым символам. Допустим, у вас есть столбец TINYTEXT , в котором используется utf8 , но он должен содержать более 63 символов. Учитывая это требование, вы не можете преобразовать этот столбец в utf8mb4 , если вы также не измените тип данных на более длинный тип, например TEXT - потому что, если вы попытаетесь заполнить его четырехбайтовыми символами, вы бы можно ввести только 63 символа, но не более.

То же самое и с индексными ключами. Механизм хранения InnoDB имеет максимальную длину индекса 767 байт, поэтому для столбцов utf8 или utf8mb4 вы можете проиндексировать максимум 255 или 191 символ соответственно. Если в настоящее время у вас есть столбцы utf8 с индексами длиннее 191 символа, вам нужно будет проиндексировать меньшее количество символов при использовании utf8mb4 . (Из-за этого мне пришлось изменить некоторые проиндексированные столбцы VARCHAR (255) на VARCHAR (191) .)

Раздел 10.1.11 Справочного руководства MySQL 5.5 содержит дополнительную информацию по этому поводу.

Шаг 5. Измените наборы символов соединения, клиента и сервера

В коде приложения установите для символа подключения значение utf8mb4 . Это можно сделать, просто заменив любые варианты SET NAMES utf8 на SET NAMES utf8mb4 . Если ваш старый оператор SET NAMES указывал сопоставление, не забудьте также изменить его, e.грамм. НАБОР ИМЕН utf8 COLLATE utf8_unicode_ci становится SET NAMES utf8mb4 COLLATE utf8mb4_unicode_ci .

Не забудьте также установить набор символов клиента и сервера. В моем файле конфигурации MySQL ( /etc/my.cnf ) есть следующее:

  [клиент] 
набор-символов по умолчанию = utf8mb4

[mysql]
набор-символов по умолчанию = utf8mb4

[mysqld]
набор символов-клиент-рукопожатие = ЛОЖЬ
набор символов-сервер = utf8mb4
сопоставление -server = utf8mb4_unicode_ci

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

  mysql> ПОКАЗАТЬ ПЕРЕМЕННЫЕ, ГДЕ Имя_переменной LIKE 'character \ _set \ _%' OR Имя_переменной LIKE 'collation%'; 
+ -------------------------- + -------------------- +
| Имя_переменной | Значение |
+ -------------------------- + -------------------- +
| character_set_client | utf8mb4 |
| character_set_connection | utf8mb4 |
| character_set_database | utf8mb4 |
| character_set_filesystem | двоичный |
| character_set_results | utf8mb4 |
| character_set_server | utf8mb4 |
| character_set_system | utf8 |
| collation_connection | utf8mb4_unicode_ci |
| collation_database | utf8mb4_unicode_ci |
| collation_server | utf8mb4_unicode_ci |
+ -------------------------- + -------------------- +
10 рядов в наборе (0.00 сек)

Как видите, все соответствующие параметры установлены на utf8mb4 , за исключением character_set_filesystem , который должен быть двоичным , если вы не используете файловую систему, которая поддерживает многобайтовые символы в кодировке UTF-8 в именах файлов. и character_set_system , который всегда равен utf8 и не может быть переопределен.

Примечание: Набор символов по умолчанию и сопоставление также можно настроить на некоторых других уровнях.

Шаг 6: Восстановить и оптимизировать все таблицы

После обновления сервера MySQL и внесения необходимых изменений, описанных выше, не забудьте восстановить и оптимизировать все базы данных и таблицы. Я не сделал это сразу после обновления (я не думал, что это было необходимо, так как на первый взгляд все работало нормально), и столкнулся с некоторыми странными ошибками, когда операторы UPDATE не имели никакого эффекта, даже хотя ошибок не было.

Вы можете запустить следующие MySQL-запросы для каждой таблицы, которую хотите восстановить и оптимизировать:

  # Для каждой таблицы 
REPAIR TABLE имя_таблицы;
ОПТИМИЗАЦИЯ ТАБЛИЦЫ имя_таблицы;

К счастью, это можно легко сделать за один раз с помощью командной строки mysqlcheck utility:

  $ mysqlcheck -u root -p --auto-repair --optimize --all-databases  

Будет запрошен пароль пользователя root, после чего все таблицы во всех базах данных будут исправлены и оптимизированы.

Сводка

Никогда не используйте utf8 в MySQL - всегда используйте вместо него utf8mb4 . Обновление ваших баз данных и кода может занять некоторое время, но оно определенно того стоит. Зачем вам произвольно ограничивать набор символов, которые можно использовать в вашей базе данных? Почему вы теряете данные каждый раз, когда пользователь вводит астральный символ как часть комментария, сообщения или чего-то еще, что вы храните в своей базе данных? Нет причин не стремиться к полной поддержке Unicode повсюду.Сделайте правильно и используйте utf8mb4 . 🍻

Обзор - Руководства по Ruby on Rails

1 Базовое кэширование

Это введение в три типа методов кэширования: страница, действие и
кеширование фрагментов. По умолчанию Rails обеспечивает кеширование фрагментов. Чтобы использовать
кэширование страниц и действий, вам нужно будет добавить actionpack-page_caching и
actionpack-action_caching в ваш Gemfile .

По умолчанию кэширование включено только в производственной среде.Ты можешь играть
вокруг с кешированием локально, запустив rails dev: cache или установив
config.action_controller.perform_caching с по true в config / environment / development.rb .

Изменение значения config.action_controller.perform_caching приведет к
влияют только на кэширование, обеспечиваемое Action Controller.
Например, это не повлияет на низкоуровневое кеширование, которое мы решаем.
ниже.

1.1 Кэширование страницы

Кэширование страницы - это механизм Rails, который позволяет запрашивать сгенерированную страницу
будет выполняться веб-сервером (т.е. Apache или NGINX) без необходимости идти
через весь стек Rails. Хотя это очень быстро, его нельзя применить к
в любой ситуации (например, на страницах, требующих аутентификации). Кроме того, поскольку
веб-сервер обслуживает файл непосредственно из файловой системы, которая вам понадобится
реализовать истечение срока действия кеша.

1.2 Кэширование действий

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

1.3 Кэширование фрагментов

Динамические веб-приложения обычно создают страницы с различными компонентами,
все они имеют одинаковые характеристики кэширования. Когда разные части
страницу необходимо кэшировать, и срок ее действия истек отдельно, вы можете использовать кеширование фрагментов.

Кэширование фрагментов позволяет заключить фрагмент логики представления в блок кеша и обслуживать его из хранилища кеша при поступлении следующего запроса.

Например, если вы хотите кэшировать каждый продукт на странице, вы можете использовать это
код:

  <% @ products.each do | product | %>
  <% кеш-продукта do%>
    <% = визуализация продукта%>
  <% конец%>
<% конец%>
  

<% @ products.each do | product | %>
<% кеш-продукта do%>
<% = визуализировать продукт%>
<% конец%>
<% конец%>
Копировать

Когда ваше приложение получит свой первый запрос на эту страницу, Rails напишет
новая запись в кэше с уникальным ключом.Ключ выглядит примерно так:

  просмотров / продукты / индекс: bea67108094918eeba42cd4a6e786901 / продукты / 1
  

просмотры / продукты / индекс: bea67108094918eeba42cd4a6e786901 / products / 1
Копировать

Посередине строки символов является дайджест дерева шаблона. Это хеш
дайджест, вычисленный на основе содержимого кэшируемого фрагмента представления. Если
вы измените фрагмент представления (например, изменится HTML), дайджест изменится,
истечение срока существования существующего файла.

Версия кэша, полученная из записи продукта, хранится в записи кэша.При прикосновении к продукту версия кеша меняется, и все кешированные фрагменты
содержащие предыдущую версию игнорируются.

Хранилища кэша, такие как Memcached, автоматически удаляют старые файлы кеша.

Если вы хотите кэшировать фрагмент при определенных условиях, вы можете использовать
cache_if или cache_unless :

  <% cache_if admin ?, product do%>
  <% = визуализировать продукт%>
<% конец%>
  

<% cache_if admin ?, продукт do%>
<% = визуализировать продукт%>
<% конец%>
Копировать

1.3.1 Кэширование коллекции

Помощник render также может кэшировать отдельные шаблоны, визуализированные для коллекции.
Он может даже на один выше предыдущего примера с на каждый , прочитав весь кеш
шаблоны сразу, а не по одному. Это делается путем передачи cached: true при рендеринге коллекции:

  <% = render partial: 'products / product', collection: @products, cached: true%>
  

<% = render partial: 'products / product', collection: @products, cached: true%>
Копировать

Все кэшированные шаблоны из предыдущих рендеров будут извлечены сразу с большим
большая скорость.Кроме того, шаблоны, которые еще не были кэшированы, будут
записывается в кеш и извлекается при следующем рендеринге.

1.4 Кэширование Russian Doll

Возможно, вы захотите вложить кэшированные фрагменты в другие кэшированные фрагменты. Это
называется русская кукла кешированием.

Преимущество кеширования матрешек в том, что при обновлении одного продукта
все остальные внутренние фрагменты можно повторно использовать при регенерации внешнего
фрагмент.

Как объяснялось в предыдущем разделе, срок действия кэшированного файла истечет, если значение
updated_at изменяет запись, от которой напрямую зависит кэшируемый файл.Однако это не приведет к истечению срока действия кеша, в который вложен фрагмент.

Например, возьмите следующий вид:

  <% кеш продукта do%>
  <% = render product.games%>
<% конец%>
  

<% кеш-продукта do%>
<% = render product.games%>
<% конец%>
Копировать

Что, в свою очередь, отображает это представление:

  <% кеш игры do%>
  <% = отрисовка игры%>
<% конец%>
  

<% cache game do%>
<% = отрисовка игры%>
<% конец%>
Копировать

Если какой-либо атрибут игры изменен, значение updated_at будет установлено на
текущее время, тем самым истекая срок действия кеша.Однако, поскольку updated_at
не будет изменен для объекта продукта, срок действия этого кеша не истечет и
ваше приложение будет обслуживать устаревшие данные. Чтобы это исправить, связываем модели вместе
метод touch :

  класс Продукт  

class Product При touch установлено значение true , любое действие, которое изменяет updated_at для игры
запись также изменит его для связанного продукта, тем самым истекая
кеш.

1.5 Совместное частичное кэширование

Возможно совместное использование частичных файлов и связанного кеширования между файлами с разными типами MIME. Например, совместное частичное кэширование позволяет разработчикам шаблонов совместно использовать часть файлов HTML и JavaScript. Когда шаблоны собираются в путях к файлам преобразователя шаблонов, они включают только расширение языка шаблона, а не тип mime. Из-за этого шаблоны можно использовать для нескольких типов mime. Запросы HTML и JavaScript будут отвечать на следующий код:

  рендеринг (частично: 'гостиницы / отель', коллекция: @hotels, кешируется: true)
  

рендеринг (частично: 'отели / отель', коллекция: @hotels, кешируется: true)
Копировать

Загрузит файл с именем отелей / отелей.erb .

Другой вариант - включить полное имя файла для рендеринга.

  рендеринг (частично: 'hotels / hotel.html.erb', коллекция: @hotels, кешируется: true)
  

рендеринг (частичный: 'hotels / hotel.html.erb', коллекция: @hotels, кешируется: true)
Копировать

Загрузит файл с именем hotels / hotel.html.erb в любой MIME-тип файла, например, вы можете включить этот фрагмент в файл JavaScript.

1.6 Управление зависимостями

Чтобы правильно сделать кеш недействительным, необходимо правильно определить
кеширование зависимостей.Rails достаточно умен, чтобы обрабатывать общие случаи, поэтому вы не
нужно что-либо указать. Однако иногда, когда вы имеете дело с нестандартными
Например, помощники, вам нужно явно определить их.

1.6.1 Неявные зависимости

Большинство зависимостей шаблона могут быть получены из вызовов render в шаблоне
сам. Вот несколько примеров вызовов рендеринга, которые знает ActionView :: Digestor .
как декодировать:

  частичный рендеринг: «комментарии / комментарий», коллекция: комментируемый.Комментарии
отображать "комментарии / комментарии"
отображать 'комментарии / комментарии'
render ('комментарии / комментарии')

render "заголовок" переводится как render ("комментарии / заголовок")

render (@topic) переводится как render ("темы / тема")
render (themes) переводится как render ("темы / тема")
render (message.topics) переводится как render ("темы / тема")
  

рендерить частичный: "комментарии / комментарий", коллекция: commentable.comments
отображать "комментарии / комментарии"
отображать 'комментарии / комментарии'
render ('комментарии / комментарии')

render "заголовок" переводится как render ("комментарии / заголовок")

render (@topic) переводится как render ("темы / тема")
render (themes) переводится как render ("темы / тема")
render (message.themes) переводится как render ("темы / тема")
Копировать

С другой стороны, для правильной работы кэширования необходимо изменить некоторые вызовы.
Например, если вы передаете настраиваемую коллекцию, вам необходимо изменить:

  render @ project.documents.where (опубликовано: true)
  

render @ project.documents.where (опубликовано: true)
Копировать

С

по:

  частичный рендеринг: «документы / документ», коллекция: @ project.documents.where (опубликовано: true)
  

рендерить частичную: «документы / документ», коллекция: @project.documents.where (опубликовано: правда)
Копировать

1.6.2 Явные зависимости

Иногда у вас могут быть зависимости от шаблонов, которые вообще невозможно получить. Этот
обычно бывает, когда рендеринг происходит в помощниках. Вот пример:

  <% = render_sortable_todolists @ project.todolists%>
  

<% = render_sortable_todolists @ project.todolists%>
Копировать

Вам нужно будет использовать специальный формат комментария, чтобы позвонить им:

  <% # Зависимость шаблона: todolists / todolist%>
<% = render_sortable_todolists @project.тодолисты%>
  

<% # Зависимость шаблона: todolists / todolist%>
<% = render_sortable_todolists @ project.todolists%>
Копировать

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

  <% # Зависимость шаблона: events / *%>
<% = render_categorizable_events @ person.events%>
  

<% # Зависимость шаблона: события / *%>
<% = render_categorizable_events @person.события%>
Копировать

Что касается кеширования коллекции, если частичный шаблон не начинается с чистого
cache, вы все равно можете воспользоваться кешированием коллекции, добавив специальный
формат комментария в любом месте шаблона, например:

  <% # Коллекция шаблонов: уведомление%>
<% my_helper_that_calls_cache (some_arg, уведомление) do%>
  <% = notification.name%>
<% конец%>
  

<% # Коллекция шаблонов: уведомление%>
<% my_helper_that_calls_cache (some_arg, уведомление) do%>
<% = уведомление.имя%>
<% конец%>
Копировать

1.6.3 Внешние зависимости

Если вы используете вспомогательный метод, например, внутри кешированного блока, а затем обновляете
этот помощник, вам также придется подтолкнуть кеш. Неважно, как
вы делаете это, но MD5 файла шаблона должен измениться. Одна рекомендация -
просто укажите явно в комментарии, например:

  <% # Helper Dependency Обновлено: 28 июля 2015 г. в 19:00%>
<% = some_helper_method (человек)%>
  

<% # Зависимость помощника обновлена: 28 июля 2015 г. в 19:00%>
<% = some_helper_method (человек)%>
Копировать

1.7 Низкоуровневое кэширование

Иногда вам нужно кэшировать определенное значение или результат запроса вместо кэширования фрагментов представления. Механизм кэширования Rails отлично подходит для хранения любой информации типа .

Наиболее эффективным способом реализации низкоуровневого кэширования является использование метода Rails.cache.fetch . Этот метод выполняет как чтение, так и запись в кеш. Когда передается только один аргумент, выбирается ключ и возвращается значение из кеша. Если блок передан, этот блок будет выполнен в случае промаха кеша.Возвращаемое значение блока будет записано в кеш под заданным ключом кеша, и это возвращаемое значение будет возвращено. В случае попадания в кэш кешированное значение будет возвращено без выполнения блока.

Рассмотрим следующий пример. Приложение имеет модель Product с методом экземпляра, который ищет цену продукта на конкурирующем веб-сайте. Данные, возвращаемые этим методом, идеально подходят для низкоуровневого кеширования:

  класс Продукт  

class Product Обратите внимание, что в этом примере мы использовали метод cache_key_with_version , поэтому результирующий ключ кеша будет примерно таким: products / 233-20140225082222765838000 / Competing_price . cache_key_with_version генерирует строку на основе имени класса модели, id и updated_at атрибутов. Это обычное соглашение, и его преимущество заключается в том, что кеш становится недействительным при каждом обновлении продукта. В общем, когда вы используете низкоуровневое кэширование для информации уровня экземпляра, вам необходимо сгенерировать ключ кеширования.

1.8 Кэширование SQL

Кэширование запросов - это функция Rails, которая кэширует набор результатов, возвращаемый каждым
запрос. Если Rails снова встречает тот же запрос для этого запроса, он будет использовать
кэшированный набор результатов, а не выполнение запроса к базе данных
очередной раз.

Например:

  класс ProductsController  

класс ProductsController Во второй раз, когда тот же запрос выполняется к базе данных, он фактически не попадет в базу данных.В первый раз, когда результат возвращается из запроса, он сохраняется в кеше запроса (в памяти), а во второй раз он извлекается из памяти.

Однако важно отметить, что кеши запросов создаются в начале
действие и уничтожается в конце этого действия и, таким образом, сохраняется только для
продолжительность действия. Если вы хотите сохранить результаты запроса в более
постоянный способ, вы можете с низкоуровневым кешированием.

2 кеш-хранилища

Rails предоставляет разные хранилища для кэшированных данных (кроме SQL и страницы
кеширование).

2.1 Конфигурация

Вы можете настроить хранилище кэша по умолчанию для своего приложения, установив
config.cache_store параметр конфигурации. Остальные параметры можно передать как
аргументы конструктору хранилища кеша:

  config.cache_store =: memory_store, {size: 64.megabytes}
  

config.cache_store =: memory_store, {размер: 64. мегабайт}
Копировать

В качестве альтернативы можно вызвать ActionController :: Base.cache_store вне блока конфигурации.

Вы можете получить доступ к кешу, вызвав Rails.cache .

2.2 ActiveSupport :: Cache :: Store

Этот класс обеспечивает основу для взаимодействия с кешем в Rails. Это абстрактный класс, и вы не можете использовать его самостоятельно. Скорее вы должны использовать конкретную реализацию класса, привязанного к механизму хранения. Rails поставляется с несколькими реализациями, описанными ниже.

Основные методы вызова: чтение , запись , удаление , существуют? и - .Метод выборки принимает блок и либо возвращает существующее значение из кеша, либо оценивает блок и записывает результат в кеш, если значение не существует.

Есть некоторые общие параметры, которые могут использоваться всеми реализациями кеширования. Их можно передать конструктору или различным методам взаимодействия с записями.

  • : пространство имен - этот параметр можно использовать для создания пространства имен в хранилище кэша. Это особенно полезно, если ваше приложение использует общий кеш с другими приложениями.

  • : сжатие - Включено по умолчанию. Сжимает записи кеша, чтобы в одном объеме памяти можно было хранить больше данных, что приводит к меньшему количеству вытеснений кеша и более высокому проценту попаданий.

  • : compress_threshold - По умолчанию 1 КБ. Записи кэша, превышающие этот порог, указанный в байтах, сжимаются.

  • : expires_in - Эта опция устанавливает время истечения срока в секундах для записи кэша, если хранилище кеша поддерживает это, когда она будет автоматически удалена из кеша.

  • : race_condition_ttl - эта опция используется вместе с опцией : expires_in . Это предотвратит состояние гонки, когда истекает срок действия записей кэша, не позволяя нескольким процессам одновременно регенерировать одну и ту же запись (также известный как эффект собачьей кучи). Эта опция устанавливает количество секунд, в течение которых просроченная запись может быть повторно использована при регенерации нового значения. Рекомендуется устанавливать это значение, если вы используете опцию : expires_in .

2.2.1 Параметры пула подключений

По умолчанию MemCacheStore и RedisCacheStore используют одно соединение
за процесс. Это означает, что если вы используете Puma или другой поточный сервер,
у вас может быть несколько потоков, ожидающих, пока соединение станет доступным.
Чтобы увеличить количество доступных подключений, вы можете включить подключение
объединение.

Сначала добавьте гем connection_pool в свой Gemfile:

  драгоценный камень 'connection_pool'
  

драгоценный камень 'connection_pool'
Копировать

Затем передайте параметры : pool_size и / или : pool_timeout при настройке хранилища кешей:

  конфиг.cache_store =: mem_cache_store, "cache.example.com", {pool_size: 5, pool_timeout: 5}
  

config.cache_store =: mem_cache_store, "cache.example.com", {pool_size: 5, pool_timeout: 5}
Копировать

  • : pool_size - этот параметр устанавливает количество подключений для каждого процесса (по умолчанию 5).

  • : pool_timeout - этот параметр устанавливает количество секунд ожидания соединения (по умолчанию 5). Если в течение тайм-аута соединение недоступно, будет выдано Timeout :: Error .

2.2.2 Пользовательские хранилища кешей

Вы можете создать свое собственное хранилище кеш-памяти, просто расширив
ActiveSupport :: Cache :: Store и реализуя соответствующие методы. Сюда,
вы можете заменить любое количество технологий кэширования в свое приложение Rails.

Чтобы использовать настраиваемое хранилище кешей, просто установите в качестве хранилища кеша новый экземпляр вашего
нестандартный класс.

  config.cache_store = MyCacheStore.new
  

config.cache_store = MyCacheStore.новый
Копировать

2.3 ActiveSupport :: Cache :: MemoryStore

Это хранилище кэша хранит записи в памяти в том же процессе Ruby. Кеш
store имеет ограниченный размер, указанный путем отправки параметра : size в
инициализатор (по умолчанию 32Мб). Когда кеш превышает выделенный размер,
произойдет очистка, и наименее использованные записи будут удалены.

  config.cache_store =: memory_store, {size: 64.megabytes}
  

config.cache_store =: memory_store, {размер: 64.мегабайты}
Копировать

Если вы запускаете несколько серверных процессов Ruby on Rails (в этом случае
если вы используете кластерный режим Phusion Passenger или puma), то ваш сервер Rails
экземпляры процесса не смогут обмениваться данными кеша друг с другом. Этот кеш
store не подходит для развертывания больших приложений. Однако это может
хорошо работает для небольших сайтов с низким трафиком и всего с парой серверных процессов,
а также среды разработки и тестирования.

Новые проекты Rails по умолчанию настроены на использование этой реализации в среде разработки.

Поскольку процессы не будут совместно использовать данные кэша при использовании : memory_store ,
невозможно будет вручную прочитать, записать или истечь кэш через консоль Rails.

2.4 ActiveSupport :: Cache :: FileStore

Это хранилище кэша использует файловую систему для хранения записей. Путь к каталогу, в котором будут храниться файлы хранилища, необходимо указать при инициализации кеша.

  config.cache_store =: file_store, "/ путь / к / cache / каталогу"
  

config.cache_store =: file_store, "/ путь / к / кешу / каталогу"
Копировать

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

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

Это реализация кеш-хранилища по умолчанию ( "# {root} / tmp / cache /" ), если
нет явной конфигурации .cache_store поставляется.

2.5 ActiveSupport :: Cache :: MemCacheStore

Это хранилище кэша использует сервер Danga memcached для обеспечения централизованного кеширования для вашего приложения. Rails по умолчанию использует встроенный гем dalli . В настоящее время это самое популярное хранилище кешей для производственных веб-сайтов. Его можно использовать для создания единого кластера общего кэша с очень высокой производительностью и избыточностью.

При инициализации кеша вы должны указать адреса для всех серверов memcached в вашем кластере или убедиться, что переменная среды MEMCACHE_SERVERS установлена ​​правильно.

  config.cache_store =: mem_cache_store, "cache-1.example.com", "cache-2.example.com"
  

config.cache_store =: mem_cache_store, "cache-1.example.com", "cache-2.example.com"
Копировать

Если ни один из них не указан, предполагается, что memcached работает на локальном хосте с портом по умолчанию ( 127.0.0.1:11211 ), но это не идеальная установка для больших сайтов.

  config.cache_store =: mem_cache_store # Вернется к $ MEMCACHE_SERVERS, затем к 127.0.0.1: 11211
  

config.cache_store =: mem_cache_store # Вернется к $ MEMCACHE_SERVERS, затем 127.0.0.1:11211
Копировать

См. Документацию по Dalli :: Client для получения информации о поддерживаемых типах адресов.

Методы write и fetch в этом кэше принимают две дополнительные опции, которые используют особенности, специфичные для memcached. Вы можете указать : raw для отправки значения непосредственно на сервер без сериализации. Значение должно быть строкой или числом.Вы можете использовать прямые операции memcached, такие как приращение и декремент только для необработанных значений. Вы также можете указать : if_exist , если вы не хотите, чтобы memcached перезаписывал существующую запись.

2.6 ActiveSupport :: Cache :: RedisCacheStore

Кэш-хранилище Redis использует преимущества поддержки Redis для автоматического удаления
когда он достигает максимального объема памяти, что позволяет ему вести себя так же, как кеш-сервер Memcached.

Примечание по развертыванию: Redis не истекает срок действия ключей по умолчанию, поэтому постарайтесь использовать
выделенный сервер кеширования Redis.Не заполняйте свой постоянный сервер Redis
изменчивые данные кеша! Прочтите
Подробное руководство по настройке сервера кеширования Redis.

Для сервера Redis только с кешем установите для maxmemory-policy один из вариантов allkeys.
Redis 4+ поддерживает редко используемое выселение ( allkeys-lfu ), отличный
выбор по умолчанию. Redis 3 и более ранние версии должны использовать вытеснение, которое использовалось не так давно ( allkeys-lru ).

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

По умолчанию хранилище кеша не будет пытаться повторно подключиться к Redis, если
не удается установить соединение во время запроса. Если вы испытываете частые отключения, вы
может пожелать разрешить попытки повторного подключения.

Чтение и запись кэша никогда не вызывают исключений; вместо этого они просто возвращают ноль ,
ведет себя так, как будто в кеше ничего нет. Чтобы оценить, есть ли у вашего кеша
попадания в исключения, вы можете предоставить error_handler для сообщения
служба сбора исключений.Он должен принимать три аргумента ключевого слова: метод ,
метод хранилища кэша, который был первоначально вызван; возвращает , значение, которое
был возвращен пользователю, обычно ноль ; и исключение , исключение, которое
был спасен.

Для начала добавьте гем redis в свой Gemfile:

  драгоценный камень 'редис'
  

драгоценный камень 'Redis'
Копировать

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

  драгоценный камень 'hiredis'
  

драгоценный камень 'hiredis'
Копировать

Кеш-хранилище

Redis автоматически потребует и будет использовать hiredis, если он доступен.Больше нет
требуется конфигурация.

Наконец, добавьте конфигурацию в соответствующий файл config / environment / *. Rb :

  config.cache_store =: redis_cache_store, {url: ENV ['REDIS_URL']}
  

config.cache_store =: redis_cache_store, {url: ENV ['REDIS_URL']}
Копировать

Более сложное производственное хранилище кешей Redis может выглядеть примерно так:

  cache_servers =% w (redis: // cache-01: 6379/0 redis: // cache-02: 6379/0)
config.cache_store =: redis_cache_store, {url: cache_servers,

  connect_timeout: 30, # По умолчанию 20 секунд
  read_timeout: 0.2, # По умолчанию 1 секунда
  write_timeout: 0,2, # По умолчанию 1 секунда
  reconnect_attempts: 1, # По умолчанию 0

  error_handler: -> (метод :, возврат :, исключение :) {
    # Сообщать об ошибках в Sentry в виде предупреждений
    Raven.capture_exception исключение, уровень: 'предупреждение',
      теги: {метод: метод, возвращение: возвращение}
  }
}
  

cache_servers =% w (redis: // cache-01: 6379/0 redis: // cache-02: 6379/0)
config.cache_store =: redis_cache_store, {url: cache_servers,

connect_timeout: 30, # По умолчанию 20 секунд
read_timeout: 0.2, # По умолчанию 1 секунда
write_timeout: 0,2, # По умолчанию 1 секунда
reconnect_attempts: 1, # По умолчанию 0

error_handler: -> (метод :, возврат :, исключение 🙂 {
# Сообщать об ошибках в Sentry в виде предупреждений
Raven.capture_exception исключение, уровень: 'предупреждение',
теги: {метод: метод, возвращение: возвращение}
}
}
Копировать

2.7 ActiveSupport :: Cache :: NullStore

Эта реализация хранилища кэша предназначена для использования только в средах разработки или тестирования и никогда ничего не хранит.Это может быть очень полезно при разработке, когда у вас есть код, который напрямую взаимодействует с Rails.cache , но кэширование может помешать возможности увидеть результаты изменений кода. С этим хранилищем кэша все операции fetch и read приведут к промаху.

  config.cache_store =: null_store
  

config.cache_store =: null_store
Копировать

3 ключа кэша

Ключи, используемые в кэше, могут быть любым объектом, который отвечает либо на cache_key , либо на
к_парам .Вы можете реализовать метод cache_key в своих классах, если вам нужно
для создания пользовательских ключей. Active Record сгенерирует ключи на основе имени класса
и идентификатор записи.

В качестве ключей кеша можно использовать хэши и массивы значений.

  # Это законный ключ кеша
Rails.cache.read (сайт: "mysite", владельцы: [owner_1, owner_2])
  

# Это законный ключ кеширования
Rails.cache.read (сайт: "mysite", владельцы: [owner_1, owner_2])
Копировать

Ключи, которые вы используете на Rails.кеш не будет таким же, как те, которые фактически используются с
двигатель хранения. Они могут быть изменены с помощью пространства имен или изменены, чтобы соответствовать
технологические ограничения серверной части. Это означает, например, что вы не можете сэкономить
значения с помощью Rails.cache , а затем попробуйте вытащить их с помощью гема dalli .
Однако вам также не нужно беспокоиться о превышении лимита размера memcached или
нарушение правил синтаксиса.

4 Условная поддержка GET

Условные GET - это функция спецификации HTTP, которая позволяет веб-серверам сообщать браузерам, что ответ на запрос GET не изменился с момента последнего запроса и может быть безопасно извлечен из браузера. кеш.

Они работают с использованием заголовков HTTP_IF_NONE_MATCH и HTTP_IF_MODIFIED_SINCE для передачи туда и обратно как уникального идентификатора содержимого, так и метки времени последнего изменения содержимого. Если браузер делает запрос, в котором идентификатор содержимого (etag) или время последнего изменения с момента совмещения отметки времени совпадает с версией сервера, серверу нужно только отправить обратно пустой ответ с неизмененным статусом.

Ответственность за поиск последней измененной временной метки и заголовка if-none-match лежит на сервере (то есть на нас) и определяет, отправлять ли обратно полный ответ.С поддержкой условного получения в Rails это довольно простая задача:

  класс ProductsController  

класс ProductsController Вместо хеша опций вы также можете просто передать модель.Rails будет использовать методы updated_at и cache_key_with_version для установки last_modified и etag :

  класс ProductsController  

класс ProductsController Если у вас нет специальной обработки ответов и вы используете механизм рендеринга по умолчанию (т.е. вы не используете response_to и не вызываете рендеринг самостоятельно), тогда у вас есть простой помощник в fresh_when :

  класс ProductsController  

класс ProductsController Иногда мы хотим кэшировать ответ, например статическую страницу, которая никогда не получает
истекший.Для этого мы можем использовать помощник http_cache_forever и, выполнив
поэтому браузер и прокси будут кэшировать его на неопределенный срок.

По умолчанию кэшированные ответы будут приватными, кэшироваться только в сети пользователя.
браузер. Чтобы разрешить прокси кэшировать ответ, установите public: true , чтобы указать
что они могут предоставлять кэшированный ответ всем пользователям.

Используя этот помощник, заголовок last_modified устанавливается на Time.new (2011, 1, 1) .utc
и истекает заголовок установлен на 100 лет.

Используйте этот метод осторожно, так как браузер / прокси-сервер не сможет сделать недействительным
кешированный ответ, если кеш браузера не очищен принудительно.

  класс HomeController  

класс HomeController 4.1 Сильный против / с Слабый ETags

Rails по умолчанию генерирует слабые ETag.Слабые теги ETag допускают семантически эквивалентные
ответы на одинаковые ETag, даже если их тела не совпадают в точности.
Это полезно, когда мы не хотим, чтобы страница регенерировалась при незначительных изменениях в
тело ответа.

Слабые ETags имеют ведущее значение W / , чтобы отличать их от сильных ETags.

  W / "618bbc92e2d35ea1945008b42799b0e7" → Слабый ETag
"618bbc92e2d35ea1945008b42799b0e7" → Strong ETag
  

W / "618bbc92e2d35ea1945008b42799b0e7" → Слабый ETag
"618bbc92e2d35ea1945008b42799b0e7" → Strong ETag
Копировать

В отличие от слабого ETag, сильный ETag подразумевает, что отклик должен быть точно таким же
и побайтно идентичны.Полезно при выполнении запросов диапазона в пределах
большой видео- или PDF-файл. Некоторые CDN поддерживают только сильные ETag, например Akamai.
Если вам абсолютно необходимо сгенерировать сильный ETag, это можно сделать следующим образом.

  класс ProductsController  

класс ProductsController Вы также можете установить сильный ETag непосредственно в ответе.

  response.strong_etag = response.body # => "618bbc92e2d35ea1945008b42799b0e7"
  

response.strong_etag = response.body # => "618bbc92e2d35ea1945008b42799b0e7"
Копировать

5 Кэширование в разработке

Часто возникает необходимость протестировать стратегию кэширования вашего приложения.
в режиме разработки.Rails предоставляет команду rails dev: cache для
легко включать / выключать кеширование.

  $ bin / rails dev: кеш
Режим разработки сейчас кэшируется.
$ bin / rails dev: кеш
Режим разработки больше не кешируется.
  

bin / rails dev: кеш
bin / rails dev: кеш
Копировать

6 Ссылки

Обратная связь

Вам предлагается помочь улучшить качество этого руководства.

Пожалуйста, внесите свой вклад, если вы заметите какие-либо опечатки или фактические ошибки.Для начала вы можете прочитать наш раздел документации.

Вы также можете найти неполный контент или устаревшие вещи.
Пожалуйста, добавьте недостающую документацию для main. Обязательно проверьте
Edge Guides сначала проверят
если проблемы уже исправлены или нет в основной ветке.
Ознакомьтесь с Руководством по Ruby on Rails Guides.
для стиля и условностей.

Если по какой-либо причине вы заметили, что нужно исправить, но не можете исправить это самостоятельно, пожалуйста,
открыть вопрос.

И, наконец, что не менее важно, любое обсуждение Ruby on Rails.
документация приветствуется в списке рассылки rubyonrails-docs.

Исправление путаницы с кодировкой столбцов в MySQL

Только что возникла интересная проблема с беспорядком кодирования в столбце, содержащем текст, отличный от ASCII (русский). Решение было не сразу очевидным, поэтому я решил, что им стоит поделиться.

Столбец (фактически вся таблица) был создан с помощью DEFAULT CHARSET cp1251.Большая часть данных действительно была в надлежащей национальной кодировке cp1251. Однако из-за того, что веб-приложение не смогло правильно установить кодировку, некоторые строки фактически были в UTF-8. Это нужно было исправить.

Простое использование CONVERT (столбец USING xxx) не сработало, потому что MySQL обрабатывал исходные данные, как если бы они были в cp1251. Одним из очевидных решений было бы написать одноразовый PHP-скрипт, который установил бы ИМЕНА cp1251, вытащил бы ошибочные строки (они появлялись в UTF-8), iconv () их до правильного cp1251 и ОБНОВЛЯЛ их новыми значениями.

Однако проблему можно решить в MySQL. Хитрость заключается в том, чтобы заставить его обрабатывать строку, поступающую из таблицы, как двоичную, и , а затем выполнять преобразование кодировки:

ОБНОВЛЕНИЕ таблицы SET column = CONVERT (CONVERT (CONVERT (столбец USING двоичный) USING utf8) USING cp1251) WHERE id = 123;

ОБНОВЛЕНИЕ таблицы SET столбец = ПРЕОБРАЗОВАТЬ (ПРЕОБРАЗОВАТЬ (ПРЕОБРАЗОВАТЬ (столбец ИСПОЛЬЗОВАНИЕ двоичного) ИСПОЛЬЗОВАНИЕ utf8) ИСПОЛЬЗОВАНИЕ cp1251) WHERE id = 123;

Это можно еще упростить.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *