首页 文章

可以't connect to local MySQL server through socket ' /var/mysql/mysql.sock'(38)

提问于
浏览
342

我在尝试连接到mysql时遇到了很大的问题 . 当我跑:

/usr/local/mysql/bin/mysql start

我有以下错误:

Can't connect to local MySQL server through socket '/var/mysql/mysql.sock' (38)

我在 /var/mysql 目录下有 mysql.sock .

/etc/my.cnf 我有:

[client]
port=3306
socket=/var/mysql/mysql.sock

[mysqld]
port=3306
socket=/var/mysql/mysql.sock
key_buffer_size=16M
max_allowed_packet=8M

并在 /etc/php.ini 我有:

; Default socket name for local MySQL connects.  If empty, uses the built-in
; MySQL defaults.
mysql.default_socket = /var/mysql/mysql.sock

我已经使用 sudo /opt/local/apache2/bin/apachectl restart 重新启动了apache

但我仍然有错误 .

否则,我不会't know if that'相关,但当我做 mysql_config --sockets 我得到

--socket         [/tmp/mysql.sock]

30 回答

  • 2

    如果您的文件my.cnf(通常在/ etc / mysql /文件夹中)已正确配置

    socket=/var/lib/mysql/mysql.sock
    

    您可以使用以下命令检查mysql是否正在运行:

    mysqladmin -u root -p status
    

    尝试将您的权限更改为mysql文件夹 . 如果您在本地工作,您可以尝试:

    sudo chmod -R 755 /var/lib/mysql/
    

    这解决了我

  • 2

    你确定你安装了mysql以及mysql服务器..

    例如,要安装mySql服务器,我将使用yum或apt来安装mysql命令行工具和服务器:

    yum -y install mysql mysql-server (or apt-get install mysql mysql-server)
    

    启用MySQL服务:

    /sbin/chkconfig mysqld on
    

    启动MySQL服务器:

    /sbin/service mysqld start
    

    然后设置MySQL root密码:

    mysqladmin -u root password 'new-password' (with the quotes)
    

    我希望它有所帮助 .

  • 18

    一个对我有用的快速解决方法:尝试在mysql_connect()中使用本地IP地址(127.0.0.1)而不是“localhost” . 这“迫使”php通过TCP / IP而不是unix套接字连接 .

  • 2

    我收到以下错误

    ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (111)
    

    尝试了几种方法,最后通过以下方式解决了这个问题

    sudo gksu gedit /etc/mysql/my.cnf
    

    改性

    #bind-address       = 127.0.0.1
    

    bind-address        = localhost
    

    并重新启动

    sudo /etc/init.d/mysql restart
    

    有效

  • 2

    确保你正在运行mysqld: /etc/init.d/mysql start

  • 88

    要防止出现此问题,必须从命令行正常关闭服务器,而不是关闭服务器电源 .

    shutdown -h now
    

    这将在关闭机器之前停止正在运行的服务 .

    基于Centos,当您遇到此问题时,再次备份它的另一种方法是移动mysql.sock:

    mv /var/lib/mysql/mysql.sock /var/lib/mysql/mysql.sock.bak
    
    service mysqld start
    

    重新启动该服务会创建一个名为mqsql.sock的新条目

  • 10

    另一个解决方法是编辑/etc/my.cnf并在[客户端]部分中包含主机

    [client]
     #password       = your_password
     host            = 127.0.0.1
     port            = 3306
     socket          = /var/run/mysql/mysql.sock
    

    然后重启mysql服务 .

    此解决方法已在以下位置进行了测试:服务器版本:5.5.25a-log源分发

  • 3

    从这里的许多答案中可以看出,当您启动MySQL服务时,会出现许多可能导致此错误消息的问题 . 问题是,如果你只是查看相应的日志文件,MySQL通常会告诉你到底出了什么问题 .

    例如,在Ubuntu上,您应该检查 /var/log/syslog . 由于许多其他东西也可能会记录到此文件,您可能希望使用 grep 查看mysql消息,而 tail 仅查看最新消息 . 总之,这可能看起来像:

    grep mysql /var/log/syslog | tail -50

    不要盲目地改变你的配置,因为有人说'这对我的系统起作用' . 弄清楚你的系统究竟出了什么问题,你会更快地得到更好的结果 .

  • 4

    就我而言,我使用的是Centos 5.5 . 我发现问题是因为mysql服务被停止了一些如何 . 所以我用命令启动了mysql服务:

    /etc/init.d/mysqld start
    

    所以..愚蠢的错误 .

  • 6

    我有同样的问题,它是由mysql服务器运行时更新mysql驱动程序引起的 . 我修复它只是重新启动mysql和apache2:

    sudo服务mysql停止sudo服务mysql启动sudo服务apache2停止sudo服务apache2启动

  • 10

    如果一切正常并且您刚刚开始看到此错误,那么在执行任何其他操作之前,请确保您没有磁盘空间:

    df -h
    

    如果创建 mysql.sock 的卷是100%使用,则MySql不需要't be able to create it and this will be the cause of this error. All you need to do is delete something that',就像旧的日志文件一样 .

  • 1

    尝试使用-h(主机)和-P(端口):

    mysql -h 127.0.0.1 -P 3306 -u root -p

  • 4

    当我为我的文件设置cron作业时出现此错误 . 我将文件的权限更改为 777 但它仍然不适合我 . 最后我得到了解决方案 . 可能会对其他人有所帮助 .

    尝试使用此命令:

    mysql -h 127.0.0.1 -P 3306 -u root -p

    请记住,-h表示 host ,-p表示 port .

  • 3
    sudo service mysql start
    

    这应该对你很好 . 您可能有可能更改了一些影响mysql配置的命令 .

  • 2

    我收到错误是因为我正在运行MAMP而我的.sock文件位于不同的位置 . 我刚刚添加了一个符号链接,应用程序认为它应该指向实际位置它就像一个魅力 .

  • 21

    我还发现这是一个权限问题 . 我将MySQL文件与工作安装(Debian 6挤压)进行了比较,并且必须进行以下所有权更改(其中 mydatabase 是您拥有的任何数据库) .

    所有权 mysql:mysql

    chown mysql:mysql /var/lib/mysql
    chown mysql:mysql /var/lib/mysql/ib*
    chown mysql:mysql /var/lib/mysql/mydatabase
    chown mysql:mysql /var/lib/mysql/mydatabase/*
    chown mysql:mysql /var/lib/mysql/mysql/*
    

    所有权 mysql:root

    chown mysql:root /var/lib/mysql/mysql
    chown mysql:root /var/run/mysqld
    

    所有权 mysql:adm

    chown mysql:adm /var/log/mysql
    chown mysql:adm /var/log/mysql.err
    chown mysql:adm /var/log/mysql.log*
    
  • 6

    这个问题有很多解决方案但是对于我的情况,我只需要纠正机器/服务器上的 DATEUbuntu 16.04 Server ) .

    i)检查服务器的日期并进行更正 .

    ii)运行 sudo /etc/init.d/mysql restart

    这应该开始了 .

  • 2

    如果您使用的是AWS(亚马逊网络服务)微型版,那么这是一个内存问题 . 当我跑

    mysql
    

    它会说从终端

    ERROR 2002 (HY000): Can't connect to local MySQL server through socket /var/run/mysqld/mysqld.sock' (111)
    

    所以我尝试了以下内容,它只会失败 .

    service mysqld restart
    

    经过多次搜索,我发现你必须为MySQL创建一个交换文件以获得足够的内存 . 说明列出:http://www.prowebdev.us/2012/05/amazon-ec2-linux-micro-swap-space.html .

    然后,我能够重启mysqld .

  • 4

    你总是可以通过使用 --socket 选项指定mysql.sock文件的位置来启动mysql服务器

    mysql --socket=/var/mysql/mysql.sock
    

    即使套接字文件的位置在my.cnf文件中的不同位置指定,这也会起作用 .

  • 198

    对于那些解决方案不起作用的人,请尝试:

    cd /etc/mysql
    

    检查my.cnf是否存在

    nano my.cnf
    

    并确保您只有一个绑定地址,如下所示:

    bind-address = 127.0.0.1

    如果没有,那可能是问题,只需退出nano并保存文件即可 .

    service mysql start

    请注意,如果你没有nano(它是一个文本编辑器),只需用 apt-get install nano 安装它,然后只需按Ctrl X退出,别忘了说Y保存并使用相同的文件)

  • 6

    添加

    --protocol=tcp
    

    在你的连接中的pramaters列表为我工作 .

  • 5

    这对我来说已经足够了

    sudo /etc/init.d/mysql restart
    
  • 3

    我今天遇到了这个问题 . 这些答案都没有提供修复 . 我需要为我的mysql服务启动以下命令(在此处找到https://stackoverflow.com/a/20141146/633107):

    sudo /etc/init.d/mysql stop
    cd /var/lib/mysql/
    ls ib_logfile*
    mv ib_logfile0 ib_logfile0.bak
    mv ib_logfile1 ib_logfile1.bak
    ... etc ...
    /etc/init.d/mysql restart
    

    部分原因是/var/log/mysql/error.log中的以下错误:

    140319 11:58:21 InnoDB: Completed initialization of buffer pool
    InnoDB: Error: log file ./ib_logfile0 is of different size 0 50331648 bytes
    InnoDB: than specified in the .cnf file 0 5242880 bytes!
    140319 11:58:21 [ERROR] Plugin 'InnoDB' init function returned error.
    140319 11:58:21 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
    140319 11:58:21 [ERROR] Unknown/unsupported storage engine: InnoDB
    140319 11:58:21 [ERROR] Aborting
    

    我也看到磁盘已满错误,但仅在运行没有sudo的命令时 . 如果权限检查失败,则会报告磁盘已满(即使您的分区甚至没有接近满) .

  • 2

    CentOS 7,64位 . 全新安装 .
    在我的情况下,错误是因为我没有安装正确的MySQL服务器和MySQL客户端 .
    使用 yum ,我删除了 mariadb 和mysql-community edition . 我从official MySQL website下载了客户端和服务器的rpm,并安装了服务器和客户端 .

    在安装服务器时,我看到一条消息,MySQL的root帐户的密码存储在一个我可以用 sudo cat /root/.mysql_secret 查看的文件中 .

    所以在安装客户端和服务器之后,我用命令 sudo service mysql status 检查了MySQL是否正常工作(我想我在重新启动之前),我得到了结果 .

    MySQL正在运行(2601)[确定]

    我使用.mysql_secret文件中的密码登录MySQL:
    mysql -uroot -pdxM01Xfg3DXEPabpf . 请注意, dxM01Xfg3DXEPabpf 是.mysql_secret文件中提到的密码 .

    然后键入在mysql提示符下输入以下命令来更改root的密码:

    mysql> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('somePassword');

    从那时起一切都很好 .

  • 68
    sudo service mysqld start
    

    为我工作,我正在使用Centos

  • 6

    这并没有在这里添加它,希望它能在我的情况下帮助其他人 .


    PythonAnywhere决定更改数据库连接主机名以提高效率和可靠性,如detailed here

    用于连接帐户的MySQL数据库实例的官方主机名已从mysql.server更改为yourusername.mysql.pythonanywhere-services.com . 这绕过了我们最近几周开始出现问题的基础设施的一部分,它应该比旧方式更有效和可靠 .

    因此,您需要将主机名更新为上面突出显示的值 .

  • 2

    在尝试启动服务器时我也遇到了这个问题,所以这里的许多答案只是说启动服务器不起作用 . 您可以做的第一件事是执行以下操作以查看是否存在任何配置错误:

    /usr/sbin/mysqld --verbose --help 1>/dev/null
    

    我确实遇到了一个错误:

    160816 19:24:33 [Note] /usr/sbin/mysqld (mysqld 5.5.50-0ubuntu0.14.04.1-log) starting as process 9461 ...
    160816 19:24:33 [Warning] Using unique option prefix myisam-recover instead of myisam-recover-options is deprecated and will be removed in a future release. Please use the full name instead.
    160816 19:24:33 [Note] Plugin 'FEDERATED' is disabled.
    160816 19:24:33 [ERROR] /usr/sbin/mysqld: unknown variable 'innodb-online-alter-log-max-size=4294967296'
    160816 19:24:33 [ERROR] Aborting
    

    一个简单的 grep -HR "innodb-online-alter-log-max-size" /etc/mysql/ 向我显示了包含有问题的行的确切文件,因此我从文件中删除了该行 .

    然后,检查我的 /var/log/mysql/error.log 文件:

    InnoDB: Error: log file ./ib_logfile0 is of different size 0 5242880 bytes
    InnoDB: than specified in the .cnf file 0 671088640 bytes!
    160816 22:46:46 [ERROR] Plugin 'InnoDB' init function returned error.
    160816 22:46:46 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
    160816 22:46:46 [ERROR] Unknown/unsupported storage engine: InnoDB
    160816 22:46:46 [ERROR] Aborting
    

    基于this question接受的解决方案甚至不会让服务器启动,所以我按照了一些评论的说法删除了我的 /var/lib/mysql/ib_logfile0/var/lib/mysql/ib_logfile1 文件 .

    这允许服务器启动,我能够连接并执行查询,但是检查我的错误日志文件很快就会填满数万行,如下所示:

    160816 22:52:15  InnoDB: Error: page 1415 log sequence number 82039318708
    InnoDB: is in the future! Current system log sequence number 81640793100.
    InnoDB: Your database may be corrupt or you may have copied the InnoDB
    InnoDB: tablespace but not the InnoDB log files. See
    InnoDB: http://dev.mysql.com/doc/refman/5.5/en/forcing-innodb-recovery.html
    InnoDB: for more information.
    

    基于here的建议,为了解决这个问题,我做了一个mysqldump并恢复了所有数据库(参见其他几个解决方案的链接) .

    $ mysqldump -u root -p --allow-keywords --add-drop-database --comments --hex-blob --opt --quote-names --databases db_1 db_2 db_3 db_etc > backup-all-databases.sql
    $ mysql -u root -p < backup-all-databases.sql
    

    现在一切似乎都按预期工作了 .

  • 1

    对我来说 - 这只是MySQL需要很长时间才能加载的情况 . 我的一个数据库中有超过100,000个表,它最终开始但显然在这个实例中需要很长时间 .

  • 6

    我使用127.0.0.1代替-h而不是localhost,一切正常 . 在其他情况下有什么 - 上面的错误 .

  • 48

    我已经得到了答案,当MariaDB启动时创建了mysql.sock文件,并在MariaDB关闭时删除了 . 它赢得了't exist if MariaDB is not running. maybe you didn' t安装MariaDB . 您可以遵循以下指示:https://www.linode.com/docs/databases/mariadb/how-to-install-mariadb-on-centos-7 BEST

相关问题