PHP连接MySQL服务器老是出错
3306端口吧,不是8080
<php
$host="localhost";
$db_user="root"; //用户名
$db_pass="1"; //密码
$db_name="lianxi"; //数据库名
$timezone="Asia/Shanghai";
$link=mysql_connect($host,$db_user,$db_pass);
mysql_select_db($db_name,$link);
mysql_query("SET names UTF8");
header("Content-Type: text/html; charset=utf-8");
date_default_timezone_set($timezone); //北京时间
>
一、mycnf配置文件datadir项配置错误或被启动脚本篡改
这个问题不太说讲,主要是mysql自带的启动文件(/etc/initd/mysqld)中会自动检测mysql的数据存储目录,若mysql新装,尚未初始化系统表,那么配置文件中的datadir项写不写无所谓,出现这种情况主要是在更改了mysql的数据存储目录,今天我出现的这个问题就在于此。
我的mysql安装后的配置文件中关于datadir项目的配置如下,而该配置文件存储于/etc/mycnf,今儿不知动了什么东西,查来查去都没找着原因,后来打开该配置文件才发现,其中的datadir项目被篡改成/var/mysql/data了
[mysqld] datadir=/data/mysql socket=/tmp/mysqlsock user=mysql
二、进程里已经存在mysql进程
这种情况我很少遇到,若存在mysql进程但有不提供mysql服务(表现为其他客户端连接不上mysql服务器,例如php连接mysql时提示“连接失败”),这个时候就要看看有没有存在的mysql僵尸进程了,命令如下:
ps -ef|grep mysql
若存在,该命令执行后会列出存在的僵尸进程,kill -9 `pid`掉即可。
三、mysql的数据存储目录权限不足
这种情况发生于mysql第一次安装或升级,配置文件中的datatdir目录的权限要设定好,一般来说运行mysql的用户以及组就是mysqlmysql,那么解决权限不足问题的方法如下:
chown -R mysqlmysql /data/mysql ##该命令仅为示例,其中/data/mysql就是mysql配置文件中datadir的目录 ##若为空,则默认为mysql安装目录下的data文件夹下
四、覆盖安装或升级mysql后,残余数据的影响
这种情况发生于mysql被覆盖安装或升级后,当然mysql无故宕机后也会有这种情况,可能会影响mysql启动的数据文件,一般存在于mysql的数据存储目录(这个目录依据mycnf配置文件中的datadir而异),也就是存在于mysql数据存储目录下的mysql-binindex文件,删除之即可。
五、selinux的问题,centos下最容易出现
selinux不甚了解,直接关掉。
##方法1:永久关闭seliux ##修改 vi /etc/selinux/config #文件中设置SELINUX=disabled ,然后重启服务器 ##方法2:暂时关闭seliux setenforce 0 ##如需每次开机都铃声关闭seliux,则可以在/etc/rcd/rclocal文件中添加该命令
六、mysql运行状态下删除binary日志后重启失败
这是今天在群里的一个朋友出现的,特汇总于此;当mysql开启了二进制日志并且mysql在运行状态下用rm命令删除过mysql的binary日志文件的话,下次重启mysql你就悲剧了。
什么是binary日志?说白了就是mysql的数据目录下的mysql-bin000001、mysql-bin000002的文件,下图所示。
解决方法就是修改配置文件临时关闭binary-log,然后删除mysql数据目录下的所有类似mysql-bin000001、mysql-bin000002的文件后再次重启,mysql即可启动成功。
#mysql配置关闭二进制日志 找到如下语句 注释掉即可 #log-bin=mysql-bin #binlog_format=mixed
此步骤操作完毕之后,若还需要启用二进制日志,那么就要先停掉mysql服务,然后修改msyql的配置文件,再次重启即可。
另外再附上正确删除mysql二进制日志文件的方法(绝对不是rm -rf命令直接删这些文件):
#第一步 通过shell或cmd登录进mysql 这步没什么好说的 msyql -u root -p #第二步 在mysql下直接执行清理binary日志命令 mysql> reset master #注意:此处仅针对单台mysql而言,若有互备mysql 则执行该命令有风险
提示是什么呢? 这个有几个可能哈
1,mysql版本问题 在mysql4。1之前 和mysql41之后 所用的密码校验方式方式不同 如果你用旧版本的mysql登录新版的话 就有可能出现登录不上的提示 这种提示内容通常是什么校验或者验证错误的
解决办法是请管理员给你改下密码 改的时候使用 old_password 函数
或者你装新版的mysql 不过如果你不想动你的phpmysql 还是采用上一种
2,给你的地址或者端口错误?或者你的防火墙挡住了mysql 假设给你的地址是1234 端口是3306 你可以telnet 1234 3306 看看连接能不能通
如果不通 关防火墙再试一次看通不通
MySQL我用的是apt安装的,有很多问题,建议大家用二进制程序安装。
问题描述
在服务器上登录MySQL只能用本地的127001地址,用服务器本身地址会提示拒绝访问
尝试修改MySQL远程访问权限
修改后发现没有用,MySQL依然拒绝远程访问
查看3306端口
root@sfpql:~# netstat -an|grep 3306
修改MySQL服务地址:
尝试远程连接
telnet sfpql 3306
结语
MySQL远程连接不上是常见问题,一般设置好MySQL的远程访问权限就可以了。
apt安装的MySQL会自己将启动地址设置在本地,同时apt安装的MySQL的服务查看命令是 systemctl status mysql 其他安装方式的常看命令是 systemctl status mysqld
这个错误提示是确认账号密码
首先考虑的是密码是否正确;
第二个考虑的是账号是否存在,即你那个'root'@'localhost',因为没有账号存在也是报这个错误;
第三,如果你的程序连的不是本地mysql,那你的这个账号是肯定行不通的,因为'localhost'只允许本地访问,你可以添加一个'root'@'%'的管理员用户,当然也可以直接把'localhost'改成'%',改完刷新一下数据库就生效了
0条评论