在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中即使改了这个设置,在查询时还是不会区分大小写。只是在导入导出时会对大小写有区别。