Мануал 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
После завершения загрузки запустите программу установки следующим образом.
Щелкните правой кнопкой мыши загруженный установочный файл (например,
mysql-installer-community-5.6.14.0.msi
) и выберите пункт ‘Выполнить’.
Запустится программа установки MySQL.
На панели приветствия выберите ‘Установить продукты MySQL’.
На панели информации о лицензии ознакомьтесь с лицензионным соглашением, установите флажок принятия и нажмите кнопку ‘Далее’.
На панели ‘Найти последние продукты’ нажмите кнопку ‘Выполнить’.
После завершения операции нажмите кнопку ‘Далее’.
На панели «Тип настройки» выберите параметр «Пользовательская», а затем нажмите кнопку «Далее».
На панели ‘Выбор компонентов обеспечения’ убедитесь, что выбран MySQL Server 5.6.x, и нажмите кнопку ‘Далее’.
На панели ‘Проверить требования’ нажмите кнопку ‘Далее’.
На панели ‘Установка’ нажмите кнопку ‘Выполнить’.
После успешного завершения установки сервера на панели ‘Установка’ отображается информационное сообщение. Нажмите кнопку «Далее».
На странице ‘Настройка’ нажмите кнопку ‘Далее’.
На первой странице конфигурации сервера MySQL (1/3) установите следующие параметры:
Тип конфигурации сервера. Выберите вариант ‘Компьютер для разработки’.
Включите поддержку сети TCP/IP. Убедитесь, что флажок установлен, и задайте следующие параметры ниже:
Номер порта. Укажите порт подключения. По умолчанию установлено значение 3306; не следует изменять его без необходимости.
Откройте порт брандмауэра для доступа к сети. Выберите исключение добавления брандмауэра для указанного порта.
Расширенная настройка. Выберите флажок ‘Показать расширенные параметры’ для отображения дополнительной страницы конфигурации для настройки расширенных параметров для экземпляра сервера (если требуется).
Примечание. При выборе этого параметра необходимо перейти к панели для установки параметров сети, где будет отключен брандмауэр для порта, используемого сервером MySQL.
Нажмите кнопку «Далее».
На второй странице конфигурации сервера MySQL (2/3) установите следующие параметры:
Пароль учетной записи root.
Пароль root для MySQL. Введите пароль пользователя root.
Повторите ввод пароля. Повторно введите пароль пользователя root.
Примечание. Пользователь root — это пользователь, который имеет полный доступ к серверу баз данных MySQL — создание, обновление и удаление пользователей и так далее. Запомните пароль пользователя root (администратора) – он понадобится вам при создании примера базы данных.
Учетные записи пользователя MySQL. Нажмите кнопку ‘Добавить пользователя’ для создания учетной записи пользователя. В диалоговом окне ‘Сведения о пользователе MySQL’ введите имя пользователя, роль базы данных и пароль (например,
!phpuser
). Нажмите кнопку «ОК».
Нажмите кнопку «Далее».На третьей странице конфигурации сервера MySQL (3/3) установите следующие параметры:
Имя службы Windows. Укажите имя службы Windows, которая будет использоваться для экземпляра сервера MySQL.
Запустите сервер MySQL при запуске системы. Не снимайте этот флажок, если сервер MySQL требуется для автоматического запуска при запуске системы.
Запуск службы Windows в качестве. Возможны следующие варианты.
Стандартная системная учетная запись. Рекомендуется для большинства сценариев.
Нестандартный пользователь. Существующая учетная запись пользователя рекомендуется для сложных сценариев.
Нажмите кнопку «Далее».На странице ‘Обзор конфигурации’ нажмите кнопку ‘Далее’.
После успешного завершения настройки на панели ‘Завершение’ появляется информационное сообщение. Нажмите кнопку «Завершить».
Примечание. Для проверки успешности настройки запустите диспетчер задач. Если 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».
- В раздел [client], после строки:
port=3306
Добавьте строку определяющую каталог содержащий файлы описания кодировок:
character-sets-dir=»C:/Program Files/MySQL/MySQL Server 5. 5/share/charsets» - В раздел [mysqld], после строки:
port=3306
Добавьте следующие две строки, первая из которых вам уже известна, вторая – устанавливает кодировку в которой данные передаются MySQL:
character-sets-dir=»C:/Program Files/MySQL/MySQL Server 5.5/share/charsets»
init-connect=»SET NAMES cp1251″ - Далее, найдите строку:
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 <пароль> zabbixmysql -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 Предупреждения: 1mysql> 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 возможных кодовых точек, которые вы не можете использовать. Фактически, MySQLutf8
позволяет хранить только 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, # По умолчанию 0error_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 предоставляет команду railsdev: 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;
Это можно еще упростить.