На главную

MySQL: установка, настройка, описание

SQL СУБД (реляционная) без излишеств (правда, в последней версии появились транзакции с помощью Berkley DB и INNOBASE), зато быстрая (для поиска и добавления, если предстоят частые изменения, то лучше поискать другую СУБД). Стандарты: entry level SQL92, ODBC levels 0-2.

Лицензия - GPL/LGPL (но в случае извлечения прибыли от MySQL фирма - MySQL AB, Швеция - мягко намекает на оплату поддержки). Для хостинга лицензия не нужна, но клиенты должны иметь возможность убедиться, что все установлено правильно (предлагается давать доступ на чтение к установленным исходникам).

Написана на C и C++. Базовая платформа: Solaris 2.7-2.8, SuSE Linux 7.1 (ядро 2.4, ReiserFS), но работает также в AIX, BSDI, DEC Unix, FreeBSD, HP-UX, Linux 2.0, Mac OS X, NetBSD, OpenBSD, OS/2, SGI Irix, SunOS, SCO OpenServer, SCO UnixWare, Tru64, Win9x, NT, Win2000.

Многопотоковая. Первоначально мимикрировала под mSQL. API для C, C++, Java, Eiffel, Perl, PHP, Python, Tcl. ODBC. Парольная защита (пароли шифруются перед пересылке, это, однако, не увеличивает безопасность).

Таблицы в виде B-tree со сжатием индекса. До 32 индексов на таблицу. До 16 колонок на индекс. Длина индекса до 500 байт. Таблицы в памяти. Записи переменной длины. Есть примеры использования MySQL с 60000 таблиц и 5 миллиардами строк. Отсутствует memory leak (проверено Purify). Поддержка koi8-r и cp1251 (сортировка, сравнение и т.д.). Клиенты могут соединяться по TCP/IP (можно использовать только, если никто не подслушивает) или Unix socket. Можно встраивать в свои программы.

Стабильность подсистем: ISAM - стабильная, MyISAM - gamma, C API - стабильная (буфер до 16МБ), mysql(,admin,show,dump,import) - стабильные, Basic SQL - стабильная, оптимизатор - стабильная, блокировка (одновременный доступ нескольких процессов, не клиентов) - gamma (проблемы в Linux, рекомендуется --skip-locking), нити в Linux - рекомендуется --skip-locking и использовать не более 1000 одновременных соединений, DBD - стабильная, MyODBC - gamma, репликация - бета/gamma, BDB - бета (транзакции), автоматическое восстановление MyISAM - бета, слияние таблиц - бета/gamma, INNODB - альфа (транзакции с блокировкой на уровне строк), полнотекстовый поиск - бета.

Расширения к ANSI SQL92:

Отсутствующие возможности ANSI SQL92:

Установка и настройка (Linux)
Опции ./configure
mysql.server (запуск MySQL при загрузке копьютера)
safe_mysqld (надстройка над mysqld)
mysqld (сервер БД)
Разбор параметров и конфигурационных файлов
Типы таблиц (методы доступа)
Права доступа и привилегии
Базовый синтаксис
Типы данных (в колонках)
Операторы SQL
Функции для SELECT и WHERE
Отличия версий

Установка и настройка (MySQL 3.23.37 на Linux RedHat 6.2) из исходных текстов

Опции ./configure
mysql.server (запуск MySQL при загрузке копьютера)

Скрипт предназначен для /etc/rc.d/init.d (и линки в 0,2,3,5,6 не забыть). Соответственно первый параметр start или stop (посылается сигнал процессу, вместо выполнения "mysqladmin shutdown"). Далее обработка опций из конфигурационного файла (группы [mysqld] и [mysql_server]) и командной строки (какая командная строка в скрипте из rc.d?!). Ищет и запускает safe_mysqld. Если нужны какие-либо специфические опции safe_mysqld, то их можно указать здесь. Секция [mysql.server] в конфигурационном файле /etc/my.cnf может содержать установку переменных:

safe_mysqld (надстройка над mysqld)

Скрипт запускает mysqld и перезапускает его ежели тот помрет. Проверяет, что не был запущен ранее. Грохает зависшие процессы. Запускать под root. Пытается определить где что лежит (понимает только стандартные конфигурации, иначе надо запускать из BASEDIR). Собирает опции из секций mysqld, server и safe_mysqld конфигурацинных файлов и командной строки (м.б. модифицированных опциями --no-defaults, --defaults-file=имя и --defaults-extra-file=имя). Передает их ("улучшив" некоторые из них) mysqld. Свои опции:

Есть закоментированные проверки всех таблиц. Пользователь по умолчанию - mysql. Пытается запустить mysqld под "nice nohup".

mysqld (сервер БД)

Вместо ключей запуска можно использовать конфигурационные файлы.

Разбор параметров и конфигурационных файлов

Опции берутся в следующем порядке (последующие затирают предыдущие):

Действуют на mysql, mysqld, mysqladmin, mysqlimport, mysqldump, myisamchk, myisampack, mysql.server. Файл делится на секции. Секция начинается со строки, в которой указано имя секции в квадратных скобках. Имя секции соответствует имени программы на которую она действует. Любая длинная опция программы (начинающаяся с двух минусов, запустите программу с ключом --help) может быть использована здесь (минусы надо отбросить). Секция с именем client позволяет задать опции (например, пароль ;), общие для всех клиентских программ. Переменные устанавливаются строкой:
set-variable = имя=значение.

Типы таблиц (методы доступа)

MySQL позволяет использовать для хранения данных различные типы таблиц (методы доступа). Меняется командой ALTER TABLE, описание хранится в файле .frm.

Права доступа

