SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 04.10.2010 11:18:02

cnyx
Участник
Зарегистрирован: 04.10.2010
Сообщений: 13

Переезд БД с Mysql v3.23.58 на v5.0.77 Collate + кодировки

Здравствуйте.
Попытаюсь подробно описать проблему.
Есть старый сервер с RH3 и mysql v 3.23, на сервере есть несколько баз данных, в некоторых из них есть довольно большие таблицы (25Гб). Особенность работы данного сервера заключается в том, что локаль сервака koi8r и база данных работает в этой же кодировке. Но сам mysql collate не поддерживает, он старый. Смотрю через phpmyadmin версии 2.3. Более свежие не ставятся, требуют более нового php.
Теперь имеем новый сервер с RH5 и mysql 5.0.77. Локаль этого сервера работает в utf8. Теперь задача переехать с одного сервера на другой и чтобы без проблем:
1. Не потерялись данные.
2. Работали старые php скрипты без допиливания.
3. Работали утилиты, запускаемые из консоли самого сервера без допиливания.
Переезд будет просто копированием файлов БД с одного сервера на другой. Полагаю, что  при этом крайне желательно остановить mysqld на обоих сервера, а после копирования стартануть снова. Также на новом сервере нужно указать
default-character-set=koi8r
Будет ли этого достаточно и правильно ли осущесвляется переезд?
Очень надеюсь на разъяснения данного вопроса, потому что голова уже пухнет.
з.ы.
На серверах раз в месяц запускается отчетность. В прошлый месяц я парился много, кучу чего переделал, пришлось в php указывать в запросах SET NAMES koi8r. Вроде все заработало и посчиталось. Но начал делать в этом месяце и начали вылезать косяки. Например, перестали работать некоторые консольные скрипты, начали ругаться на то, что нельзя в условиях сравнивать поля с разными collation. Я уже столько всего делал и по-уму и наобум, что запутался окончательно.

Неактивен

 

#2 04.10.2010 11:20:03

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Переезд БД с Mysql v3.23.58 на v5.0.77 Collate + кодировки

Неактивен

 

#3 04.10.2010 12:43:55

cnyx
Участник
Зарегистрирован: 04.10.2010
Сообщений: 13

Re: Переезд БД с Mysql v3.23.58 на v5.0.77 Collate + кодировки

Спасибо большое. Насчет правильного переезда вроде понятно. Попытаюсь придумать, какой метод лучше будет в моем случае. Вообще первый способ самый простой и легкореализуемый, но вот на новом сервере уже часть данных занесена после кривого переезда и если с бэкапа брать данные, то новые данные потеряются. Остаются другие 2.
Вот к примеру что быстрее обработает таблицу в 5Гб: конвертация в бинарный тип, а потом в koi8r или бэкап в дамп, редактирование/преобразование, загрузка данных из дампа? Сервер у меня не мегамощный и используется для работы. Занимать его надолго нельзя.

Неактивен

 

#4 04.10.2010 12:46:36

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Переезд БД с Mysql v3.23.58 на v5.0.77 Collate + кодировки

Но если вкратце — то да, для чтения данных этого должно быть достаточно.
Но надо понимать, что если клиент прийдет и скажет SET NAMES utf8 (99.9%
современных клиентов), MySQL начнет преобразовывать данные туда-обратно,
и ошибки с mixed collation очень даже возможны (попробуйте, например,
представить символ ́а в koi8 wink ).

Неактивен

 

#5 04.10.2010 12:49:06

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Переезд БД с Mysql v3.23.58 на v5.0.77 Collate + кодировки

Ух, пока писал — Вы меня обогнали smile

Подозреваю, что они будут работать со сравнимой скоростью. Наверное,
работа через дамп будет с Вашей точки зрения быстрее, т.к. во время
дампа табличка остается доступной на чтение, а во время ALTER — она
заблокирована. Но запись надо будет блокировать в любом случае, иначе
данные потеряете.

Неактивен

 

#6 04.10.2010 13:48:42

cnyx
Участник
Зарегистрирован: 04.10.2010
Сообщений: 13

Re: Переезд БД с Mysql v3.23.58 на v5.0.77 Collate + кодировки

paulus написал:

