이전에는 다음을 사용합니다.
USE dbname;
ALTER TABLE tablename ENGINE=MYISAM;
모든 테이블 이름을 하나씩 쓰지 않고 데이터베이스의 모든 테이블을 변환하는 간단한 방법을 찾고 있습니다.
이전에는 다음을 사용합니다.
USE dbname;
ALTER TABLE tablename ENGINE=MYISAM;
모든 테이블 이름을 하나씩 쓰지 않고 데이터베이스의 모든 테이블을 변환하는 간단한 방법을 찾고 있습니다.
답변:
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
MySQL을 사용하여 스크립트를 작성하고 실행할 수 있습니다.
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}
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;
첫 번째 행으로 두십시오 . 이렇게하면 먼저 슬레이브 만 변환 한 다음 나중에 마스터 만 변환하여 마스터 / 슬레이브 설정에서 변환을 테스트 할 수 있습니다.
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}
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}
시도 해봐 !!!
SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL,ALLOW_INVALID_DATES';
소스 - MySQL은 5.7 이후 NO_ZERO_DATE 바이 패스 어딘가에 stackoverflow.com/questions/9192027/...
SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL,ALLOW_INVALID_DATES';
소스 - MySQL은 5.7 이후 NO_ZERO_DATE 바이 패스 어딘가에 stackoverflow.com/questions/9192027/...
여전히이 문제가있는 사람들을 위해이 방법을 따라 할 수 있습니다. 웹 사이트 에서이 답변을 찾았습니다. 그것은 나를 많이 도와줍니다 :
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
자신의 값으로 업데이트 username
및 db_name
값.
스크립트를 실행하면 파일이 이름으로 저장됩니다. 파일을 alter.sql
열고 phpmyadmin
또는 mysql
명령 줄 에서 내용을 실행하십시오 .
건배!