Аутентификация пользователя производится по имени (до 16 символов), паролю (м.б. пустым) и хосту или его IP. Большинство клиентских программ по умолчанию используют mysql-имя, совпадающее с unix-именем, но это можно изменить с помощью ключа --user=. Пароль можно задать:

Вся информация о правах хранится в БД с именем mysql. Никто не должен иметь к ней доступа на чтение (см. про пароли).

Используются таблицы:

Проверка права на подсоединение к серверу: mysql-клиент предъявляет имя пользователя, сервер определяет имя (или IP) хоста клиента (или localhost для обращения через unix-socket). По данной паре (адрес/имя) ищется строка в таблице user. Предварительно таблица сортируется по полям (Host/User) так, что наиболее специфичные строки оказываются первыми, наименее специфичные - последними. Если строка не найдена, то соединение отвергается. Если - найдена, то сверяется пароль.

Проверка прав при исполнении каждого запроса: таблица db сортируется по полям Host, Db и User, таблица host по полям Host и Db, таблицы tables_priv и columns_priv по полям Host, Db и User от наиболее специфичного к наименее. Для административных запросов и доступа к файлам проверяется только таблица user. Для прочих запросов в начале проверяется таблица user - а нет ли у данного пользователя прав доступа на "глобальном" уровне. Если есть - операция разрешается. Если нет, то проверяются права доступа к конкретной БД с конкретного хоста (по пересечению таблиц Db и Host с учетом шаблонов и пустых полей). Если их достаточно, то доступ дается. Если недостаточно, то к объединению "глобальных" прав и прав БД/хост добавляются права, извлеченные из таблиц tables_priv и columns_priv. Если и этого не хватает, то увы...

Права доступа читаются mysqld (и не читаются при "ручном" изменении БД mysql):

"Глобальные" привилегии и изменения пароля вступают в силу только при следующем соединении. Изменения в доступе к БД - при следующей команде use. Изменения в доступе к таблицам и колонкам - при следующем запросе.

Все команды, введенные в клиенте mysql (а в других?) попадают в .mysql_history (того unix-пользователя, который запускал mysql). А также в различные журналы сервера и в выдачу команды SHOW PROCESSLIST.

Изменение пароля: set password for имя=password('новый пароль').

GRANT тип-привилегии [(список-столбцов)] [, тип-привилегии [(список-столбцов)] ...] ON { имя-таблицы | * | *.* | имя-БД.* } TO имя-пользователя [ IDENTIFIED BY 'пароль' ] [, имя-пользователя [ IDENTIFIED BY 'пароль ] ... ] WITH GRANT OPTION

REVOKE тип-привилегии [(список-столбцов)] [, тип-привилегии [(список-столбцов)] ...] ON { имя-таблицы | * | *.* | имя-БД.* } FROM имя-пользователя [, имя-пользователя ... ]

Типы привилегий:

Для столбцов можно задавать только INSERT, SELECT и UPDATE. Для таблиц - INSERT, SELECT, UPDATE, CREATE, DROP, DELETE, GRANT, INDEX, ALTER. Использование "*.*" означает задание глобальных привилегий. Использование "*" означает задание привилегий для текущей БД (если текущей БД нет, то глобальные).

SHOW GRANTS FOR имя@хост;

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

Для упрощения жизни можно использовать утилиты mysqladmin и mysqlaccess, xmysqladmin, mysql_webadmin из директории Contrib.

Посмотрев на это безобразие, ORACLE может перестать волноваться ;) Зря они различают пользователей с одним именем, пришедших с разных хостов (наверное, когда-то mysql-имя совпадало с unix-именем и этой информации м.б. доверять :). Не говоря об отсутствии шифровки при передаче данных по сети и возможность подсовывать перехваченный зашифрованный пароль

Не храните пароли и тому подобную информацию в БД в открытом виде.

Базовый синтаксис

Константы

Имена

Если в имени есть спецсимволы или оно совпадает с зарегистрированным словом, то его надо заключать в апострофы. Нельзя использовать символы 0x00 или 0xFF (привет маленькому "я" в cp1251!), апостроф и кавычку. Имена БД и таблиц чувствительны к регистру в Unix и нечувствительны в MS Windows. Имена колонок нечувствительны везде. Алиасы на таблицы чувствительны везде, алиасы на колонки нечувствительны везде.

Переменные

Имя переменной начинается с '@', может содержать буквы, цифры, '_', '$', '.'. Первоначальное значение - NULL. Может содержать целое (64 бита), вещественное или строку. Можно использовать в тех местах, где разрешается использование выражений (не числовых констант как во фразе LIMIT!). Действует на текущую нить (thread). Установка:

Комментарии

Типы данных (в колонках)

M - ширина поля при отображении (максимально - 255). D - число знаков в дробной части (не более M-2 и 30).

Операторы SQL
Функции для SELECT и WHERE

Между именем функции и скобкой не должно быть пробела. Операндами могут быть константы, имена колонок и переменные.


Утилиты администрирования

mysqladmin

Опции: Команды:

isamchk

isamlog

mysqlaccess

mysqldump

mysqlimport

mysqlshow

xmysqladmin

Mysql_watchdog


www интерфейс

Mysql-webadmin

Mysqladm


Клиентские приложения

mysql

xmysql


Процедуры

Резервирование данных

Полное копирование каждой базы с помощью mysqldump (получается файл в формате команд SQL, которые можно пропустить через mysql непосредственно или предварительно обработав) или копированием файлов (остановив сервер). Если mysqld запущен с ключом --log-update, то он также создает журнал изменений в виде команд SQL в файле localhost.номер.
Отличия версий

3.23.37 относительно 3.23.36

3.23.36 относительно 3.23.35

3.23.35 относительно 3.23.33

3.23.33 относительно 3.23.32

Hosted by uCoz