Spec-Zone .ru
спецификации, руководства, описания, API

17.5.14. Распределенный MySQL Privileges для MySQL Cluster

MySQL Cluster поддерживает распределение пользователей MySQL и полномочий через все узлы SQL в MySQL Cluster. Эта поддержка не включается по умолчанию; следует следовать за процедурой, обрисованной в общих чертах в этом разделе, чтобы сделать так.

Обычно, каждый MySQL пользовательские таблицы полномочия сервера в mysql база данных должна использовать MyISAM механизм хранения, что означает, что учетная запись пользователя и ее связанные полномочия, создаваемые на одном узле SQL, не доступны на других узлах SQL кластера. Файл SQL ndb_dist_priv.sql предоставляется MySQL Cluster NDB 7.3 распределениям. Этот файл может быть найден в share каталог в каталоге установки MySQL.

Первый шаг во включении распределенным полномочиям должен загрузить этот сценарий в MySQL Server, который функционирует как узел SQL (к которому мы обращаемся после этого как целевой узел SQL или MySQL Server). Можно сделать это, выполняя следующую команду от системной оболочки на целевом узле SQL после изменения на его каталог установки MySQL (где options стенды для любых дополнительных опций должны были соединиться с этим узлом SQL):

shell> mysql options -uroot < share/ndb_dist_priv.sql

Импорт ndb_dist_priv.sql создает много сохраненных подпрограмм (шесть хранимых процедур и одна сохраненная функция) в mysql база данных на целевом узле SQL. После соединения с узлом SQL в mysql клиенте (как MySQL root пользователь), можно проверить, что они создавались как показано здесь:

mysql> SELECT ROUTINE_NAME, ROUTINE_SCHEMA,
        ROUTINE_TYPE     ->     FROM
        INFORMATION_SCHEMA.ROUTINES     ->     WHERE ROUTINE_NAME
        LIKE 'mysql_cluster%'    ->     ORDER BY ROUTINE_TYPE;+---------------------------------------------+----------------+--------------+| ROUTINE_NAME                                | ROUTINE_SCHEMA | ROUTINE_TYPE |+---------------------------------------------+----------------+--------------+| mysql_cluster_privileges_are_distributed    | mysql          | FUNCTION     || mysql_cluster_backup_privileges             | mysql          | PROCEDURE    || mysql_cluster_move_grant_tables             | mysql          | PROCEDURE    || mysql_cluster_move_privileges               | mysql          | PROCEDURE    || mysql_cluster_restore_local_privileges      | mysql          | PROCEDURE    || mysql_cluster_restore_privileges            | mysql          | PROCEDURE    || mysql_cluster_restore_privileges_from_local | mysql          | PROCEDURE    |+---------------------------------------------+----------------+--------------+7 rows in set (0.01 sec)

Хранимую процедуру называют mysql_cluster_move_privileges создает резервные копии существующих таблиц полномочия, затем преобразовывает их в NDB. Два набора копий создаются в mysql база данных:

Хотя исходные таблицы полномочия поддерживаются автоматически, это всегда - хорошая идея создать резервные копии вручную существующих таблиц полномочия на всех узлах SQL, на которые влияют, перед продолжением. Можно сделать это использование mysqldump способом, подобным тому, что показывают здесь:

shell> mysqldump options -uroot \    mysql host user db tables_priv columns_priv procs_priv proxies_priv > backup_file

Чтобы выполнить преобразование, Вы должны быть соединены с целевым узлом SQL, используя mysql клиент (снова, как MySQL root пользователь). Вызовите хранимую процедуру как это:

mysql> CALL
        mysql.mysql_cluster_move_privileges();Query OK, 0 rows affected (22.32 sec)

В зависимости от числа строк в таблицах полномочия эта процедура может занять время, чтобы выполниться. Если некоторые из таблиц полномочия пусты, нельзя видеть одни или более данных - нулевые строки выбранные, выбранные, или обработанные предупреждения когда mysql_cluster_move_privileges возвраты. В таких случаях могут быть безопасно проигнорированы предупреждения. Чтобы проверить, что преобразование было успешно, можно использовать сохраненную функцию mysql_cluster_privileges_are_distributed как показано здесь:

mysql> SELECT
        CONCAT(    ->    'Conversion ',     ->    IF(mysql.mysql_cluster_privileges_are_distributed(), 'succeeded', 'failed'),     ->    '.')     ->    AS Result;+-----------------------+| Result                |+-----------------------+| Conversion succeeded. |+-----------------------+1 row in set (0.00 sec)

