Re: [Sysadmins] Кодировка при переходе с mysql 4 на mysql5 (кто шарит в sql?)
Aleksey E. Birukov пишет: Aleksey E. Birukov пишет: Есть файлы базы из /var/lib/mysql/db/host1248. База создавалась на mysql версии 4. Соответственно на версии 5. Проблема с кодировкой. Как можно ее решить? На одном сервере я добавлял init-connect='SET NAMES cp1251' в my.cnf а потом заливал дамп, сделанный на 4-ой версии. Есть ли более оптимальный способ? mysqldump --add-drop-table -uhost1420 -p host1420|sed 's/CHARSET=utf8/CHARSET=cp1251/'|sed 's/SET NAMES utf8/SET NAMES cp1251/'|mysql -utest -p test А можно ли воплотить это не с текстовым файлом базы, а непосредственно sql командами? Да еще, чтобы mysql не умничал, пытаясь перекодировать самостоятельно. ___ Sysadmins mailing list Sysadmins@lists.altlinux.org https://lists.altlinux.org/mailman/listinfo/sysadmins
Re: [Sysadmins] Кодировка при переходе с mysql 4 на mysql5
On Thu, 07 Aug 2008 19:45:02 +0400 Aleksey E. Birukov wrote: Есть файлы базы из /var/lib/mysql/db/host1248. База создавалась на mysql версии 4. Соответственно на версии 5. Проблема с кодировкой. Как можно ее решить? Как обычно - понять, в чём проблема, и что нужно получить. Далее определиться с нужными шагами. В общем случае, надо получать dump надо в той же кодировке (неправильной!), которая указана в базе. Иначе умный MySQL будет выполнять неизвестно какие преобразования с непонятными последствиями. Затем в полученном dump'е надо переправить _записи_ о кодировке таблиц на правильные. Указать в заголовке dump'а правильный SET NAMES, и залить всё обратно. В частных случаях может потребоваться ещё править записи внутри dump'а, если там вдруг окажутся недопустимые для кодировки символы. Я попробовал на 5-ой версии дамп сделать -- ошибка: mysqldump: Error 1194: Table 'sml_stat_hosts' is marked as crashed and should be repaired when dumping table `sml_stat_hosts` at row: 1746290 Оно даже говорит, что надо сделать. $ echo repair table sml_stat_hosts extended; | \ mysql -u root -p host1248 Причем я пробовал эту таблицу починить через phpMyAdmin А здесь может быть столько всего разного... Начиная, например, от ограничений на время выполнения скрипта. -- С уважением, Николай Фетисов ___ Sysadmins mailing list Sysadmins@lists.altlinux.org https://lists.altlinux.org/mailman/listinfo/sysadmins
Re: [Sysadmins] Кодировка при переходе с mysql 4 на mysql5
Nikolay A. Fetisov пишет: А можно ли где сейчас найти 64bit-ную версию 4-ой MySQL? ___ Sysadmins mailing list Sysadmins@lists.altlinux.org https://lists.altlinux.org/mailman/listinfo/sysadmins
Re: [Sysadmins] Кодировка при переходе с mysql 4 на mysql5
Nikolay A. Fetisov пишет: Как обычно - понять, в чём проблема, и что нужно получить. Далее определиться с нужными шагами. В общем случае, надо получать dump надо в той же кодировке (неправильной!), которая указана в базе. Иначе умный MySQL будет выполнять неизвестно какие преобразования с непонятными последствиями. Затем в полученном dump'е надо переправить _записи_ о кодировке таблиц на правильные. Указать в заголовке dump'а правильный SET NAMES, и залить всё обратно. В частных случаях может потребоваться ещё править записи внутри dump'а, если там вдруг окажутся недопустимые для кодировки символы. Я посмотрел на сервере, на котором я уже проделывал эту операцию. Вот строки, которые относятся к кодировкам из дампа работающей базы. /*!40101 SET NAMES utf8 */; SET character_set_client = utf8; ) ENGINE=MyISAM AUTO_INCREMENT=2032 DEFAULT CHARSET=cp1251; То есть единственное, что мне нужно переправить это ) ENGINE=MyISAM AUTO_INCREMENT=2032 DEFAULT CHARSET=utf8; на ) ENGINE=MyISAM AUTO_INCREMENT=2032 DEFAULT CHARSET=cp1251; Можно ли это сделать sql запросом, чтобы дампы не делать? ___ Sysadmins mailing list Sysadmins@lists.altlinux.org https://lists.altlinux.org/mailman/listinfo/sysadmins
Re: [Sysadmins] Кодировка при переходе с mysql 4 на mysql5
On Thu, 07 Aug 2008 21:13:39 +0400 Aleksey E. Birukov wrote: А можно ли где сейчас найти 64bit-ную версию 4-ой MySQL? Под ALT? Насколько я понимаю, её и не было. Разверните контейнер с 32-битной системой. Получится проще и быстрее. -- С уважением, Николай Фетисов ___ Sysadmins mailing list Sysadmins@lists.altlinux.org https://lists.altlinux.org/mailman/listinfo/sysadmins
Re: [Sysadmins] Кодировка при переходе с mysql 4 на mysql5
Nikolay A. Fetisov пишет: On Thu, 07 Aug 2008 21:13:39 +0400 Aleksey E. Birukov wrote: А можно ли где сейчас найти 64bit-ную версию 4-ой MySQL? Под ALT? Насколько я понимаю, её и не было. Разверните контейнер с 32-битной системой. Получится проще и быстрее. В быстродействии потеряю. Здесь это важно. Нашел здесь ftp://ftp.altlinux.ru/pub/distributions/archive/Sisyphus/2006/02/01/x86_64/RPMS.classic/ Оставил на всякий случай. Вроде, начало получаться с дампами (кодировка верная). Остановился на заливании базы из дампа. Естественно, ошибки. ERROR 1067 (42000) at line 608: Invalid default value for 'lang' Что такого криминального в строке `lang` char(1) NOT NULL default 'eng', ? ___ Sysadmins mailing list Sysadmins@lists.altlinux.org https://lists.altlinux.org/mailman/listinfo/sysadmins
Re: [Sysadmins] Кодировка при переходе с mysql 4 на mysql5
Aleksey E. Birukov пишет: Вроде, начало получаться с дампами (кодировка верная). Остановился на заливании базы из дампа. Естественно, ошибки. ERROR 1067 (42000) at line 608: Invalid default value for 'lang' Что такого криминального в строке `lang` char(1) NOT NULL default 'eng', ? char(3) ___ Sysadmins mailing list Sysadmins@lists.altlinux.org https://lists.altlinux.org/mailman/listinfo/sysadmins
Re: [Sysadmins] Кодировка при переходе с mysql 4 на mysql5
Aleksey E. Birukov пишет: Есть файлы базы из /var/lib/mysql/db/host1248. База создавалась на mysql версии 4. Соответственно на версии 5. Проблема с кодировкой. Как можно ее решить? На одном сервере я добавлял init-connect='SET NAMES cp1251' в my.cnf а потом заливал дамп, сделанный на 4-ой версии. Есть ли более оптимальный способ? mysqldump --add-drop-table -uhost1420 -p host1420|sed 's/CHARSET=utf8/CHARSET=cp1251/'|sed 's/SET NAMES utf8/SET NAMES cp1251/'|mysql -utest -p test Если вылезают ошибки: ERROR 1067 (42000) at line 608: Invalid default value for 'lang' mysqldump: Got errno 32 on write Разыскиваем их вот так: # mysqldump --add-drop-table -uhost1420 -p host1420|sed '608q;d' и решаем по обстоятельствам. Такое решается через |OPTIMIZE TABLЕ| (можно через phpMyAdmin) mysqldump: Error 1194: Table 'sml_stat_hosts' is marked as crashed and should be repaired when dumping table `sml_stat_hosts` at row: 1746290 Может вылезти и такое. База больше 2Гб -- может поэтому. Как решать не разбирался. mysqldump: Error 2013: Lost connection to MySQL server during query when dumping table `sml_stat_hosts` at row: 9537 Вроде все получилось. Ужас, конечно :) ___ Sysadmins mailing list Sysadmins@lists.altlinux.org https://lists.altlinux.org/mailman/listinfo/sysadmins