모든 테이블을 InnoDB에서 MyISAM으로 변환하는 간단한 방법


13

이전에는 다음을 사용합니다.

USE dbname;
ALTER TABLE tablename ENGINE=MYISAM;

모든 테이블 이름을 하나씩 쓰지 않고 데이터베이스의 모든 테이블을 변환하는 간단한 방법을 찾고 있습니다.


1
더 간단한 방법? 그것은 나에게 매우 단순 해 보인다.
Zoredache

5
스크립팅을 사용하여 목표를 달성하는 방법을 배웁니다.
Tom O'Connor

답변:


11

mysql 자체 에서이 작업을 수행하는 방법을 모르지만 간단한 쉘 스크립트가 작업을 수행합니다.

TABLES=$(mysql -pXXXXXXX -uXXXXXXX --skip-column-names -B -D $DB -e 'show tables')
for T in $TABLES
do
    mysql -pXXXXX -uXXXXX -D $DB -e "ALTER TABLE $T ENGINE=MYISAM"
done

1
외래 키 검사를 비활성화하는 방법?
realtebo 2016 년

7

MySQL을 사용하여 스크립트를 작성하고 실행할 수 있습니다.

데이터베이스의 모든 InnoDB 테이블 dbname을 MyISAM으로 변환합니다.

CONVERT_SCRIPT=Convert_dbname_InnoDB_to_MyISAM.sql
mysql -u... -p... -AN -e"SELECT CONCAT('ALTER TABLE ',table_schema,'.',table_name,' ENGINE=MyISAM;') FROM information_schema.tables WHERE table_schema='dbname' AND engine='InnoDB';" > ${CONVERT_SCRIPT}
mysql -u... -p... -A < ${CONVERT_SCRIPT}

모든 InnoDB 테이블을 MyISAM으로 변환합니다

CONVERT_SCRIPT=Convert_InnoDB_to_MyISAM.sql
mysql -u... -p... -AN -e"SELECT CONCAT('ALTER TABLE ',table_schema,'.',table_name,' ENGINE=MyISAM;') FROM information_schema.tables WHERE engine ='InnoDB';" > ${CONVERT_SCRIPT}
mysql -u... -p... -A < ${CONVERT_SCRIPT}

테이블 변환을 슬레이브로 복제하지 않으려면 SET SQL_LOG_BIN=0;첫 번째 행으로 두십시오 . 이렇게하면 먼저 슬레이브 만 변환 한 다음 나중에 마스터 만 변환하여 마스터 / 슬레이브 설정에서 변환을 테스트 할 수 있습니다.

데이터베이스의 모든 InnoDB 테이블 dbname을 MyISAM으로 변환 하고 다른 서버로 복제하지 않습니다.

CONVERT_SCRIPT=Convert_dbname_InnoDB_to_MyISAM.sql
echo "SET SQL_LOG_BIN=0;" > ${CONVERT_SCRIPT}
mysql -u... -p... -AN -e"SELECT CONCAT('ALTER TABLE ',table_schema,'.',table_name,' ENGINE=MyISAM;') FROM information_schema.tables WHERE table_schema='dbname' AND engine='InnoDB';" >> ${CONVERT_SCRIPT}
mysql -u... -p... -A < ${CONVERT_SCRIPT}

모든 InnoDB 테이블을 MyISAM으로 변환하고 다른 서버로 복제하지 않습니다.

CONVERT_SCRIPT=Convert_InnoDB_to_MyISAM.sql
echo "SET SQL_LOG_BIN=0;" > ${CONVERT_SCRIPT}
mysql -u... -p... -AN -e"SELECT CONCAT('ALTER TABLE ',table_schema,'.',table_name,' ENGINE=MyISAM;') FROM information_schema.tables WHERE engine ='InnoDB';" >> ${CONVERT_SCRIPT}
mysql -u... -p... -A < ${CONVERT_SCRIPT}

시도 해봐 !!!


당신은 아마 할 것입니다 현실 세계에서 MyIsam2InnoDB에서가는 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL,ALLOW_INVALID_DATES'; 소스 - MySQL은 5.7 이후 NO_ZERO_DATE 바이 패스 어딘가에 stackoverflow.com/questions/9192027/...
안토니 깁스

당신은 아마 할 것입니다 현실 세계에서 MyIsam2InnoDB에서가는 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL,ALLOW_INVALID_DATES'; 소스 - MySQL은 5.7 이후 NO_ZERO_DATE 바이 패스 어딘가에 stackoverflow.com/questions/9192027/...
안토니 깁스

0

여전히이 문제가있는 사람들을 위해이 방법을 따라 할 수 있습니다. 웹 사이트 에서이 답변을 찾았습니다. 그것은 나를 많이 도와줍니다 :

shell> mysql -u username -p -e "SELECT concat('ALTER TABLE ', TABLE_NAME,' ENGINE=MYISAM;') FROM Information_schema.TABLES WHERE TABLE_SCHEMA = 'db_name' AND ENGINE = 'InnoDB' AND TABLE_TYPE = 'BASE TABLE'" | tail -n+2 >> alter.sql

자신의 값으로 업데이트 usernamedb_name값.

스크립트를 실행하면 파일이 이름으로 저장됩니다. 파일을 alter.sql 열고 phpmyadmin또는 mysql명령 줄 에서 내용을 실행하십시오 .

건배!


-1

나는 이런 종류의 물건에 대해 하나의 라이너를 선호합니다. 가장 많이 사용되는 답변의 한 줄짜리 버전입니다.

MySQL 사용자 이름과 비밀번호가에 설정되어 있으면 작동합니다 ~/.my.cnf.

D=your_db; for t in $(mysql $D -B -e 'SHOW TABLES'); do mysql $D -e "ALTER TABLE $t ENGINE=MyISAM"; done
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.