MySQL начнет преобразовывать данные туда-обратно,
и ошибки с mixed collation очень даже возможны (попробуйте, например,
представить символ ́а в koi8

Ну это очень врядли, что он придет smile Хотя тут как посмотреть. Есть php страница, в ней в заголовке явно указана кодировка koi8r. Т.о., как я понимаю, если пользователь введет данные, которые потом занесутся в таблицу, то они будут в кодировке koi8r? Или не обязательно и в php скрипте нужно обязательно "допиливать" SET NAMES koi8r? Файлов много, в которых допиливать придется.

paulus написал:

Но запись надо будет блокировать в любом случае, иначе
данные потеряете.

А можно ли в mysql именно запись как-то блокировать?
Еще загвоздка в том, что в начале месяца одну из таблиц обновляли с 3го сервера путем простого копирования, теперь же придется каждый раз делать дамп базы, конвертить его, очищать таблицу-преемник и загружать в нее данные дампа smile Это печально.

Неактивен

 

#7 04.10.2010 14:53:16

cnyx
Участник
Зарегистрирован: 04.10.2010
Сообщений: 13

Re: Переезд БД с Mysql v3.23.58 на v5.0.77 Collate + кодировки

А еще я думаю стоит ли все поля переводить в koi8r или только выборочно те поля, в которых могут быть русские символы? Дело в том, что в самых больших таблицах данные хранятся в латинице, если там и есть ошибочные данные на русском, то их 0.01%, которым можно пренебречь.

Неактивен

 

#8 04.10.2010 14:54:39

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Переезд БД с Mysql v3.23.58 на v5.0.77 Collate + кодировки

MySQL в качестве кодировки по умолчанию берет свой default-character-set.
Но у клиента умолчание может быть другое. Передает ли PHP кодировку — не
знаю. Скорее всего, нет.

Блокировать табличку проще всего так: LOCK TABLES tablename READ. При
этом, пока соединение живо, будет держаться блокировка над этой табличкой.

Ничего конвертить не надо. Если у сервера стоит правильная кодировка по
умолчанию, то для всех старыъ (т.е. те, в которых кодировка не прописана)
файлов он будет считать, что кодировка совпадает с его кодировкой по умолчанию.

Хотя, на третьем сервере тоже неплохо бы обновить ПО wink

Неактивен

 

#9 04.10.2010 14:55:59

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Переезд БД с Mysql v3.23.58 на v5.0.77 Collate + кодировки

А еще у Вас есть странная тенденция писать, пока я отвечаю wink

Преобразовывать ли одно поле или несколько — не имеет значения. Все
равно это будет запрос, который перелопачивает все данные.

Неактивен

 

#10 04.10.2010 15:27:52

cnyx
Участник
Зарегистрирован: 04.10.2010
Сообщений: 13

Re: Переезд БД с Mysql v3.23.58 на v5.0.77 Collate + кодировки

paulus написал:

Ничего конвертить не надо. Если у сервера стоит правильная кодировка по
умолчанию, то для всех старыъ (т.е. те, в которых кодировка не прописана)
файлов он будет считать, что кодировка совпадает с его кодировкой по умолчанию.

Хотя, на третьем сервере тоже неплохо бы обновить ПО wink

Хм, т.е. если я Вас правильно понимаю, то мне достаточно в my.cf установить дефолтную кодировку koi8r, остановить mysqld, переписать интересующие меня таблицы на сервер, запустить mysqld и он будет считать, что поля таблиц в koi8r?
Обновить то да, но нет. RedHat в этом плане консерватор. Свои srmp он выпускает только до определенных версий, выше которых их тупо нет. К примеру тот же mysql нативно именно RedHatовским апдейтом не апгрейднешь, а если делать вручную, то там столько зависимостей пакетов, что можно рехнуться. Оба этих сервера, 1й источник для 2го нового и 3й, с которого берется 1 табличка очень старые, работают для авторизаций и следуя главному правилу админа "работает? не трогай" трудятся себе потихоньку. Но вот 1й сервак-источник получилось обновить на чуть более производительное железо, потому и ОС поставили более новую.

paulus написал:

А еще у Вас есть странная тенденция писать, пока я отвечаю wink

Преобразовывать ли одно поле или несколько — не имеет значения. Все
равно это будет запрос, который перелопачивает все данные.

Да нет вроде smile
Ну за 1 раз преобразуется 1 поле таблицы. Причем это поле надо преобразовать 2 раза: 1й раз в бинарную версию, а потом уже в нужную кодировку. Причем массово запрос на изменение не сделаешь, так как длина поля у всех полей разная smile

Неактивен

 

#11 04.10.2010 17:18:17

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Переезд БД с Mysql v3.23.58 на v5.0.77 Collate + кодировки

Честно говоря, не понял, что Вас смущает.
ALTER TABLE tablename MODIFY a BINARY(100), MODIFY b VARBINARY(19);

Неактивен

 

#12 05.10.2010 09:01:39

cnyx
Участник
Зарегистрирован: 04.10.2010
Сообщений: 13

Re: Переезд БД с Mysql v3.23.58 на v5.0.77 Collate + кодировки

А, ну да smile Что-то затормозил. Спасибо, многое стало понятно. Вот что значит не администратор БД, а так, "поковыряться".

Неактивен

 

#13 06.10.2010 09:30:48

cnyx
Участник
Зарегистрирован: 04.10.2010
Сообщений: 13

Re: Переезд БД с Mysql v3.23.58 на v5.0.77 Collate + кодировки

Оказалось, что некоторые поля в таблице коллега перевел в utf8 и данные в utf8 перезанес. Но теперь такая ситуация. Когда базу в php коннекчу, то сразу задаю SET NAMES koi8r. И теперь при обращении к таблицам с utf8 выводятся кракозябры. Если делать SET NAMES utf8, то при запросах к таблицам с данными в koi8r тоже выводятся кракозябры smile. Можно ли utf8 перевести в koi8r без потери данных простым изменением collation'а?

Неактивен

 

#14 06.10.2010 18:51:12

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Переезд БД с Mysql v3.23.58 на v5.0.77 Collate + кодировки

utf8 в koi8r без потерь перевести нельзя, так как всегда есть шанс, что встретится
символ, который не представим в последней кодировке.

А коллега, который перезанес, — он их в правильной кодировке перезанес?

Неактивен

 

#15 07.10.2010 09:00:57

cnyx
Участник
Зарегистрирован: 04.10.2010
Сообщений: 13

Re: Переезд БД с Mysql v3.23.58 на v5.0.77 Collate + кодировки

Да, он сделал collation utf8 и данные там в utf8. Ну ладно, там в принципе таблички не большие, можно вручную данные перенести через sql-запросы, а не конвертацию.

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson