Задавайте вопросы, мы ответим
Вы не зашли.
В общем осуществил перенос БД с с сервера с MySQL 4.х ветки на 5.х
Работаю через phpmyadmin все норм, ну то есть содержание в табличках текста и т.п. все идеально работает , НО:
Стоит нажать на вкладку привелегии и вылазиет ошибка с кодировкой
SQL-запрос: ( SELECT DISTINCT `User` , `Host` FROM `mysql`.`user` ) UNION ( SELECT DISTINCT `User` , `Host` FROM `mysql`.`db` ) UNION ( SELECT DISTINCT `User` , `Host` FROM `mysql`.`tables_priv` ) UNION ( SELECT DISTINCT `User` , `Host` FROM `mysql`.`columns_priv` ) ORDER BY `User` ASC , `Host` ASC Ответ MySQL: Документация #22 - Character set '#17' is not a compiled character set and is not specified in the '/usr/share/mysql/charsets/Index.xml' file
Ну в старой версии Mysql в файле /usr/share/mysql/charsets/Index.xml под строчкой 17 содержиться кодировка win1251 (в MySQL 5 это cp1251).
Я отредоктировал соот /etc/my.cnf , чтоб он воспринимал win1251 а так же даже перенес папку charsets со старого сервака на новый (предварительно нативную папку конечно же сохранив smile.gif )
Может быть проблема еще и в том что файлы кодировок для MySQL 4 имеют вид win1251.conf
а вот для MySQL5 cp1251.xml
Вообще как из этой проблемы выйти?
Неактивен
В сервере 4.0 есть две кодировки — win1251 и cp1251 (да, разные). Первая была признана устаревшей
и была устранена в 4.1. Соответственно, если хотите жить с табличками из четверки, то нужно в четверке
же сконвертировать их в cp1251 (например, myisamchk --set-character-set=cp1251 с остановленным сервером).
Если хотите жить с табличками в пятерке, можете просто пройтись по ним mysqlchk -r.
UPD: Возможно, второй пункт потребует также первого, 4.0 под рукой сейчас нету проверить.
Неактивен
paulus написал:
В сервере 4.0 есть две кодировки — win1251 и cp1251 (да, разные). Первая была признана устаревшей
и была устранена в 4.1. Соответственно, если хотите жить с табличками из четверки, то нужно в четверке
же сконвертировать их в cp1251 (например, myisamchk --set-character-set=cp1251 с остановленным сервером).
Если хотите жить с табличками в пятерке, можете просто пройтись по ним mysqlchk -r.
UPD: Возможно, второй пункт потребует также первого, 4.0 под рукой сейчас нету проверить.
Попробую второй вариант... Ибо сервер ч 4-кой сверхважен боюсь ченьть испортить...
1) Захожу в консоль mysql -u root -p
2) Выбираю БД mysql USE mysql
3) ввожу mysqlchk -r colums_priv;
где colums_priv это табл из БД mysql которую надо исправить....
в итоге синтаксис неверен
mysql> mysqlchk -r db;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'mysqlchk -r db' at line 1
Неактивен
Ну, mysqlchk — это консольная программа. Если хотите делать вручную из клиента mysql,
то можете набрать REPAIR TABLE columns_priv.
Кстати, почему-то вчера в голову не пришло — есть замечательная команда mysql_upgrade,
которая не просто конвертит таблички в новый формат, но и добавляет недостающие поля.
Неактивен
paulus написал:
Ну, mysqlchk — это консольная программа. Если хотите делать вручную из клиента mysql,
то можете набрать REPAIR TABLE columns_priv.
Кстати, почему-то вчера в голову не пришло — есть замечательная команда mysql_upgrade,
которая не просто конвертит таблички в новый формат, но и добавляет недостающие поля.
Зашел в консоль MySQL перешел на БД mysql, командой USE mysql
Далее с пом REPAIR TABLE table_name выправил все таблицы.
Результат --- та же ошибка
mysql_upgrade ------- не помогает! Она проверяет проверяет все пишет ОК ОК ОК, а потом в конце опять та же проблема с кодировкой....
ужос....
Как быть? не уж то ли единственный вариант остался конвертить БД основную на рабочем MySQL 4.x?
Отредактированно Arthes (25.03.2009 09:38:53)
Неактивен
Возьмите дистрибутив MySQL 4.0 под Вашу платформу, остановите сервер, из дистрибутива 4.0 возьмите
бинарник myisamchk и натравите его на неподдающиеся таблички. Даунгрейдить сервер целиком не нужно.
Неактивен
Возьмите дистрибутив MySQL 4.0 под Вашу платформу, остановите сервер, из дистрибутива 4.0 возьмите
бинарник myisamchk и натравите его на неподдающиеся таблички. Даунгрейдить сервер целиком не нужно.
То есть у меня сервер Linux
1) Я скачиваю MySQL4.0 с офф сайта под Linux.
2) Далее не устанвливаю а выдергиваю из архива файл myisamchk и временно подменяю им файл из установленного MySQL 5.0...
3) Лечу таблицы и все супер....
4) Возвращаю исходный файл myisamchk на место...
Так понял? Или не совсем верно???
Отредактированно Arthes (31.03.2009 17:11:23)
Неактивен
В третьем пункте подменять не надо, достаточно положить в сторонке
Неактивен
Ничего не получилось....
Тогда так:
КАК??? можно выудить пароли из mysql БД на сервере с MySQL4.0.20????
К серверу естественно есть root доступ....
Просто не для всех сайтов на серваке так прям быстро можно откопать значение пароля и имени....
----------------------------------
Есть надежда если выковорить из БД пароли, то создав таких же юзеров на новом серваке в MySQL5.0 + те же права и все такое будет дост просто скопировать БД сайтов и все будет работать....
Или я сильно ошибаюсь?
Отредактированно Arthes (02.04.2009 15:31:52)
Неактивен
Выудить никак нельзя, пароли хранятся в хэшах. Можно скопировать базу mysql и натравить
на нее mysql_upgrade (я это раньше, кажется, уже писал). Хэши останутся старыми
P.S. Ну и если все-таки хотите вручную мучаться, то SELECT user,host,password FROM mysql.user;
Неактивен
Добрый день.
Похожая проблема. Есть бд сайта на mysql 4.1 в кодировке cp1251 сервер крутится под Windows. Необходимо перенести базу и сайт на хост с линуксом, в mysql 5.
Кодировка по умолчанию сервера mysql на линукс хосте - utf8 в винде соответственно cp1251
если делаю бэкап с помощью mysql admin то бэкапится в утф и восстонавливается нормально, но понятно на сайте отображается всё вопросиками... делаю бэкап с помощью mysqldump сохраняет в cp1251 восстанавливается непонятно как, в phphmyadmin всё отображает вопросиками (Mysql Query Browser аналогично в выдаче запросов вместо русских вопросики).
Помогите советом или линками. Не искушён в подобных вопросах, увы...
Неактивен
phpmyadmin — зло
Бэкапьте в utf8, восстанавливайте нормально, а «на сайте» после соединения выполните
команду SET NAMES cp1251 (ну или другую нужную Вам кодировку).
Должно быть как-то так:
$conn = mysql_connect (...);
mysql_query ("SET NAMES cp1251", $conn);
Неактивен
Спасибо. Почти так и сделал. Нашёл вот в другом форуме:
Поскольку сайт, как выяснилось, использует библиотечку adodb то помогли вот такие заклинания:
$adodb->query("set character_set_client='cp1251'"); // говорю БД что данные от клиента будут приходит в кодировке cp1251
$adodb->query("set character_set_results='cp1251'"); // говорю БД что данные клиенту нужно возвратить обратно в кодировке cp1251
$adodb->query("set character_set_connection='utf8'");
для верности ещё и:
$adodb->query("SET NAMES cp1251"");
Кстати интересует такой вопрос (небольшой офтоп). На каком-то форуме вскользь прочитал, что mysql 5 хранит все данные исключительно в utf8 а отдавать может в любой кодировке (что собственно и продемонстрированно примером выше). Так ли это? Или всё таки можно заставить его хранить в любой кодировке? Если да, то можно ли чтобы разные БД на одном сервере были в разных кодировках? Спасибо.
Неактивен
Первые три строчки можно было не делать, SET NAMES делает как раз то, что нужно.
Данные MySQL хранит не обязательно в utf8, он хранит данные в кодировке таблицы.
Можете, например, сказать CREATE TABLE .... CHARSET cp1251 — будет хранить в 1251.
Отдавать будет в любом случае в кодировке подключения (которая меняется через SET NAMES).
Неактивен
Большое спасибо.
Теперь всё встало на свои места
Неактивен