Перенос данных из MySQL 4.0 в 4.1.x через mysqldump от нового MySQL |
[исправить] |
Итак, ситуация:
- новый db-сервер, с mysql 4.1.7
- необходимость проапгрейдить клиентскую библиотеку на тех серверах которые к нему будут обращаться.
- необходимость миграции данных с других mysql, которые 4.0
- базы все в cp1251
В качестве эксперимента апгрейдим mysql-client до 4.1.7 на первом db-сервере,
где стоит 4.0.20 и отпадание mysql-client'а на, пусть даже час, ни к чему
фатальному не приведет...
На первый взгляд все гладко заапгрейдилось.
Вечером апгрейдим Mysql-client где надо, чего надо пересобираем... пока все гладко.
Начинаем миграцию данных, с того сервера где мы обновили Mysql-client в первую очередь.
Маленькая ремарка: mysql-(client|server) были собраны из портов с
WITH_LINUXTHREADS=yes
BUILD_STATIC=yes
BUILD_OPTIMIZED=yes
, т.е. с чарсетами по-умолчанию
- делаем дамп командой mysqldump --opt database > database.sql
- копируем дамп на новый сервер
- там в /etc/my.cnf уже прописано в [mysqld] default-character-set=cp1251.
- говорим create database db_name
- потом \. database.sql
- дамп разворачивается, но... с матами на дублирование ключа и с вопросиками в место русских буковок.
- пробуем set names cp1251 и снова развернуть дамп - та же история.
Потом пол-дня пробуем всякие разные комбинации с пересборкой mysql-server и всякими
настройками charset/collation, в результате удосуживаемся присмотреться к дампу
и увидеть там 'SET NAMES utf8' в самом начале. После замены оного на 'set names cp1251',
все встало на свои места.
Этот "set names utf8" появился когда новый mysqldump из mysql-client-4.1.7 взялся дампить
базу с cp1251 и, не получив информацию о collation/charset выставил то, что считал разумным - utf8.
Лечится созданием дампа с --skip-set-charset.
|
|
|
|
Раздел: Корень / Программисту и web-разработчику / SQL и базы данных / MySQL специфика / Оптимизация и администрирование MySQL |
1, Vasiok (?), 17:14, 20/01/2005 [ответить]
| +/– |
Н-да. А достаточно лишь собрать клиентскую либу с указанием дефолтного чарсета. | |
2, mdv (?), 18:03, 20/01/2005 [ответить]
| +/– |
Есть такое, но когда разобрались было уже поздно ;) дв и не все собирают с указанием чарсета. в общем знания полученные в решении проблемы - полезны в любом случае ;) | |
3, vasiok (?), 23:36, 21/01/2005 [ответить]
| +/– |
Да штука в том, что если у вас уже есть куча кода, которая работает с этим мускулем, то либу-то таким образом пересобрать всё равно придётся, дабы потом set names не делать после каждого коннекта к базе. Это хорошо, если код написан так, как он должен быть написан и исправление нужно будет внести лишь в одном месте. Но, как показывает практика, это обычно не так. :-) | |
4, azimut (?), 14:15, 20/04/2008 [ответить]
| +/– |
Молодца. А теперь вдупли что писать надо было default_character_set, а не default-character-set как ты..
| |
|