DROP PROCEDURE IF EXISTS upgd_alter_all_tables_for_all_databases_to_innodb;
DELIMITER //
CREATE PROCEDURE `upgd_alter_all_tables_for_all_databases_to_innodb` ()
BEGIN
DECLARE __st_FETCH_STATUS INT;
DECLARE `schemaName` VARCHAR(192);
DECLARE `tableName` VARCHAR(192);
DECLARE `curIX` CURSOR FOR
SELECT `TABLE_SCHEMA` , `TABLE_NAME`
FROM information_schema.TABLES
WHERE `TABLE_SCHEMA` NOT IN ('mysql', 'performance_schema', 'sys') AND TABLE_TYPE = 'BASE TABLE';
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET __st_FETCH_STATUS = 1;
OPEN `curIX`;
SET `__st_FETCH_STATUS` = 0; FETCH `curIX` INTO `schemaName`, `tableName`;
while1 : WHILE (0 = 0 AND __st_FETCH_STATUS = 0 ) DO
SET @`strSQL` = CONCAT( 'ALTER TABLE `' , `schemaName`, '`.`',`tableName`, '` ENGINE=''InnoDB'';' );
PREPARE stmt1 FROM @`strSQL`;
EXECUTE stmt1;
DEALLOCATE PREPARE stmt1;
SET `__st_FETCH_STATUS` = 0; FETCH `curIX` INTO `schemaName`, `tableName`;
END WHILE;
CLOSE `curIX`;
END
//
DELIMITER ;
SET GLOBAL innodb_file_per_table = 1;
CALL upgd_alter_all_tables_for_all_databases_to_innodb();
DROP PROCEDURE IF EXISTS upgd_alter_all_tables_for_all_databases_to_innodb;
DROP PROCEDURE IF EXISTS upgd_alter_all_tables_for_all_databases_to_innodb;
DELIMITER //
CREATE PROCEDURE `upgd_alter_all_tables_for_all_databases_to_innodb` ()
BEGIN
DECLARE __st_FETCH_STATUS INT;
DECLARE `schemaName` VARCHAR(192);
DECLARE `tableName` VARCHAR(192);
DECLARE `curIX` CURSOR FOR
SELECT `TABLE_SCHEMA` , `TABLE_NAME`
FROM information_schema.TABLES
WHERE `TABLE_SCHEMA` NOT IN ('mysql', 'performance_schema', 'sys') AND TABLE_TYPE = 'BASE TABLE';
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET __st_FETCH_STATUS = 1;
OPEN `curIX`;
SET `__st_FETCH_STATUS` = 0; FETCH `curIX` INTO `schemaName`, `tableName`;
while1 : WHILE (0 = 0 AND __st_FETCH_STATUS = 0 ) DO
SET @`strSQL` = CONCAT( 'ALTER TABLE `' , `schemaName`, '`.`',`tableName`, '` ENGINE=''InnoDB'';' );
PREPARE stmt1 FROM @`strSQL`;
EXECUTE stmt1;
DEALLOCATE PREPARE stmt1;
SET @`strSQL` = CONCAT( 'ALTER TABLE `' , `schemaName`, '`.`',`tableName`, '` TABLESPACE = innodb_file_per_table;' );
PREPARE stmt2 FROM @`strSQL`;
EXECUTE stmt2;
DEALLOCATE PREPARE stmt2;
SET `__st_FETCH_STATUS` = 0; FETCH `curIX` INTO `schemaName`, `tableName`;
END WHILE;
CLOSE `curIX`;
END
//
DELIMITER ;
SET GLOBAL innodb_file_per_table = 1;
CALL upgd_alter_all_tables_for_all_databases_to_innodb();
DROP PROCEDURE IF EXISTS upgd_alter_all_tables_for_all_databases_to_innodb;
스크립트 실행을 중지하면 안 됩니다.
DBMS 오류가 발생하지 않았지만 스크립트 실행을 종료한 경우 스크립트를 다시 실행하거나 이 절차의 단계 수행을 멈춘 다음, DBMS 서비스를 다시 시작하고 백업에서 중앙 관리 서버 데이터를 복원합니다.