Создание пользователей и назначение им прав
GRANT - Создание пользователей и назначение прав
синтаксис:
GRANT (ALL PRIVILEGES | (SELECT, INSERT, UPDATE, DELETE,
REFERENCES (column list), USAGE))
ON table TO user,... [WITH GRANT OPTION]
[IDENTIFIED BY [PASSWORD] 'password']] WITH w_options
|
GRANT OPTION =
| MAX_QUERIES_PER_HOUR count
| MAX_UPDATES_PER_HOUR count
| MAX_CONNECTIONS_PER_HOUR count
| MAX_USER_CONNECTIONS count
table = *.*
db_name.tbl_name
user = 'name'@'hostname'
w_options
| MAX_QUERIES_PER_HOUR count
| MAX_UPDATES_PER_HOUR count
| MAX_CONNECTIONS_PER_HOUR count
| MAX_USER_CONNECTIONS count
пример: (создать пользователя web(подкл. только с localhost), назначить пароль webpass,
назначить доп опции на максимально возможное кол-во запросов, соединений...)
GRANT USAGE ON *.* TO 'web'@'localhost' IDENTIFIED BY 'webpass'
WITH MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 ;
|
пример: (дать все права на бд web_base, пользователю web. База должна существовать.)
GRANT ALL PRIVILEGES ON `web_base`.* TO 'web'@'localhost' WITH GRANT OPTION;
|
SET PASSWORD - Установка пароля
синтаксис:
SET PASSWORD FOR 'user'@'hostname' = password('newpass');
|
аналог
GRANT USAGE ON *.* TO user@host IDENTIFIED BY 'password';
|
DROP USER - Удаление пользователя
синтаксис:
DROP USER user [, user] ...
|
SHOW GRANTS - Показать права
SHOW GRANTS FOR 'root'@'localhost';
|
RENAME USER - Переименовать пользователя
синтаксис:
RENAME USER old_user TO new_user;
|
Функции
Несколько примеров по работе с функциями:
AVG() - возвращает среднее значение
SELECT AVG(id) FROM people;
|
COUNT() - считает что прикажешь
SELECT COUNT(column_name) FROM table_name;
SELECT COUNT(*) FROM table_name;
|
MAX() - возвращает максимальное значение
пример:
SELECT MAX(column_name) FROM table_name;
|
MIN() - возвращает минимальное значение
пример:
SELECT MIN(column_name) FROM table_name;
|
SUM() - функция суммирования
пример:
SELECT SUM(column_name) FROM table_name;
|
UCASE() - ковертирует символы в верхний регистр
пример:
SELECT UCASE(column_name) FROM table_name;
|
LCASE() - конвертирует символы в нижний регистр
пример:
SELECT LCASE(column_name) FROM table_name;
|
Типы данных которые используються в таблицах(data_type)
Целые числа
Тип | Описание | TINYINT | Может хранить числа от -128 до 127 | SMALLINT | Диапазон от -32768 до 32767 | MEDIUMINT | Диапазон от -8388608 до 8388607 | INT | Диапазон от -2147483648 до 2147483647 | BIGINT | Диапазон от -9223372036854775808 до 9223372036854775807 |
|
Дробные числа
Тип | Описание | FLOAT | Число с плавающей точкой небольшой точности | DOUBLE | Число с плавающей точкой двойной точности | REAL | Синоним для DOUBLE | DECIMAL | Дробное число хранящееся в виде строки | NUMERIC | Синоним для DECIMAL |
|
Строки (символьные данные)
Тип | Описание | VARCHAR | Может хранить не более 255 символов | TINYTEXT | Может хранить не более 255 символов | TEXT | Может хранить не более 65 535 символов | MEDIUMTEXT | Может хранить не более 16 777 215 символов | LONGTEXT | Может хранить не более 4 294 967 295 символов |
|
Бинарные данные(учитываеться регистр символов)
Тип | Описание | TINYBLOB | Может хранить не более 255 символов | BLOB | Может хранить не более 65 535 символов | MEDIUMBLOB | Может хранить не более 16 777 215 символов | LONGBLOB | Может хранить не более 4 294 967 295 символов |
|
Дата и время
Тип | Описание | DATE | Дата в формате ГГГГ-ММ-ДД | TIME | Время в формате ЧЧ:ММ:СС | DATETIME | Дата и время в формате ГГГГ-ММ-ДД ЧЧ:ММ:СС | TIMESTAMP | Дата и время в формате ГГГГММДДЧЧММСС |
|
Дополнительные инструменты и возможности сервера MySQL
mysql - SQL шелл.Может работать как в интерактивном режиме, т.е.
дает возможность подключиться к базе и посредством SQL команд и запросов
производить какие-либо действия с БД, так и не интерактивном тоесть вызвано исполнение кода из шелл-скрипта например.
пример:
mysql --user=user_name --password=your_password db_name
|
подключиться к указанной бд определеннім пользвоателем.
mysql --user=user_name --password=your_password db_name < db_structure.sql
|
таким образом можно восстанавливать БД по имеющемуся дампу БД.
mysql --user=user_name --password=your_password \
db_name--execute="sql commands"
|
может быть использвана в шелл-скриптах если необходимо производить какие-то запросы из скрипта.
myisamchk - тулза для работы с MyISAM таблицами. Может чекать, восстанавливать и оптимизировать таблицы.(Работает с файлами .MYD и .MYI)
Перед использование желательно делать бэкапы.
пример:
mysql_config - показывает опции с которыми был скомпилирован Mysql.
mysql_fix_privilege_tables - скрипт, который обновляет все таблицы с привилегиями.
mysql_install_db - скрипт который инсталит базы,таблицы которые нужны для работы MYSQL.
mysql_tzinfo_to_sql - загружает таблицы временных зон (time zones).
mysql_upgrade - запускаеться каждый раз при обновелнии сервера MySQL. Проверяет все таблицы во всех базах на совместимость с текущей версией.
Чтобы проверить и восстановить таблицы, и апгрейднуть системные таблицы mysql_upgrade
выполняет следующую команду:
mysqlcheck --check-upgrade --all-databases --auto-repair
mysql_fix_privilege_tables
|
mysql_waitpid - запуск с ожиданим программы чей pid и время её ожидания можно утсановить
mysql_waitpid [options] #pid #time
|
mysqladmin - тулза для администрирования MySQL сервера.
mysqladmin create db_name - создать новую БД с именем db_name
drop db_name - удалить базу
extended-status - расширенная информация о состоянии сервера
flush-hosts - очистить всю информацию о хостах в кэше
flush-logs - очистить все логи
flush-privileges - перезагрузить таблицы с привилегиями (тоже что и reload)
flush-status - очистить статус переменных
flush-tables - очистить все таблицы
password - устанавливает пароль для БД
shutdown - остановить сервер
Для случая когда сервер настроен с подчиненными серверами (репликация)
startslave - запустить репликацию на подчиненном сервере (slave)
stop-slave - остановить репликацию на подчиненом сервере (slave)
status - отображает краткую информацию о статусе сервера
variables - отобразить переменные сервера и их значения
threads - покажет кол-во активных клиентских трэдов (threads)
--host=host_name - (-h hostname )подключиться к MySQL на укзанный хост
--password=password (-p[password]) - указать пароль на подключение
--port=port_num (-P port_num) - указать порт подключения
--protocol={TCP|SOCKET|PIPE|MEMORY} - указывает протокол/метод с
помощью которого происходит подключение
--socket=path (-S path) - подключение на файл-сокет
--ssl* - защищенное подключение, через ssl
--user=user_name, -u user_name - подключающейся пользователь
mysqlbinlog - инструмент для обработки бинарных логов MySQL'я
Сохранить все логи в файл
mysqlbinlog binlog.000001 > /tmp/statements.sql
|
mysqlbug - скрипт, баг-репортер
mysqlcheck - тулза "чекер" и восстановитель таблиц
--all-databases (-A) прочекать все таблицы во всех базах
--auto-repair - автоматически восттанавливать(чинить) таблицы
--optimize -o - оптимизировать таблицы
--repair (-r) - починить таблицы
mysqld_safe - скрипт запуска сервера(рекомендуемый)
mysqldump - инструмент для бэкапирования баз
mysqldump -u[username] -p[password] -h[host] db_name [tables] > backup.sql
|
--ignore-table=db_name.tbl_name - игнорить определенную таблицу при бэкапе.
--lock_tables (-l) лочить таблицы перед бєкапированием.
--xml, (-X) сохранить бэкап в формате xml
mysqlimport - прога для импорта данных, в различных форматах
mysqlshow - тулза для быстрого просмотра баз, таблиц, полей.
Выполнение SQL запросов из шелла и php
Парочка простых примеров:
Выполнение запросов из шела:
#!/bin/sh
/usr/local/bin/mysql --host=localhost --user=exim --password=exim \
--database=exim --execute="DELETE FROM \
\`sended_list\` WHERE \`last_mail_timestamp\` \
< (UNIX_TIMESTAMP() - 60*24*3600)"
|
#!/bin/sh
user="dbuser"
pass="dbpassword"
db="dbnme"
host="localhost"
mysql --host="$host" -u "$user" -p"$pass" "$db" <<EOF
sql-statement-1;
sql-statement-2;
EOF
|
#!/bin/sh
user="dbuser"
pass="dbpassword"
db="dbnme"
host="localhost"
sql="select * from tal_name"
mysql --host="$host" -u "$user" -p"$pass" <<EOF
use $db;
$sql;
EOF
|
пример для PHP (создание БД):
<?php
$sql="CREATE DATABASE db_name";
mysql_query($sql);
?>
|