4

我的 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。谢谢。

4

5 回答 5

3

注意: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 或列出的任何其他文件,然后每次运行 mysqldump 时都不需要 --socket=... 选项。

注意:如果 mysqldump 没有[client]像 mysql 命令那样从现有 my.cnf 文件中的组中识别您的套接字选项,这可能意味着您的 mysqldump 版本可能不会读取相同的组和选项文件组合mysql 命令出于某种原因正在读取。

如果 --socket 选项不起作用,则可能是其他一些配置问题。

  1. 确保socket = /home/mysql/mysql.sock在 my.cnf 文件的每个适用小节中进行设置:

    [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
    
  2. 除非绝对必要,否则请勿更改 AppARMOR 设置!使用该命令检查您是否正在运行 apparmor,sudo apparmor_status并查找“apparmor 模块已加载”。在此命令产生的输出的开头附近。如果是这样,请在您的 /etc/apparmor.d/usr.sbin.mysqld 文件中添加如下所示的行,距文件末尾约 6 行。根据 /var/run/mysql/mysqld.sock 的类似现有条目,该位置应该非常明显:

    /home/mysql/mysql.sock rw,
    

您想在那时重新启动 apparmor 然后 mysqld,或者只是重新启动以彻底重新启动所有内容。

请注意,您添加到 apparmor 的这些类型的非标准配置选项可能会使您面临安全问题。这也可能会在您运行更新管理器时导致冲突,并且如果您将来更新或重新安装 ubuntu,您可能需要再次手动编辑更改。

于 2013-07-12T23:49:44.243 回答
2

我通过指定主机端口解决了这个问题:

mysqldump -host=myserver.com.mysql --port=3306 -u root -p mydb_name > a.sql
于 2020-05-03T20:30:11.837 回答
2

您收到此错误是因为您没有提到套​​接字路径

因此,您必须将 Mysql 套接字的路径添加到您的命令中才能解决错误:

mysqldump hive --socket=`$PATH` > /tmp/hive_backup.sql

例子:

mysqldump --socket /bigdisk/data/mysql/mysql.sock  > /tmp/hive_backup.sql
于 2018-02-20T14:09:18.150 回答
1

你也可以像这样使用它:

mysqldump -h localhost -P 3307 --socket /bigdisk/data/mysql/mysql.sock -u root -p databasename > databasename-backup20170902.sql

我使用端口 3307 因为我使用“mysqld_multi”

它对我来说很好。

于 2017-09-02T10:23:14.083 回答
0

或者,可以使用标志“-S”定义套接字。

示例: mysqldump -S 'basedir/mysql.sock' test > test.mysql

如何检索套接字: (1) 有关套接字的信息,请参见您的 my.cnf。(2) 它实际上位于 MySQL-base 目录中:'basedir/mysql.sock'

当您不记得基本目录的位置时,您可能需要查找基本目录的 my.cnf 文件。

于 2016-04-14T09:01:36.903 回答