MySQL: руководство профессионала
Шрифт:
Поток информации таков:
SQL-обращения выданы локально.
Используется MySQL handler API (данные в формате драйвера).
Клиентский API MySQL (данные преобразованы в обращения SQL).
Удаленная база данных -> клиентский API MySQL.
Конвертация набора результатов (если надо) к формату драйвера.
2.6.2. Как использовать таблицы FEDERATED
Процедура для использования таблиц FEDERATED очень проста. Обычно Вы имеете два
Сначала Вы должны иметь таблицу на удаленном сервере, к которой Вы хотите обращаться, используя таблицу FEDERATED. Предположите, что удаленная таблица находится в базе данных federated и определена подобно этому:
CREATE TABLE test_table (id INT(20) NOT NULL AUTO_INCREMENT,
name VARCHAR(32) NOT NULL DEFAULT '',
other INT(20) NOT NULL DEFAULT '0', PRIMARY KEY(id),
INDEX name (name), INDEX other_key (other))
ENGINE=MyISAM DEFAULT CHARSET=latin1;
Пример использует таблицу MyISAM, но таблица могла бы использовать любой тип памяти.
Затем создайте таблицу FEDERATED на локальном сервере для доступа к удаленной таблице:
CREATE TABLE federated_table (id INT(20) NOT NULL AUTO_INCREMENT,
name VARCHAR(32) NOT NULL DEFAULT '',
otherINT(20) NOT NULL DEFAULT '0',
PRIMARY KEY(id), INDEX name (name),
INDEX other_key (other)) ENGINE=FEDERATED
DEFAULT CHARSET=latin1
CONNECTION='mysql://root@remote_host:9306/federated/test_table';
Обратите внимание: CONNECTION заменяет COMMENT, используемый в некоторых предыдущих версиях MySQL.
Структура этой таблицы должна быть точно такая же, как у удаленной таблицы, за исключением того, что опция ENGINE таблицы должна быть FEDERATED, а опция таблицы CONNECTION задает строку подключения, которая указывает для драйвера FEDERATED, как соединиться с удаленным сервером.
Тип памяти FEDERATED создает только файл test_table.frm в базе данных federated.
Удаленная информация хоста указывает удаленный сервер, с которым Ваш локальный соединяется, а база данных и информация таблицы указывают, которую удаленную таблицу использовать как источник данных. В этом примере удаленный сервер обозначен как remote_host (порт 9306), так что на удаленной системе должен быть сервер MySQL, слушающий порт 9306.
Общая форма строки подключения в опции CONNECTION такова:
scheme://user_name[:password]@host_name
[:port_num]/db_name/tbl_name
Только mysql обеспечивается как значение scheme в этот момент, пароль и номер порта факультативны.
Имеются некоторые примеры строк подключения:
CONNECTION='mysql://username:password@hostname:port/database/tablename'
CONNECTION='mysql://username@hostname/database/tablename'
CONNECTION='mysql://username:password@hostname/database/tablename'
Использование CONNECTION для определения строки подключения не оптимально и, вероятно, измениться в будущем.
Потому что любой пароль, заданный в строке подключения, сохранен как простой текст, он может быть замечен любым пользователем, который может применить SHOW CREATE TABLE или SHOW TABLE STATUS для таблицы FEDERATED или сделать запрос таблицы TABLES в базе данных INFORMATION_SCHEMA.
2.6.3. Ограничения типа памяти FEDERATED
Далее перечислены свойства, которые FEDERATED не поддерживает:
В первой версии удаленный сервер должен быть MySQL-сервером. Поддержка FEDERATED для других СУБД может быть добавлена в будущем.
Удаленная таблица, на которую указывает таблица FEDERATED, ДОЛЖНА существовать прежде, чем Вы попробуете обращаться к ней через драйвер FEDERATED.
Возможно для одной таблицы FEDERATED указывать на другую, но Вы должны быть внимательны, чтобы не создать цикл.
Не имеется никакой поддержки транзакций.
Не имеется никакого способа, чтобы узнать, изменилась ли удаленная таблица. Причина этого в том, что эта таблица должна работать подобно файлу данных, который никогда не был записан в чем-нибудь другом, чем база данных. Целостность данных в локальной таблице могла бы быть нарушена, если бы имелось любое изменение для удаленной базы данных.
FEDERATED понимает SELECT, INSERT, UPDATE, DELETE и индексы. Это не поддерживает ALTER TABLE или любые инструкции Data Definition Language, кроме DROP TABLE. Текущая реализация не использует подготовленные инструкции.
Любая инструкция DROP TABLE, выданная для таблицы FEDERATED, удалит только локальную таблицу, но не удаленную.
Реализованы SELECT, INSERT, UPDATE и DELETE, но не HANDLER.
Таблицы FEDERATED не работают с кэшем запроса.
Некоторые из этих ограничений могут сниматься в будущих версиях драйвера FEDERATED.
2.7. Тип памяти ARCHIVE
Тип памяти ARCHIVE используется для сохранения больших количеств данных без индексов в очень маленьком файле.
Тип памяти ARCHIVE включен в двоичные дистрибутивы MySQL. Чтобы его включить, если Вы формируете MySQL из исходного текста, вызовите configure с опцией --with-archive-storage-engine.
Чтобы исследовать исходник типа памяти ARCHIVE, смотрите каталог storage/archive исходных текстов MySQL.
Вы можете проверять, является ли доступным тип памяти ARCHIVE этой инструкцией: