URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 2374
[ Назад ]

Исходное сообщение
"Не работает chroot в MySQL 4.0.16"

Отправлено oleg44 , 11-Дек-03 15:13 
Здравствуйте!
Поставил MySQL 4.0.16. Прописываю в /etc/my.cnf chroot=/usr/local/mysql/data
После запуска (в лог файле):
31211 15:38:30 Can't find messagefile '/usr/local/mysql/data/errmsg.sys'

Файл errmsg.sys лежит в /usr/local/mysql/data/errmsg.sys, права mysql.

Что делать?


Содержание

Сообщения в этом обсуждении
"Не работает chroot в MySQL 4.0.16"
Отправлено OldOwl , 11-Дек-03 17:04 
>Здравствуйте!
> Поставил MySQL 4.0.16. Прописываю в /etc/my.cnf chroot=/usr/local/mysql/data
> После запуска (в лог файле):
> 31211 15:38:30 Can't find messagefile '/usr/local/mysql/data/errmsg.sys'
>
> Файл errmsg.sys лежит в /usr/local/mysql/data/errmsg.sys, права mysql.
>
> Что делать?

Для mysqld /usr/local/mysql/data - новый корень, относительно которого он и "прокладывает" себе все пути. Т.е., чтобы определить, где _на_самом_деле_ (относительно настоящего корня /) mysqld ищет какой-либо файл, прибавь к его пути то, что прописано в chroot. В твоем случае это будет /usr/local/mysql/data/usr/local/mysql/data/errmsg.sys
Вот и попробуй положить errmsg.sys туда. Естественно, создав несуществующие каталоги.


"Не работает chroot в MySQL 4.0.16"
Отправлено oleg44 , 16-Дек-03 13:15 
>Для mysqld /usr/local/mysql/data - новый корень, относительно которого он и "прокладывает" себе
>все пути. Т.е., чтобы определить, где _на_самом_деле_ (относительно настоящего корня /)
>mysqld ищет какой-либо файл, прибавь к его пути то, что прописано
>в chroot. В твоем случае это будет /usr/local/mysql/data/usr/local/mysql/data/errmsg.sys
>Вот и попробуй положить errmsg.sys туда. Естественно, создав несуществующие каталоги.

Пробовал всяко, не желает.
031216 14:15:35  Can't find messagefile '/usr/local/mysql/data/share/mysql/charsets/english/errmsg.sys
031216 14:15:35  Aborting


"Не работает chroot в MySQL 4.0.16"
Отправлено OldOwl , 16-Дек-03 15:35 
>>Для mysqld /usr/local/mysql/data - новый корень, относительно которого он и "прокладывает" себе
>>все пути. Т.е., чтобы определить, где _на_самом_деле_ (относительно настоящего корня /)
>>mysqld ищет какой-либо файл, прибавь к его пути то, что прописано
>>в chroot. В твоем случае это будет /usr/local/mysql/data/usr/local/mysql/data/errmsg.sys
>>Вот и попробуй положить errmsg.sys туда. Естественно, создав несуществующие каталоги.
>
>Пробовал всяко, не желает.
>031216 14:15:35  Can't find messagefile '/usr/local/mysql/data/share/mysql/charsets/english/errmsg.sys
>031216 14:15:35  Aborting

Чего-то я не понял. У тебя errmsg.sys лежал в /usr/local/mysql/data/errmsg.sys, а mysqld искал его в /usr/local/mysql/data/ и не находил. Я имел ввиду, что тебе нужно попробовать в /usr/local/mysql/data/ (или что там прописано в chroot=?)
создать путь /usr/local/mysql/data/, т.е. чтоб в итоге получился путь /usr/local/mysql/data/usr/local/mysql/data/, и туда положить errmsg.sys.
А у тебя теперь errmsg.sys вообще ищется в /usr/local/mysql/data/share/mysql/charsets/english/. Что ты поменял, что mysqld стал искать файл в другом месте?
../charserts/.. здесь вообще ни при чем, там хранятся настройки кодировок.
Где у тебя сейчас лежит errmsg.sys и что сейчас прописано в chroot?


