MySQL重新安装问题

由于某种原因,我的/ 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,如果需要的话

如果你决定重新安装 – 安全起见:

  • 尝试closures清洁MySQL – 如果需要使用正常杀和等待
  • 复制所有的数据文件[不只是less数 – 例如不只是一个数据库的目录; innodb可能还不够]
  • 复制所有的configuration文件

只有然后尝试卸载+重新安装

按照你的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 /