Более простой способ преобразовать все таблицы от InnoDB до MyISAM

Сделайте следующий (промежуточный период) 1) Обновление, Ваши драйверы NIC 2) Смотрят в системном журнале для отслеживания любых проблем.

Сообщение Получает брандмауэр, там не являются очень дорогими. Взгляните на netscreen или draytek. Это не хорошая идея иметь Ваше интернет-направление сервера, если Вы не выполняете что-то как сервер ISA.

13
задан 10 March 2011 в 17:56
4 ответа

Я не знаю ни о каком способе сделать, это в самом 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
11
ответ дан 2 December 2019 в 21:25

Можно использовать 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}

Дайте ему Попытку!!!

7
ответ дан 2 December 2019 в 21:25

Я предпочитаю однострочники для такого рода вещей. Это однострочная версия наиболее распространенного ответа.

Это работает, если ваше имя пользователя и пароль 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
-1
ответ дан 2 December 2019 в 21:25

Для тех, у кого все еще есть эта проблема, вы можете последовать этому пути, я нашел этот ответ на сайте. Это мне очень помогает:

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'". | хвост -n+2 >> alter.sql

Обновите значения имя пользователя и db_name своими значениями.

При выполнении скрипта будет сохранен файл под именем: alter.sql. Откройте файл и выполните содержимое в командной строке phpmyadmin или mysql.

Cheers!

.
0
ответ дан 2 December 2019 в 21:25

Теги

Похожие вопросы