"Не работает chroot в MySQL 4.0.16"
Отправлено oleg44 , 16-Дек-03 16:52 
>Чего-то я не понял. У тебя errmsg.sys лежал в /usr/local/mysql/data/errmsg.sys, а mysqld
>искал его в /usr/local/mysql/data/ и не находил. Я имел ввиду, что
>тебе нужно попробовать в /usr/local/mysql/data/ (или что там прописано в chroot=?)
>
>создать путь /usr/local/mysql/data/, т.е. чтоб в итоге получился путь /usr/local/mysql/data/usr/local/mysql/data/, и туда
>положить errmsg.sys.
>А у тебя теперь errmsg.sys вообще ищется в /usr/local/mysql/data/share/mysql/charsets/english/. Что ты поменял,
>что mysqld стал искать файл в другом месте?
>../charserts/.. здесь вообще ни при чем, там хранятся настройки кодировок.
>Где у тебя сейчас лежит errmsg.sys и что сейчас прописано в chroot?
>
/etc/my.cnf
[mysqld]
chroot=/usr/local/mysql
basedir=/usr/local/mysql
port=3306
datadir=/usr/local/mysql/data/db
#bdb-logdir=/log
log=/usr/local/mysql/data/log/queries
pid-file=/usr/local/mysql/data/mysqld.pid
#skip-networking
socket=/usr/local/mysql/data/mysql.sock
tmpdir=/usr/local/mysql/data/tmp
user=mysql
default-character-set=cp1251
skip-locking
skip-show-database
set-variable = key_buffer=20M
#character-sets-dir=/share/mysql/charsets/
#language=/usr/local/mysql/share/mysql/charsets/english

------------
Создал в /usr/local/mysql  /usr/local/mysql, в нем /data, /share/mysql , скопировал в него все файлы charsets, сообщений на разных языках.
MySql запускается , в логе :

31216 17:47:14  mysqld started
Warning: Ignoring user change to 'mysql' because the user was set to 'mysql' earlier on the command line
Fatal error: Can't change to run as user 'mysql' ;  Please check that the user exists!
031216 17:47:14  Aborting
031216 17:47:14  /usr/local/mysql/libexec/mysqld: Shutdown Complete
031216 17:47:14  mysqld ended
-----
Теперь похоже ему нужно создать /etc/passwd с пользователем mysql.
Чем и буду заниматься.


"Не работает chroot в MySQL 4.0.16"
Отправлено OldOwl , 16-Дек-03 18:21 
>Создал в /usr/local/mysql  /usr/local/mysql, в нем /data, /share/mysql , скопировал в
>него все файлы charsets, сообщений на разных языках.
>
Во, теперь другое дело. Таким же образом нужно создать/разложить копии всех каталогов и файлов, которые могут понадобиться mysqld для работы. Например, /usr/local/mysql/data/db, где будут лежать собственно базы.
Кстати, по идее, чтобы не городить огород, можно было бы попробовать сделать проще:
Поставить в my.cnf вместо basedir=/usr/local/mysql basedir=/
и во всех остальных путях типа datadir=/usr/local/mysql/data/db и т.п. просто вырезать начальное "/usr/local/mysql". Тогда ничего не надо переносить. Хотя тогда пути типа /etc, /bin и т.п., которые тоже будут нужны, будут вперемежку с папками mysql.

>MySql запускается , в логе :
>
>31216 17:47:14  mysqld started
>Warning: Ignoring user change to 'mysql' because the user was set to
>'mysql' earlier on the command line
>
Это одно.

>Fatal error: Can't change to run as user 'mysql' ;  Please
>check that the user exists!
>
А вот это уже совсем другое.

>Теперь похоже ему нужно создать /etc/passwd с пользователем mysql.
>Чем и буду заниматься.
>
Верно. Рекомендуется взять копию etc/master.password, удалить в ней всех лишних пользователей, кроме mysql, а потом создать из нее новые базы pwd.db и spwd.db, сама копия и полученный passwd потом не нужны.
Также понадобится копия /etc/group, в которой также оставить только mysql.

Ну а дальше сам увидишь, если еще что понадобится - ругнется.

Я так чрутил mysql и apache. Только не в my.cnf указывал chroot=..., а сам mysqld (и httpd соответственно) запускал через команду chroot. Так что mysqld вообще не подозревает, что что-то не так. :-)
Так вот файлов и папок продублировать по новым путям пришлось предостаточно.

Удачи!


"Не работает chroot в MySQL 4.0.16"
Отправлено oleg44 , 17-Дек-03 09:11 
>Верно. Рекомендуется взять копию etc/master.password, удалить в ней всех лишних пользователей, кроме
>mysql, а потом создать из нее новые базы pwd.db и spwd.db,
У меня Linux. Нет master.password.