我的ubuntu 12.04服务器上有mysql 5.5此命令:

mysql -u root -p

很好,但这给了我错误:
mysqldump -u root -p mydb_name > a.sql
mysqldump: Got error: 2002: Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2) when trying to connect

在my.cnf文件中,套接字设置为:
socket = /home/mysql/mysql.sock

所以我不知道/var/run/mysqld/mysqld.sock是从哪里来的。谢谢。

最佳答案

注意:可以说,serverfault.com是提出这个问题的更好地方,因为它与服务器配置而不是编程有关。
首先,尝试将--socket=/home/mysql/mysql.sock添加到mysqldump命令中。
如果这有效,可以使此命令行选项更持久,并通过将其添加到选项文件中来避免每次都键入它。
运行mysqldump--help将显示(从输出的第15行开始)mysqldump将尝试从哪些选项文件和组读取选项。例如,如果报告:

...

Default options are read from the following files in the given order:
/etc/my.cnf /etc/mysql/my.cnf /usr/etc/my.cnf ~/.my.cnf
The following groups are read: mysqldump client

...

您可以添加:
[mysqldump]
socket = /home/mysql/mysql.sock

到/etc/mysql/my.cnf或~/.my.cnf或列出的任何其他文件,然后您就不需要--socket=。。。每次运行mysqldump时的选项。
注意:如果mysql转储不在你的my.CNF文件中的[client]组中识别你的套接字选项,就像你的MySQL命令所做的那样,这可能意味着你的MySQL转储版本不能读取MySQL命令读取的相同的组和选项文件组合。
如果--socket选项不起作用,则可能是其他配置问题。
请确保在my.cnf文件的每个适用子部分中设置socket = /home/mysql/mysql.sock
[client]
socket = /home/mysql/mysql.sock

[mysqld_safe]
socket = /home/mysql/mysql.sock

[mysqld]
socket = /home/mysql/mysql.sock

[mysqldump]
socket = /home/mysql/mysql.sock

除非绝对必要,否则不要改变设备设置!检查是否正在使用命令sudo apparmor_status运行apparmor,并在该命令生成的输出开始处查找“apparmor module is loaded”。如果是,请在/etc/apparmor.d/usr.sbin.mysqld文件中添加一行如下内容,距离文件末尾大约6行。基于类似的现有条目,对于VA/Run/MySQL/MySqL.SoCK,位置应该是非常明显的。
/home/mysql/mysql.sock rw,

你想重新启动apparmor,然后在那一点上重新启动mysqld,或者只需要重新启动就可以重新启动一切。
注意,这些类型的非标准配置选项,您添加到apparmor可能会打开您的安全问题。这也可能会在运行更新管理器时导致冲突,如果更新或重新安装ubuntu,以后可能需要再次手动编辑更改。

10-05 20:17