关于Mysql的那点事!

在Windows下使用Mysql数据库,一直相安无事,感觉比Oracle和Sql server稳定多了,而且占用资源少,方便开发应用。而在Linux下缺遇到了一些问题,今天就来说说这些事。
和在Windows下安装相比,在Linux安装和修改字符编码其实也很简单,以前的文章说过了这里不在叙述了。就说说下面这些问题

问题一:更新远程连接出现错误。

用mysql -uroot -p 登陆mysql,然后采用以下方法开启远程访问权限:

mysql>use mysql;
mysql>update user set host = '%' where user = 'root'; 

会出现这样的错误:ERROR 1062 (23000): Duplicate entry ‘%-root’ for key ‘PRIMARY’
具体情况如下所示:

[root@localhost Desktop]# mysql -uroot -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.1.73-log MySQL Community Server (GPL)

Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> use mysql
Database changed
mysql> update user set host = '%' where user = 'root';
ERROR 1062 (23000): Duplicate entry '%-root' for key 'PRIMARY'
mysql> 

然后执行

mysql> select user,host from user;
+------+-----------------------+
| user | host                  |
+------+-----------------------+
| root | %                     |
| root | 127.0.0.1             |
|      | localhost             |
|      | localhost.localdomain |
| root | localhost.localdomain |
+------+-----------------------+
6 rows in set (0.01 sec)

虽然报错了,貌似host也修改成功了,这就是问题所在了。

在linux下安装的数据库root用户绑定了多个IP,在Windows下
select user,host from user 后的结果之只有一行,如下
这里写图片描述

退出后 用mysql -uroot -p 登陆mysql就无法登陆了,这里可以看出在这种情况下登陆其实绑定的IP是localhost。数据库中已经不存在root关联localhost登陆了。
这时, 用mysql -uroot 回车可以直接进入数据库,show databases 会发现少了mysql这个库。
解决方式:用 mysql -uroot -h 127.0.0.1 -p******登陆
进入mysql库 ==> use mysql
创建用户root

CREATE USER 'root'@'%' IDENTIFIED BY 'lamb7758'; 

授权所有权限:GRANT ALL ON *.* TO 'root'@'%';
数据库打开远程连接成功!

问题二:数据库打开了远程连接,依旧无法远程连接。

这个问题很很可能就是防火墙的原因了.
执行下防火墙关闭命令:/sbin/service iptables stop

[root@localhost Desktop]# /sbin/service iptables stop
iptables: Flushing firewall rules:                         [  OK  ]
iptables: Setting chains to policy ACCEPT: filter          [  OK  ]
iptables: Unloading modules:                               [  OK  ]

然后,我就可以远程连接上了。

问题三:在Linux系统下,mysql区分大小写的问题

在公司调用的系统,服务器发货到用户,去部署时,发现以前创建的表不能使用了。系统发抛出异常显示对应的表不存在,所以所有的数据都无法插入进数据库。所以只能根据异常提示的表名,把表名进行相应的修改,然后系统就OK了。
虽然问题解决了,但是疑惑之处在于,这些表在公司调试时,是没有然任何问题的,都是可以使用的。到了客户那里机器安装之后才不能使用的,中间过程不设计数据库的操作。
附:
MySQL在Linux下数据库名、表名、列名、别名大小写规则:
   1、数据库名与表名是严格区分大小写
   2、表的别名是严格区分大小写
   3、列名与列的别名在所有的情况下均是忽略大小写的
   4、变量名也是严格区分大小写的
注意:
1、Linux下MySQL安装完后默认:区分表名的大小写,不区分列名的大小写
2、改变表名的大小写区分规则的方法:用root帐号登录,在/etc/my.cnf 或 /etc/mysql/my.cnf 中的[mysqld]下面添加添加lower_case_table_names=1
(0表示区分大小写,1表示不区分大小写)

# The MySQL server
[mysqld]
port = 3306
socket = /var/lib/mysql/mysql.sock
skip-external-locking
key_buffer_size = 16M
max_allowed_packet = 1M
table_open_cache = 64
sort_buffer_size = 512K
net_buffer_length = 8K
read_buffer_size = 256K
read_rnd_buffer_size = 512K
myisam_sort_buffer_size = 8M
# add here
lower_case_table_names=1

重启MySQL服务,若设置成功,则不再区分表名大小写。

MySQL在Windows下数据库名、表名、列名、别名都不区分大小写。

如果想大小写区分则在my.ini 里面的mysqld部分

加入 lower_case_table_names=0

注意:Windows中即使改了这个设置,在查询时还是不会区分大小写。只是在导入导出时会对大小写有区别。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值