MySQL 重新安装问题

MySQL 重新安装问题

由于某种原因,我的 debian6 上的 /var/run/ 目录的 chown 和 chmod 发生了变化。问题出在哪里?结果是 mysql 失败。我猜最简单的修复方法是重新安装 MySQL。(以前这个 LAMP 运行良好。)

但是,我已经建立了数据库和表,不想丢失它们。由于 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]: 

答案1

弄清楚到底发生了什么会很好;您可以查看任何其他安装了相同操作系统和 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 

如果需要,还可以使用适当的 chmod

如果您决定重新安装 - 请务必注意安全:

  • 尝试彻底关闭 mysql - 如果需要,使用常规 kill 并等待
  • 复制所有数据文件[不只是几个 - 例如不只是一个数据库的目录;对于 innodb 来说可能还不够]
  • 复制所有配置文件

然后尝试卸载并重新安装

答案2

您所建议的简单重新安装在这种情况下肯定没有帮助,因为影响这些权限的任何脚本都不会通过直接重新安装进行更改。需要注意以下几点:/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 init 脚本(如果您修改了它,然后升级,则可能会发生这种情况,升级不会(默认情况下)覆盖您对 init 脚本的更改。您可以通过询问 dpkg 当前打包的脚本的 md5 是什么来检查您是否使用的是旧版本的 mysql init 脚本:

# 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

答案3

我暂时避免更改 /var/run 目录上的任何权限,而只更改 /var/run/mysqld 路径。

您必须确保 mysql 用户可以访问和写入 mysqld 目录。第一个命令分配正确的组,第二个命令允许该组写入该路径。

sudo chgrp mysql /var/run/mysqld/

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

相关内容