配置mysql默认编码格式 && 解决Can't connect to local MySQL server through socket 问题

  • 配置mysql默认编码格式
  • Linux连接MySQL时的错误:Can’t connect to local MySQL server through socket ‘/var/run/mysqld/mysqld.sock’

    网页数据一般采用UTF8编码,而数据库默认为latin 。我们可以通过修改数据库默认编码方式为UTF8来减少数据库创建时的设置,也能最大限度的避免因粗心造成的乱码问题。
    在配置mysql默认编码格式为utf8时遇到如下问题,记下来以作参考。

1. 配置mysql默认编码格式为utf8

    我们可以通过命令查看数据库当前编码:

mysql> SHOW VARIABLES LIKE 'character%';

    发现数据库当前默认编码格式为:

|character_set_client      | latin1                                   |
| character_set_connection | latin1                                   |
| character_set_database   | latin1                                   |
| character_set_filesystem | binary                                   |
| character_set_results    | latin1                                   |
| character_set_server     | latin1                                   |
| character_set_system     | latin1                                   |

    打开mysql配置文件my.cnf,在[client]和[mysql]下添加default-character-set=utf8,在[mysqld]下添加character-set-server=utf8。终端输入命令打开my.cnf:

$ sudo vim /etc/my.cnf

    注:如果/etc下面没有my.cnf配置文件,可从/etc/mysql/my.cnf复制过去,更改的时候/etc/my.cnf和/etc/mysql/my.cnf都更改,并保持一致。

[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
[mysqld]
character-set-server=utf8

    保存之后重启mysql:

$ sudo /etc/init.d/mysql stop
    * Stopping MySQL database server mysqld                                 [ OK ]
$ sudo /etc/init.d/mysql start
    * Starting MySQL database server mysqld                                 [ OK ]

    进入mysql查看当前数据库默认编码格式:

$ mysql -u root -p

mysql> SHOW VARIABLES LIKE 'character%'; 

|character_set_client      | utf8                                    |
| character_set_connection | utf8                                    |
| character_set_database   | utf8                                    |
| character_set_filesystem | binary                                  |
| character_set_results    | utf8                                    |
| character_set_server     | utf8                                    |
| character_set_system     | utf8                                    |

    进行到这里修改mysql默认编码格式完成!

2. 配置mysql默认编码格式为过程中遇到的问题

    (1)修改好配置文件my.cnf之后,采用了killall mysql 以及killall mysqld,然后重启mysql的时候报错:

$ sudo /etc/init.d/mysql start
* Starting MySQL database server mysqld                                 [ failed]

    使用> mysql -u root -p登陆是出现下面的错误:

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)

    通过命令查看mysql启动情况:

>$  ps -ef | grep mysql

root 28221 27474 0 14:18 pts/0 00:00:00 grep mysql   只有这一条

    至此,我可以确定,mysql无法启动。

    (2)我开始排错,首先发现/tmp/mysql.sock不存在

>$ vim /etc/my.cnf

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

/var/lib/mysql/mysql .sock同样不存在 

>$ find / -name mysql.sock

    显示为空,未查询到mysql.sock文件,mysql.sock文件丢失了。

    重启之后仍然有错,mysql.sock未自动生成。
    接下来了解到mysql.sock是一个临时文件,在mysql启动时会自动生成,我的服务器未启动,自然就没有mysql.sock文件。

    我尝试安全启动模式,mysqld_safe试图通过工作目录找到服务器和数据库,但mysqld_safe还是失败。

   >$ mysqld_safe &
     Starting mysqld daemon with databases from ....../mysql/var 
     STOPPING server from pid file   .......pid

     130802 15:17:11 mysqld ended

    各种命令尝试无效的情况下—-学会看错误日志。查看配置文件中log的存储位置:

>$ vim /etc/my.cnf

log_error= /var/log/mysql/error.log

    打开error.log,发现错误:

>$ vim /var/log/mysql/error.log


[ERROR] /usr/sbin/mysqld: unknown variable 'default-character-server=utf8'

    再次打开配置文件my.cnf,才发现修改[mysqld]下面的默认编码格式的时候出现错误,修改之并保存。再次启动安全模式,成功!

>$ mysqld_safe &

    启动mysql,成功!

>$ /etc/init.d/mysql start

    登录mysql,成功!

>$ mysql -u root -p
阅读更多
个人分类: mysql
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