Управление пользователями в MySQL - USER Create Grant, ALTER EVENT (преп. - Беляев А.С.)
Primary tabs
Forums:
- Список пользователей хранится в таблице 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
При определении имени пользователя необходимо указать, откуда он может подключаться
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
===============================
Оптимизация производительности
Причины возникновения проблем с производительностью:
- Плохой дизайн приложения
- Работа с дисковой памятью
- Обработка данных ЦП
- Нехватка памяти
- Недостаточная пропускная способность памяти
- Недостаточная пропускная способность сети
Основная проблема плохой производительности – неудачный дизайн приложения
Проблемы с дизайном приложения
- Неудачный дизайн схемы данных – «дорогие» запросы
- Неудачная работа с транзакциями – долгие блокировки
- Неудачная работа с подключениями – большое время отклика
Недостатки в физической организации БД=
- Неудачная стратегия I/O
- Отличающиеся планы разбора
- Неправильная организация памяти
- Нехватка или утечки памяти
- Недостаточная расширяемость аппаратных компонентов
- Неудачный выбор программных решений
Пути решения проблем
Наращивание аппаратных ресурсов=
- ЦПУ
- Память
- Дисковая подсистема
- Сеть
Изменение архитектуры приложения
Дизайн схемы данных
Оптимизация запросов
Оптимизация доступа к данным (блокировки)
Настройка сервера СУБД
Алгоритм решения проблем
- Опрос пользователей
- Выявления времени и действий, которые приводят к плохой производительности
- Выявление проблемных запросов
Проверить типичные ошибки дизайна приложения=
- Плохое управление коннектом
- Плохое использование курсоров
- Плохие запросы
- Использование нестандартных параметров инициализации
Проверить настройку сервера СУБД=
- Неправильная дисковая конфигурация
- Неправильное размещение файлов на дисках
- Неправильная конфигурация табличных пространств
- Неверная статистика таблиц
Оптимизация запросов (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
- Log in to post comments
- 4226 reads