![MySQL 重新安装问题](https://linux22.com/image/603870/MySQL%20%E9%87%8D%E6%96%B0%E5%AE%89%E8%A3%85%E9%97%AE%E9%A2%98.png)
由于某种原因,我的 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/