关于mysql常遇到的问题

经常在自己搭建环境的时候遇到 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 


执行结果如下:



猜你喜欢

转载自blog.csdn.net/user___1111/article/details/79164581
今日推荐