- 配置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