关于Mysql的那点事!

原文地址:关于Mysql的那点事! - lamb7758的博客 - 博客频道 - CSDN.NET

http://blog.csdn.net/lamb7758/article/details/53926090

在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'@'localhost'; 

数据库打开远程连接成功!

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

这个问题很很可能就是防火墙的原因了. 
执行下防火墙关闭命令:/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中即使改了这个设置,在查询时还是不会区分大小写。只是在导入导出时会对大小写有区别。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值