Управление пользователями в MySQL - USER Create Grant, ALTER EVENT (преп. - Беляев А.С.)

  • Список пользователей хранится в таблице USER БД mysql
  • Привилегии пользователей хранятся в таблице USER_PRIVILEGES БД information_schema
  • Для немедленного применения привилегий используется команда FLUSH PRIVILEGES
CREATE USER user  [IDENTIFIED BY [PASSWORD] 'password']

пример выдачи привилегий пользователю:

GRANT privileges (columns) 
ON what 
TO user IDENTIFIED BY "password" 
[WITH GRANT OPTION]

Назначение пароля для пользователя:

SET PASSWORD FOR user = PASSWORD('password' )

Удаляем учётную запись о пользователе:

DROP USER user

Список привилегий MYSQL

При определении имени пользователя необходимо указать, откуда он может подключаться

GRANT ALL ON samp_db.* TO boris@localhost IDENTIFIED BY "ruby" 

GRANT ALL ON samp_db.* TO fred@ares.mars.net IDENTIFIED BY "quartz" 

GRANT ALL ON samp_db.* TO max@% IDENTIFIED BY "diamond “

GRANT ALL ON samp_db.* TO rex@192.168.128.0/17 IDENTIFIED BY "ice"
SHOW GRANTS FOR 'joe'@'office.example.com'; 

SHOW GRANTS FOR 'joe'@'home.example.com';

Пользователю можно ограничить ресурсы=

CREATE USER 'francis'@'localhost' IDENTIFIED BY 'frank';

GRANT ALL ON customer.* TO 'francis'@'localhost'
WITH MAX_QUERIES_PER_HOUR 20
MAX_UPDATES_PER_HOUR 10
MAX_CONNECTIONS_PER_HOUR 5
MAX_USER_CONNECTIONS 2;

Для снятия ограничений значения ставятся в 0 (ноль)

Привилегии в MySQLФ=

  • Привилегии складываются (логическое OR)
  • Явных запрещающих привилегий нет

===========================

Создание расписаний для запуска задач

В версии 5.1.6 MySQL появилось понятие «События»
Событие – некоторое действие, срабатывающее с определенной периодичностью
Запуск задач:

  • События идентифицируются по имени
  • Запускаются отдельным фоновым процессом

пример события:

CREATE EVENT myevent
ON
SCHEDULE EVERY 6 HOUR
COMMENT 'A sample comment.‘
DO
UPDATE myschema.mytable SET mycol = mycol + 1;

изменение события:

ALTER EVENT myevent 
ON SCHEDULE EVERY 12 HOUR 
STARTS CURRENT_TIMESTAMP + 4 HOUR;

удаление события:

DROP EVENT myevent;

События в MySQL:

  • События запускаются после создания автоматически
  • При создании события можно указать имя пользователя, с правами которого событие будет выполняться
  • Для создание событий должна быть выдана привилегия EVENT

===============================

Оптимизация производительности

Причины возникновения проблем с производительностью:

  1. Плохой дизайн приложения
  2. Работа с дисковой памятью
  3. Обработка данных ЦП
  4. Нехватка памяти
  5. Недостаточная пропускная способность памяти
  6. Недостаточная пропускная способность сети

Основная проблема плохой производительности – неудачный дизайн приложения

Проблемы с дизайном приложения

  • Неудачный дизайн схемы данных – «дорогие» запросы
  • Неудачная работа с транзакциями – долгие блокировки
  • Неудачная работа с подключениями – большое время отклика

Недостатки в физической организации БД=

  1. Неудачная стратегия I/O
  2. Отличающиеся планы разбора
  3. Неправильная организация памяти
  4. Нехватка или утечки памяти
  5. Недостаточная расширяемость аппаратных компонентов
  6. Неудачный выбор программных решений

Пути решения проблем
Наращивание аппаратных ресурсов=

  • ЦПУ
  • Память
  • Дисковая подсистема
  • Сеть

Изменение архитектуры приложения
Дизайн схемы данных
Оптимизация запросов
Оптимизация доступа к данным (блокировки)
Настройка сервера СУБД

Алгоритм решения проблем

  • Опрос пользователей
  • Выявления времени и действий, которые приводят к плохой производительности
  • Выявление проблемных запросов

Проверить типичные ошибки дизайна приложения=

  • Плохое управление коннектом
  • Плохое использование курсоров
  • Плохие запросы
  • Использование нестандартных параметров инициализации

Проверить настройку сервера СУБД=

  • Неправильная дисковая конфигурация
  • Неправильное размещение файлов на дисках
  • Неправильная конфигурация табличных пространств
  • Неверная статистика таблиц

Оптимизация запросов (MySQL)

Оператор EXPLAIN позволяет увидеть:

  • План выполнения запроса
  • Использование ключей
  • Использование индексов

пример использования EXPLAIN:

EXPLAIN SELECT tt.TicketNumber, tt.TimeIn, tt.ProjectReference, tt.EstimatedShipDate, tt.ActualShipDate, tt.ClientID, tt.ServiceCodes, tt.RepetitiveID, tt.CurrentProcess, tt.CurrentDPPerson, tt.RecordVolume, tt.DPPrinted, et.COUNTRY, et_1.COUNTRY, do.CUSTNAME 
FROM 
tt, et, et AS et_1, do 
WHERE 
tt.SubmitTime IS NULL 
AND tt.ActualPC = et.EMPLOYID 
AND tt.AssignedPC = et_1.EMPLOYID 
AND tt.ClientID = do.CUSTNMBR;

Типы соединений таблиц (type)

  • system
  • const =
    В таблице только одна подходящая строка, которая выбирается при начале запроса
    SELECT * FROM tbl_name WHERE primary_key=1; 
    
  • eq_ref
    Использование первичного ключа или уникального индекса при выборке из нескольких таблиц=
    SELECT * FROM ref_table,other_table 
    WHERE ref_table.key_column_part1=other_table.column 
    AND ref_table.key_column_part2=1; 
    
  • ref
    Выборка нескольких строк ( = )
    SELECT * FROM ref_table,other_table 
    WHERE ref_table.key_column=other_table.column; 
    
  • ref_or_null
    То же, что и ref, но происходит поиск по пустым столбцам=
    SELECT * FROM ref_table 
    WHERE key_column=expr OR key_column IS NULL;
    
  • index_merge
    Используется слияние индексов при выборке разных диапазонов значений
    SELECT * FROM tbl_name
    WHERE (key_part1 = 10 OR key_part2 = 20)
    AND non_key_part=30;
  • unique_subquery
    Заменяет ref при использовании подзапросов IN при работе с уникальными индексами
  • index_subquery
    То же, но по неуникальным индексам
  • range
    Выборка диапазона строк по неуникальному индексу
  • index
    Полное сканирование индекса и выборка подходящих строк
  • ALL
    Полное сканирование таблицы

читайте ещё = http://www.mysql.ru/docs/man/EXPLAIN.html