由于某种原因,我的/ var / run / dir在debian6上有chown和chmod改变。 问题是从什么? 结果是,MySQL失败。 我猜最简单的方法就是重新安装MySQL。 (以前这个LAMP运行良好。)
但是,我已经build立了数据库和表格,不想丢失它们。 由于MySQL没有运行,我不能备份(正确?)。
我只想确认一下:
1)。 如果我重新安装,我不会放松我的数据库。
2)。 apt-get install mysql-server mysql-client是使用的正确命令。
谢谢。
编辑:
运行/etc/init.d/mysql start输出/ 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]:
找出真正发生的事情是很好的; 你可以看看安装了相同操作系统和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,如果需要的话
如果你决定重新安装 – 安全起见:
只有然后尝试卸载+重新安装
按照你的build议,一个简单的重新安装是保证在这种情况下不起作用的,因为没有任何影响这些权限的脚本会被直接重新安装。 有些事情要注意:/ var / run现在是一个在运行时安装的tmpfs。 安装时设置权限。 来自/etc/init.d/mountkernfs.sh :
domount tmpfs "" /var/run varrun -omode=0755,nosuid$RUN_OPT
所以你应该有/var/run以root身份/var/run :root和chmod 0775。
另外需要注意的是/ var / run在每次启动时都是空的。 对/ var / run所做的任何更改都将在重新引导期间消失。
当mysql init运行时,会确保/ var / run / mysqld存在。 如果不是,则会使用正确的权限重新创build。 来自/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脚本的修改,你可以检查你的旧版本mysql的init脚本通过询问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
我会避免在/ var / run目录上更改任何权限,但只能更改/ var / run / mysqldpath。
您必须确保mysql用户可以访问并写入mysqld目录。 第一个命令分配正确的组,第二个命令允许该组写入该path。
sudo chgrp mysql / var / run / mysqld /
sudo chmod g + w / var / run / mysqld /