- •Кто и откуда может подключаться к серверу
- •Какой уровень привилегий должен иметь пользователь и на доступ к чему эти привилегии предоставляются
- •Как определить имя локального компьютера в таблице разрешений
- •Нужны ли пользователю административные привилегии
- •Отмена привилегий и удаление пользователей
- •Головоломка с привилегиями
- •Использование mysqlcheck для сопровождения и аварийного восстановления таблиц.
- •Mysqldump, получение дампов данных и структуры таблицы
- •Mysqlhotcopy, копирование баз данных и таблиц MySql
- •Способ хранения таблиц и баз данных
- •Выделенные разделы
- •Типы таблиц
- •Столбцы
- •Резервирование и копирование баз данных с помощью программы mysqldump
- •Использование методов прямого копирования
- •Репликация баз данных
- •Восстановление данных из архивов
- •Восстановление базы данных
- •Восстановление отдельных таблиц
- •Внутренняя безопасность: защита доступа к каталогу данных
- •Столбцы привилегий таблицы разрешений
- •Привилегии баз данных и таблиц
- •Административные привилегии
- •Как сервер управляет доступом клиентов
- •Проверка запроса
- •Как хранятся пароли в таблице user
- •Порядок сравнения столбцов
- •Как минимизировать риск при работе с таблицами разрешений
- •Установка пользователей без помощи оператора grant
- •Головоломка с привилегиями (продолжение)
Mysqlhotcopy, копирование баз данных и таблиц MySql
Утилита mysqlhotcopy представляет собой Perl-сценарий, использующий SQL-команды LOCK TABLES, FLUSH TABLESи Unix-утилиты cp или scp для быстрого получения резервной копии базы данных. Пожалуй, это наиболее быстрый способ копирования баз данных или таблиц, но он может работать только на том же компьютере, где расположены каталоги копируемой базы данных.
mysqlhotcopy db_name [/path/to/new_directory]
mysqlhotcopy db_name_1 ... db_name_n /path/to/new_directory
mysqlhotcopy db_name./regex/
Утилита mysqlhotcopy поддерживает следующие опции:
-u, -user=#
Имя пользователя для входа в базу данных.
-p, -password=#
Используемый пароль при подсоединении к серверу.
-P, -port=#
Номер порта, используемого для подсоединения к локальному серверу.
-S, -socket=#
Номер сокета, используемого для подсоединения к локальному серверу.
-keepold
Не удалять предыдущий результат (только что переименованный) после выполнения команды.
-q, -quiet
Выводить только сообщения об ошибках.
-debug
Разрешить отладку.
-n, -dryrun
Сообщать о действиях без их выполнения.
-regexp=#
Копировать все базы данных с именами, встречающимися в функции regexp.
-checkpoint=#
Внести проверочную запись в предусмотренную таблицу базы данных.
-flushlog
Записать на диск данные журналов из буфера, как только все таблицы заблокируются.
-tmpdir=#
Временная директория (вместо /tmp).
А также некоторые другие. Более полное описание данного сценария можно посмотреть в документации по языку программирования Perl.
Сценарий mysqlhotcopy берет информацию для групп [client] и [mysqlhotcopy] из файлов опций.
Для выполнения программы mysqlhotcopy необходимы доступ для записи в директорию, куда будет помещена копия, и привилегия выполнения команды SELECT для копируемых таблиц и команды RELOAD для MySQL-сервера (чтобы выполнить FLUSH TABLES).
mysqlimport, импорт данных из текстовых файлов
Утилита mysqlimport обеспечивает интерфейс командной строки для SQL-оператора LOAD DATA INFILE. Большинство параметров mysqlimportполностью соответствует аналогичным параметрам для оператора LOAD DATA INFILE.
Утилита mysqlimport вызывается следующим образом:
shell> mysqlimport [параметры] database textfile1 [textfile2 ...]
Для каждого текстового файла, указанного в командной строке, mysqlimportудаляет расширение в каждом имени файла и использует его, чтобы определить, в какую таблицу занести содержимое. Например, файлы с именами patient.txt, patient.text и patient должны быть все занесены в таблицу с именем patient.
Утилита mysqlimport поддерживает следующие опции:
-c, -columns=...
Эта опция принимает в качестве аргумента список разделенных запятыми имен полей. Данный список полей используется для создания соответствующей команды LOAD DATA INFILE, которая затем посылается в MySQL.
-C, -compress
Использовать компрессию в связи между клиентом и сервером, если они оба поддерживают сжатие.
-#, -debug[=option_string]
Отслеживать прохождение программы (для отладки).
-d, -delete
Удалить данные из таблицы перед импортированием текстового файла.
-f, -force
Игнорировать ошибки. Например, если таблица для текстового файла не существует, продолжать обработку остающихся файлов. Без параметра -force утилита mysqlimport прекращает работу при отсутствии таблицы.
-h host_name, -host=host_name
Импортировать данные в MySQL-сервер на указанном хосте. Значение хоста по умолчанию — localhost.
-l, -lock-tables
Заблокировать все таблицы для записи перед обработкой любых текстовых файлов. Это обеспечивает синхронизацию всех таблиц на сервере.
-L, -local
Читать входящие файлы из клиента. По умолчанию предполагается, что текстовые файлы расположены на сервере при подсоединении к localhost (значение хоста по умолчанию).
-pyour_pass, -password[=your_pass]
Используемый пароль при подключении к серверу. Если аргумент =your_pass не введен, mysqlimport предложит ввести пароль.
-P port_num, -port=port_num
Номер порта TCP/IP, используемого для подсоединения к хосту.
-r, -replace
Опции -replace и -ignore управляют обработкой поступающих на вход записей, которые дублируют имеющиеся записи по значениям уникальных ключей. Если задано значение -replace, новые строки заменяют существующие с тем же самым значением уникального ключа. Если задано значение -ignore, входные строки, которые дублируют существующую строку по значению уникального ключа, пропускаются. Если же ни одна из опций не задана, то при обнаружении ключа-дубликата возникает ошибка и остаток текстового файла игнорируется.
-s, -silent
Режим молчания. Выводить только сообщения об ошибках.
-u user_name, -user=user_name
Имя пользователя MySQL-сервера, используемое при подсоединении к серверу. Значением по умолчанию является имя для входа в Unix.
mysqlshow, просмотр баз данных, таблиц и столбцов
Утилита mysqlshow позволяет кратко ознакомиться с существующими базами данных, их таблицами и столбцами таблиц.
Аналогичную информацию можно получить с помощью программы mysql, используя команду SHOW.
Утилита mysqlshow вызывается следующим образом:
shell> mysqlshow [ПАРАМЕТРЫ] [database [table [column]]]
Если имя базы данных не указано, то выдается список всех существующих баз данных.
Если не указана таблица — показываются все таблицы, найденные в этой базе данных.
Если не задан столбец — показываются все найденные в таблице столбцы и представленные в виде столбцов данные.
Следует отметить, что в более новых версиях MySQL пользователь может просмотреть только те базы/таблицы/столбцы, для которых у него имеются соответствующие привилегии.
Если последний аргумент содержит в себе шаблонные символы (*, ?, % или _) процессора или SQL, то будут представлены только данные, совпадающие с шаблоном. Если имя базы данных содержит подчеркивание, то оно должно быть экранировано обратным слешем (некоторые оболочки в Unix востребуют два обратных слеша) для того, чтобы получить корректные имена. '*' конвертируются в '%' и '?' - в '_'.
Это может вызвать путаницу при попытке просмотреть столбцы таблицы с символом _, так как в таком случаеmysqlshow покажет только имена таблиц, совпадающие с шаблоном. Ситуацию можно легко исправить добавлением дополнительного символа % в конец командной строки (как отдельного аргумента).
perror, разъяснение кодов ошибок
Для большинства системных ошибок, помимо внутреннего текстового сообщения MySQL, можно также выводить номер кода системной ошибки в одном из следующих стилей: message ... (errno: #) или message ... (Errcode: #).
Выяснить, что данный код ошибки означает, можно либо путем изучения документации на данную систему, либо воспользовавшись возможностями утилиты perror.
perror выводит описание кода системной ошибки или код ошибки обработчика таблиц MyISAM/ISAM.
perror вызывается следующим образом:
shell> perror [ПАРАМЕТРЫ] [ERRORCODE [ERRORCODE...]]
Пример:
shell> perror 13 64
Error code 13: Доступ запрещен
Error code 64: Компьютер не находится в сети
Следует учитывать, что сообщения об ошибках в большинстве своем являются системно-зависимыми!
Запуск SQL-команд из текстового файла
Обычно клиент mysql используется в интерактивном режиме, например, следующим образом:
shell> mysql database
Однако вполне можно поместить SQL команды в текстовый файл и указать mysql считывать входные данные из этого файла. Для этого необходимо создать текстовый файл text_file, содержащий команды, которые предстоит выполнить. Затем запускаем mysql как показано ниже:
shell> mysql database < text_file
Можно также запустить текстовый файл с командой USE db_name. В этом случае указывать имя базы данных в командной строке не обязательно:
shell> mysql < text_file
Если программа mysql уже работает, можно запустить файл с SQL-сценарием, используя команду source:
mysql> source filename;