记得关掉selinux!!!
1、关闭iptables
#service iptables stop
2、关闭SELinux
#vi /etc/selinux/config
将文件中的SELINUX="" 为 disabled ,然后重启。
如果不想重启系统,使用命令setenforce 0
注:
setenforce 1 设置SELinux 成为enforcing模式
setenforce 0 设置SELinux 成为permissive模式
在lilo或者grub的启动参数中增加:selinux=0,也可以关闭selinux
#---------------------------------------------------------------
查看selinux状态:
/usr/bin/setstatus -v
如下:
SELinux status: enabled
SELinuxfs mount: /selinux
Current mode: permissive
Mode from config file: enforcing
Policy version: 21
Policy from config file: targeted
getenforce/setenforce查看和设置SELinux的当前工作模式
===============================================================
先写点前期的东西
最初代码里写的#include <mysql.h>
问题1:error: mysql.h: No such file or directory
作为一个菜鸟,百度吧。。。
有人说是因为没有安装mysql或者没有安装mysql链接库,可以用yum search mysql或者apt-cache search mysql搜索mysql相关安装文件
然后yum install XXX安装解决;
有人说是mysql的包没装好,通过装libmysqlclient15_dev解决;
但是,,,yum install时提示我包已安装且是最新版本,所以我的问题还在。。困惑ing
然后,我突然醒悟地去查查。。 whereis mysql.h,看到了路径/usr/include/mysql。。。,就是说我的这个头文件路径是/usr/include/mysql/mysql.h
然后把代码里改成了#include <mysql/mysql.h>就ok了~
很简单的问题,只是太菜缺少意识,不懂#include咋工作的
问题2:编译时出现错误undefined reference to `mysql_init' //程序里用到的mysql接口函数都有这个错误提示
这个百度一下就能知道
gcc加参数
gcc -o xxx.c xxxx -lmysqlclient
ok,编译顺利完成~
问题3:查看数据库连接出错的原因
代码写好了,能编译了,死活连不上数据库呀,不知道咋查是哪的错误呀。
还好不经意到了别人代码里的mysql_error()
就添上一句 printf("%s\n",mysql_error(conn)); //conn是数据库的连接句柄指针,MYSQL *conn ,ok了
看来没事还得多翻翻MySQL的C接口~
说正题吧...这是个及其纠结的问题
问题4:mysql_error返回的错误提示是Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
感觉是个常见的问题,继续百度.
发现大多帖子内容都一样哇...突然觉得网上这种冗余实在太多了,浪费存储维护成本和查找人的时间精力.....
找到一个看起来比较靠谱的帖子
(最后也是看这个帖子里解决的,参见:http://blog.csdn.net/ixidof/article/details/5958904)
(问题解决后看到个帖子貌似也解决了,不过我没有再试了,
参见:http://blog.sina.com.cn/s/blog_6b8bea470100oo2s.html)
还是说说过程吧
先按刚说的比较靠谱的帖子里,一直到方案5(不再赘述)都没解决问题,比较拙计. 又去看了别的帖子,像什么提升/var/lib/mysql整个文件夹权限各种招数均被无懈掉了0.0,毫无效果。
(其中的方案3被我忽略了,当时不知道max_connections=1000是啥,想当然的跳过了。
后来查了下,MySQL的max_connections参数用来设置最大连接(用户)数。每个连接MySQL的用户均算作一个连接,max_connections的默认值为100。
在配置文件my.cnf中设置max_connections的值
打开MySQL配置文件my.cnf
找到max_connections一行,修改为(如果没有,则自己添加),
max_connections = 1000
上面的1000即该参数的值。
实时(临时)修改此参数的值
首先登陆mysql,执行如下命令:
[root@www ~]# mysql -uroot -p
查看当前的Max_connections参数值:
mysql> SELECT @@MAX_CONNECTIONS AS 'Max Connections';
设置该参数的值:
mysql> set GLOBAL max_connections=1000;
(注意上面命令的大小写)
修改完成后实时生效,无需重启MySQL。
)
瞎整半天- -,没有解决
还是回到最初的那个帖子,好像还没看完呢,毕竟也感觉很靠谱
然后看到帖子后面附了一篇文章,按这文章改依然没有解决,不过值得注意的是我的user表里User项为root的不止localhost和localhost.localdomain,总之没解决,无限烦躁ing
就在觉得无计可施的时候,看到这帖子之前被我默默屏蔽了几行!!!果然不能想当然啊!!!
ln -s /var/lib/mysql /mysql .sock /tmp/mysql .sock
这是what ???
啊对 我系统里就没有/tmp/mysql.sock
执行这个软连接命令就ok了
我也不想再说啥了
-------
转别人帖子里的一段值得注意的东西:
帖子参见:http://www.blogjava.net/asenyifei/articles/82575.html
ll /var/lib/mysql/mysql.sock
看到的属性是:
srwxrwxrwx 1 mysql mysql 0 11-21 14:39 /var/lib/mysql/mysql.sock
这 个属性引起了我的注意,档案类型标志是s,还真没去了解过这样的类型,到鸟哥的私房菜去找了一下,原来,这个是资料接口档,用我们大陆说的习惯应该是套接字文件(sockets),这种文件一般用在网络上的资料套接,mysqld守护进程生成了这个文件,其他与mysql相关的程序想使用mysql,估计 就是通过这个文件了。
这种特殊文件即使是最高权限的root用户,也是不能查看不能编辑的,有点像档案标志是p的管道文件。
就这些吧~~写的好累
都是前车之鉴
不要就一个简单的问题笑话菜鸟,因为我们真的不懂,但我们在进步的路上