赞
踩
经常在自己搭建环境的时候遇到 Navicat 连接不上mysql,以及如何去跟踪正在执行的SQL语句,现将常遇到的问题总结如下:
一.在连接Navicat时提示:1130-host ... is not allowed to connect to this MySql server
解决方法:
(1)修改表
导致问题数据库不允许远程登录,只允许本地链接,在本地进入mysql,执行以下语句。
mysql>update user set host = '%' where user = 'root';
解释 host='%' 允许所有的ip访问数据库
如果改为host='192.168.1.33' 就是只允许ip为192.168.1.33访问数据库。
查询是否添加成功
mysql>select host,user from user;
(2)授权法
如使用户名为root 密码为123456 的账号从任意ip登录到mysql 则执行以下语句
mysql>GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION; //让用户名为root,密码为123456,任意ip访问数据库
mysql>FLUSH PRIVILEGES; //使修改生效
如让ip为192.168.1.33的用户使用用户名为root 密码为123456 来访问数据库
mysql>GRANT ALL PRIVILEGES ON *.* TO 'root'@'192.168.1.33' IDENTIFIED BY '123456' WITH GRANT OPTION;
mysql>FLUSH PRIVILEGES;
如使用用户名为root 密码为123456 ip为192.168.1.33的主机连接到mysql服务器的test数据库,则执行
mysql>GRANT ALL PRIVILEGES ON dk.* TO 'root'@'192.168.1.33' IDENTIFIED BY '123456' WITH GRANT OPTION;
mysql>FLUSH PRIVILEGES;
二.遇到Navicat报 2003 can't connect to mysql server on 10038
解决办法:
首先我们通过
① [root@T-centos6-5n bin]# netstat -an|grep 3306
来查看mysql默认的端口3306是否开启,允许哪个ip使用,如果你发现,前面有127.0.0.1,就说明,3306端口只能本机ip使用
所以,我们需要
②:打开mysql配置文件vi /etc/mysql/mysql.conf.d/mysqld.cnf
将bind-address = 127.0.0.1注销
③:进入mysql,对远程用户进行授权,
[root@T-centos6-5n bin]# grant all privileges on *.* to 'root'@'%' identified by '123456';
这里的root 是你远程登录的用户,123456是你登录使用的密码,然后可以在mysql数据 表中查看到你这个用户已经被添加到user表中
三.在执行脚本或操作程序时想要知道执行了哪些SQL语句可以通过以下方法来实现
mysql查看正在执行的sql语句,
1.使用processlist,但是有个弊端,就是只能查看正在执行的sql语句,对应历史记录,查看不到。好处是不用设置,不会保存。
mysql> use information_schema;
mysql> show processlist;
或者:
mysql>select * from information_schema.`PROCESSLIST` where info is not null;
2、开启日志模式
(1)设置
mysql> SET GLOBAL log_output = 'TABLE'; SET GLOBAL general_log = 'ON'; //开启日志
mysql>SET GLOBAL log_output = 'TABLE'; SET GLOBAL general_log = 'OFF'; //当查询完毕后记得将 日志关闭
(2)查询
mysql>SELECT * from mysql.general_log ORDER BY event_time DESC;
查询完后记得清空表
(3)清空表(delete对于这个表,不允许使用,只能用truncate)
mysql>truncate table mysql.general_log;
四、利用mysql存储过程来造大量测试数据
这里使用Navicat 进行创建命令。
如向tbl_user这张表里造100个用户名为test01~test100 密码全部为123456 这100个测试数据 数据库id 为1到100.
DELIMITER ;;
CREATE PROCEDURE `testname`() #testname 可以任意取名
BEGIN
DECLARE i INT;
START TRANSACTION;
SET i=1;
WHILE i<=100 DO
INSERT INTO `tbl_user`(id, userName,password) VALUES(i,CONCAT('test',i),123456);
SET i=i+1;
END WHILE;
COMMIT;
END
;;
DELIMITER ;
执行结束后在单独执行以下语句
call testname
执行结果如下:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。