mysql_cluster_privileges_are_distributed проверки на существование распределенных таблиц полномочия и возвраты 1 если все таблицы полномочия распределяются; иначе, это возвращается 0.

Можно проверить, что резервные копии были созданы, используя запрос, такой как этот:

mysql> SELECT TABLE_NAME, ENGINE FROM
        INFORMATION_SCHEMA.TABLES     ->     WHERE TABLE_SCHEMA =
        'mysql' AND TABLE_NAME LIKE '%backup'     ->     ORDER BY
        ENGINE;+-------------------------+------------+| TABLE_NAME              | ENGINE     |+-------------------------+------------+| host_backup             | MyISAM     || db_backup               | MyISAM     || columns_priv_backup     | MyISAM     || user_backup             | MyISAM     || tables_priv_backup      | MyISAM     || proxies_priv_backup     | MyISAM     || procs_priv_backup       | MyISAM     || ndb_user_backup         | ndbcluster || ndb_tables_priv_backup  | ndbcluster || ndb_proxies_priv_backup | ndbcluster || ndb_procs_priv_backup   | ndbcluster || ndb_host_backup         | ndbcluster || ndb_db_backup           | ndbcluster || ndb_columns_priv_backup | ndbcluster |+-------------------------+------------+14 rows in set (0.00 sec)

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

Все пользовательские полномочия MySQL распределяются через весь соединенный MySQL Servers. Это включает полномочия, связанные с представлениями и сохраненными подпрограммами. В то время как автоматическое распределение представлений и сохраненных подпрограмм в настоящий момент не поддерживается, можно попытаться распределить сохраненные подпрограммы, делая заявление такой как ALTER TABLE mysql.proc ENGINE = NDB, но следует проверить вручную, что любые таблицы, на которые ссылаются сохраненные подпрограммы, существуют на всех узлах SQL, так как у MySQL Cluster нет никакой поддержки в настоящее время выполнения этого автоматически. Нет в настоящий момент никакого способа распределить представления среди узлов SQL MySQL Cluster, кроме, создавая их вручную на каждом узле SQL. Если Вы делаете это, следует удостовериться, что все базовые таблицы, на которые ссылаются представления, используют NDB механизм хранения; иначе, представления, вероятно, отклонятся очень быстро.

Когда узел SQL становится разъединенным от кластера в то время как mysql_cluster_move_privileges работает, следует отбросить его таблицы полномочия после пересоединения с кластером, используя оператор такой как DROP TABLE IF EXISTS mysql.user mysql.db mysql.tables_priv mysql.columns_priv mysql.procs_priv. Это заставляет узел SQL использовать совместно используемые таблицы полномочия, а не его собственные локальные версии их. Это не необходимо, соединяя новый узел SQL с кластером впервые.

В случае начального перезапуска всего кластера (все узлы данных завершают работу, затем запускался снова с --initial), совместно используемые таблицы полномочия теряются. Если это происходит, можно восстановить их использующий исходный целевой узел SQL любой от резервных копий, сделанных mysql_cluster_move_privileges или от дампа файл создается с mysqldump. Если Вы должны использовать новый MySQL Server, чтобы выполнить восстановление, следует запустить его с --skip-grant-tables соединяясь с кластером впервые; после этого можно восстановить таблицы полномочия локально, затем распределить их снова использование mysql_cluster_move_privileges. После восстановления и распределения таблиц, следует перезапустить этот MySQL Server без --skip-grant-tables опция.

Можно также восстановить распределенные таблицы, используя ndb_restore --restore-privilege-tables от резервного копирования, сделанного, используя START BACKUP в ndb_mgm клиенте. ( MyISAM таблицы, составленные mysql_cluster_move_privileges не поддерживаются START BACKUP команда.) ndb_restore не восстанавливает таблицы полномочия по умолчанию; --restore-privilege-tables опция заставляет это делать так.

Важный

Приложения, что данные MySQL Cluster доступа непосредственно, включая API NDB и приложения ClusterJ, не подвергаются системе полномочия MySQL. Это означает, что, как только Вы распределили таблицы предоставления, к ним могут свободно получить доступ такие приложения, так же, как они могут любой другой NDB таблицы. В частности следует иметь в виду, что API NDB и приложения ClusterJ могут считать и записать имена пользователей, имена хоста, хэши пароля, и любое другое содержание распределенных таблиц предоставления без каких-либо ограничений.