18.5.14 MySQL Cluster 배포 된 MySQL 권한
MySQL Cluster는 MySQL Cluster 내의 모든 SQL 노드 사이의 MySQL 사용자 및 권한의 배포를 지원하고 있습니다. 이 지원은 기본적으로 비활성화되어 있습니다. 활성화하려면이 섹션에 요약 된 절차에 따르도록하십시오.
일반적으로 mysql
데이터베이스의 각 MySQL 서버의 사용자 권한 테이블에서 MyISAM
스토리지 엔진이 사용되어 있어야합니다. 즉, SQL 노드에서 생성 된 사용자 계정 및 연관된 권한은 클러스터의 다른 SQL 노드에서 사용할 수 없습니다. SQL 파일 ndb_dist_priv.sql
은 MySQL Cluster NDB 7.3 이후의 배포로 볼 수 있습니다. 이 파일은 MySQL 설치 디렉토리의 share
디렉토리에서 찾을 수 있습니다.
배포 된 권한을 사용하는 첫 번째 단계는이 스크립트를 SQL 노드 역할을하는 MySQL 서버 (이것은 대상 SQL 노드 또는 MySQL 서버라고합니다)에로드하는 것입니다. 이것은 대상 SQL 노드에서 그 MySQL 설치 디렉토리로 이동 한 후 시스템 셸에서 다음 명령을 실행하여 수행 할 수 있습니다 (여기서 options
는이 SQL 노드에 연결하는 데 필요한 임의의 추가 옵션을 나타냅니다).
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_cluster_move_privileges
는 2 단계에서 백업 및 변환을 실행합니다. 첫 번째 단계는 mysql_cluster_backup_privileges
를 호출하는 것으로, 이렇게하면 mysql
데이터베이스에 2 세트의 복사본이 생성됩니다.
MyISAM
스토리지 엔진을 사용하는 로컬 복사본 세트. 이 이름은 원래 권한 테이블 이름에_backup
라는 접미사를 추가하여 생성됩니다.NDBCLUSTER
스토리지 엔진을 사용하는 배포 된 사본 세트. 이 테이블은 원래 테이블 이름 앞에ndb_
을 붙이고_backup
를 추가하여 이름을 붙일 수 있습니다.
카피가 작성되면 mysql_cluster_move_privileges
하여 mysql 시스템 테이블을 NDB
로 변환하는 ALTER TABLE ... ENGINE = NDB
문을 포함 mysql_cluster_move_grant_tables
가 호출됩니다.
일반적으로 mysql_cluster_backup_privileges
또는 mysql_cluster_move_grant_tables
를 수동으로 호출해서는 없습니다. 이러한 저장 프로시 저는 mysql_cluster_move_privileges
의해 사용되는 목적으로 만 제공되고 있습니다.
원래 권한 테이블이 자동으로 백업되지만 영향을받는 모든 SQL 노드의 기존 권한 테이블의 백업을 수동으로 작성하고 계속하는 것은 항상 적절한 방법입니다. 이것은 다음 것과 유사한 방법으로 mysqldump를 사용하여 실행할 수 있습니다.
shell> mysqldumpoptions
-uroot \ mysql user db tables_priv columns_priv procs_priv proxies_priv >backup_file
변환을 실행하려면 mysql 클라이언트를 (다시 MySQL root
사용자로) 사용하여 대상 SQL 노드에 연결해야합니다. 다음과 같이 저장 프로 시저를 호출합니다.
mysql> CALL mysql.mysql_cluster_move_privileges();
Query OK, 0 rows affected (22.32 sec)
이 프로 시저의 실행에는 권한 테이블의 행 수에 따라 어느 정도의 시간이 걸릴 수 있습니다. 권한 테이블의 일부가 비어있는 경우는 하나 이상의 No data - zero rows fetched, selected, or processed 경고가 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)
배포 된 권한에 변환이 실행되면 임의의 SQL 노드에서 MySQL 사용자 계정 생성, 삭제, 그 권한의 갱신 될 때마다 클러스터에 연결되어있는 다른 모든 MySQL 서버에서 변경 사항이 즉시 적용됩니다. 권한이 배포되면 새로 클러스터에 연결하는 모든 MySQL 서버가 자동으로 배포에 참여합니다.
mysql_cluster_move_privileges
가 실행 된 시점에서 SQL 노드에 클라이언트가 연결되어있는 경우에는 이러한 클라이언트가 권한 변경을 확인할 수 있도록 해당 SQL 노드에서 FLUSH PRIVILEGES
를 실행하거나 클라이언트를 끊고 다시 연결해야 할 수 있습니다.
모든 MySQL 사용자 권한은 연결되어있는 모든 MySQL 서버에 배포됩니다. 여기에는보기 및 저장 루틴과 연관된 모든 권한도 포함됩니다. 그러나보기 및 스토어드 루틴 자체의 배포는 현재 지원되지 않습니다.
mysql_cluster_move_privileges
의 실행 중에 SQL 노드가 클러스터에서 분리되는 경우 클러스터에 다시 연결 한 후, DROP TABLE IF EXISTS mysql.user mysql.db mysql.tables_priv mysql.columns_priv mysql.procs_priv
같은 문을 사용 하여 그 권한 테이블을 삭제해야합니다. 이렇게하면 SQL 노드는 자신의 로컬 버전의 권한 테이블이 아니라 공유 권한 테이블을 사용합니다. 이것은 새로운 SQL 노드를 처음 클러스터에 연결할 때 필요하지 않습니다.
전체 클러스터의 초기 재부팅이 이루어집니다 (모든 데이터 노드가 종료 된 후 --initial
으로 다시 시작되는)과 공유 권한 테이블이 손실됩니다. 이것이 발생한 경우 mysql_cluster_move_privileges
의해 생성 된 백업에서 또는 mysqldump를 사용하여 생성 된 덤프 파일에서 원래 대상 SQL 노드를 사용하여 그들을 복원 할 수 있습니다. 새로운 MySQL 서버를 사용하여 복원을 수행 할 필요가있는 경우는 처음 클러스터에 연결할 때 --skip-grant-tables
으로 시작하십시오. 그 이후에는 권한 테이블을 로컬에서 복원 한 후 다시 mysql_cluster_move_privileges
를 사용하여 그들을 배포 할 수 있습니다. 테이블을 복원하여 배포 한 후에는 --skip-grant-tables
옵션을 붙이지 않고,이 MySQL 서버를 다시 시작하십시오.
ndb_mgm 클라이언트에서 START BACKUP
을 사용하여 만든 백업에서 ndb_restore --restore-privilege-tables
를 사용하여 배포 된 테이블을 복원 할 수 있습니다. ( mysql_cluster_move_privileges
에서 만든 MyISAM
테이블은 START BACKUP
명령으로 백업되지 않습니다.) ndb_restore는 기본적으로 권한 테이블을 복원하지 않습니다. --restore-privilege-tables
옵션을 사용하면이 작업을 수행 할 수 있습니다.
2 개의 프로 시저 중 하나를 사용하면 SQL 노드의 로컬 권한을 복원 할 수 있습니다. mysql_cluster_restore_privileges
는 다음과 같이 작동합니다.
mysql.ndb_*_backup
테이블의 복사본을 사용할 수있는 경우 이들로부터 시스템 테이블의 복원을 시도합니다.그렇지 않으면 (
ndb_
프리픽스가 지정되지 않은)*_backup
라는 로컬 백업에서 시스템 테이블의 복원을 시도합니다.
또 다른 mysql_cluster_restore_local_privileges
라는 프로시 저는 ndb_*
백업을 확인하지 않고 로컬 백업에서만 시스템 테이블을 복원합니다.
mysql_cluster_restore_privileges
또는 mysql_cluster_restore_local_privileges
에서 다시 만든 시스템 테이블은 MySQL 서버의 기본 스토리지 엔진이 사용됩니다. 또한 그들은 어떤 방법으로도 공유도 무상으로 행해지 지 않고, MySQL Cluster의 NDB
스토리지 에이지 엔진이 사용되지 않습니다.
추가 저장 프로 시저 mysql_cluster_restore_privileges_from_local
은 mysql_cluster_restore_privileges
및 mysql_cluster_restore_local_privileges
에서 사용되기 위하여 제공되고 있습니다. 직접 호출해서는 없습니다.
NDB API와 ClusterJ 응용 프로그램을 포함 MySQL Cluster 데이터에 직접 액세스하는 응용 프로그램은 MySQL 권한 시스템이 적용되지 않습니다. 즉, 부여 테이블을 배포하면 다른 NDB
테이블의 경우와 마찬가지로, 이러한 응용 프로그램에서 그들에 자유롭게 접근 할 수 있습니다. 특히 NDB API 및 ClusterJ 응용 프로그램은 제약없이 사용자 이름, 호스트 이름, 암호 해시 및 배포 된 부여 테이블의 다른 내용의 읽기와 쓰기를 할 수있는 점에 유의하십시오.