Re: [Sysadmins] Кодировка при переходе с mysql 4 на mysql5 (кто шарит в sql?)

2008-08-08 Пенетрантность Aleksey E. Birukov

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

2008-08-07 Пенетрантность Nikolay A. Fetisov
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

2008-08-07 Пенетрантность Aleksey E. Birukov

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

2008-08-07 Пенетрантность Aleksey E. Birukov

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

2008-08-07 Пенетрантность Nikolay A. Fetisov
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

2008-08-07 Пенетрантность Aleksey E. Birukov

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

2008-08-07 Пенетрантность Aleksey E. Birukov

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

2008-08-07 Пенетрантность 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


Если вылезают ошибки:
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