Назад | Перейти на главную страницу

Вопросы по переустановке MySQL

По какой-то причине в моем каталоге / var / run / dir на debian6 были изменены chown и chmod. Проблема в чем? Результатом является то, что mysql не работает. Я предполагаю, что самый простой способ исправить это переустановить MySQL. (Раньше эта ЛАМПА работала нормально.)

Однако я создал базы данных и таблицы и не хочу их терять. Поскольку mysql не запущен, я не могу выполнить резервное копирование (верно?).

Я просто хочу подтвердить, что:

1). если я переустановлю, я не потеряю свои базы данных.

2). apt-get install mysql-server mysql-client это правильная команда для использования.

Спасибо.

РЕДАКТИРОВАТЬ:

/ var / log / syslog вывод при запуске /etc/init.d/mysql start:

mysqld_safe: Starting mysqld daemon with databases from /var/lib/mysql
mysqld: 130109 10:44:10 [Note] Plugin 'FEDERATED' is disabled.
mysqld: #007/usr/sbin/mysqld: Can't find file: './mysql/plugin.frm' (errno: 13)
mysqld: 130109 10:44:10 [ERROR] Can't open the mysql.plugin table. Please run mysql_upgrade to create it.
mysqld: 130109 10:44:10 InnoDB: The InnoDB memory heap is disabled
mysqld: 130109 10:44:10 InnoDB: Mutexes and rw_locks use GCC atomic builtins
mysqld: 130109 10:44:10 InnoDB: Compressed tables use zlib 1.2.3.4
mysqld: 130109 10:44:10 InnoDB: Using Linux native AIO
mysqld: 130109 10:44:10 InnoDB: Initializing buffer pool, size = 128.0M
mysqld: 130109 10:44:10 InnoDB: Completed initialization of buffer pool
mysqld: 130109 10:44:10  InnoDB: Operating system error number 13 in a file operation.
mysqld: InnoDB: The error means mysqld does not have the access rights to
mysqld: InnoDB: the directory.
mysqld: InnoDB: File name ./ibdata1
mysqld: InnoDB: File operation call: 'create'.
mysqld: InnoDB: Cannot continue operation.
mysqld_safe: mysqld from pid file /var/run/mysqld/mysqld.pid ended
/etc/init.d/mysql[4531]: 0 processes alive and '/usr/bin/mysqladmin --defaults-file=/etc/mysql/debian.cnf ping' resulted in
/etc/init.d/mysql[4531]: #007/usr/bin/mysqladmin: connect to server at 'localhost' failed
/etc/init.d/mysql[4531]: error: 'Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)'
/etc/init.d/mysql[4531]: Check that mysqld is running and that the socket: '/var/run/mysqld/mysqld.sock' exists!
/etc/init.d/mysql[4531]: 

Простая переустановка, как вы предлагаете, гарантированно не поможет в этом случае, поскольку ни один из сценариев, влияющих на эти разрешения, не будет изменен простой переустановкой. Несколько замечаний: / var / run теперь является tmpfs, смонтированным во время выполнения. Разрешения устанавливаются при его монтировании. из /etc/init.d/mountkernfs.sh:

domount tmpfs "" /var/run varrun -omode=0755,nosuid$RUN_OPT

Итак, вы должны иметь /var/run как root: root и chmod 0775.

Также следует отметить, что / var / run пуст при каждой загрузке. Любые изменения, внесенные в / var / run, исчезнут во время перезагрузки.

Когда запускается mysql init, он проверяет, существует ли / var / run / mysqld. Если этого не произойдет, он будет воссоздан с правильными разрешениями. из /etc/init.d/mysql:

test -e /var/run/mysqld || install -m 755 -o mysql -g root -d /var/run/mysqld

Итак, если вы еще не перезагрузились, вы можете попробовать /etc/init.d/mysql stop && rm -r /var/run/mysqld && /etc/init.d/mysql start.

Если вы перезагружались, значит еще что-то не так. Возможно, у вас есть старая версия сценария инициализации mysql (это может произойти, если вы изменили его, а затем обновили, обновление не будет (по умолчанию) перезаписать ваши изменения сценария инициализации. Вы можете проверить, есть ли у вас старая версия mysql init script, задав dpkg вопрос о текущем упакованном md5 сценария:

# dpkg -s mysql-server-5.1 | grep init.d
/etc/init.d/mysql ea6d050ac82ed69d01970f9b95ab9b9d

затем сравните это с md5sum в вашей файловой системе:

# md5sum /etc/init.d/mysql
ea6d050ac82ed69d01970f9b95ab9b9d  /etc/init.d/mysql

было бы хорошо узнать, что же произошло на самом деле; вы можете взглянуть на любой другой компьютер с той же ОС и установленным mysql и использовать chmod и chown для восстановления ожидаемых прав и владения.

беглый взгляд на случайный сервер debian говорит мне:

root@serv:/var/run# ls -la /var/run/mysqld/*
total 12
drwxr-xr-x  2 mysql root  4096 Oct 24 13:29 .
drwxr-xr-x 14 root  root  4096 Jan  9 01:28 ..
-rw-rw----  1 mysql mysql    5 Oct 24 13:29 mysqld.pid
srwxrwxrwx  1 mysql mysql    0 Oct 24 13:29 mysqld.sock

так что попробуйте сначала:

chown mysql:mysql /var/run/mysqld/*
chown mysql:root /var/run/mysqld 

и соответствующие chmods при необходимости

если решите переустановить - будьте осторожны:

  • попробуйте закрыть mysql чисто - при необходимости используйте обычное уничтожение и ожидание
  • скопируйте все файлы данных [не только несколько - например, не только каталог одной базы данных; для innodb этого может быть недостаточно]
  • скопируйте все файлы конфигурации

только потом попробуйте удалить + переустановить

Я бы не стал менять какие-либо разрешения для каталога / var / run на данный момент, а только изменил бы путь / var / run / mysqld.

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

sudo chgrp mysql / var / запустить / mysqld /

sudo chmod g + с / var / run / mysqld /