- 安装了mysqlServer和mysql client后,并且可以登录到mysqlServer。
- 这里记录下安装后的一些问题:
MySQL后找不到my.cnf文件
Linux下用rpm包安装的MySQL是不会安装/etc/my.cnf文件的。我们执行mysql --help命令后,可以看到如
下信息:
可以看到mysqlServer启动的时候顺序读取的配置文件,但我们通过rpm包安装的Mysql是不会产生my.cnf
文件。
原因网上很多说法:这里只贴出个人比较赞同的说法,my.cnf文件只是配置参数,mysql启动的时候会
在按照上述的顺序读取配置文件,如果没有找到,mysql会使用内置的参数来启动。这里我们可以自己
创建一个my.cnf文件,首先我们切换到/usr/share/mysql/目录下,我们看到如下相关文件:
可以看到有很多的配置文件,随便查看一个
简单的意思是mysql根据运行级别的不同,有不同的配置文件,有轻量级,中等的,高的等。这里
我们拷贝一个my-medium.cnf 到/etc目录下,并重命名为my.cnf。这样就有了my.cnf文件了。
开启远程连接
虽然安装了mysqlServer,但只有本机器可以连接上mysql(mysql为了安全考虑,默认安装后禁止别的
主机访问)。
这里有两种方式来解决:
1.修改mysql系统表(mysql),登录mysql后,我们执行show databases;可以看到有如下表
然后执行use mysql,再执行show tables;我们可以看到有一个user表。
我们执行sql:select host,user,password from user;
这里user等于root的host值默认是localhost(%是我安装时改的,表示任何主机都可访问)。实际
你只要执行update user set host = ‘%’ where user =’root’; 这样即可。建议在开发时设 置成%,修改后需重启。
2.修改my.cnf:
在[mysqld] 所属域中,添加bind-address属性,指定为本机实际ip地址,如下
保存退出,重启。
这样就开启了远程连接。
MYSQL字符集设置
现在可以远程连接了,但我们操作中文时,会出现乱码情况,我们先执行如下命令:
show variables like '%char%';(查看全局字符变量)
1.这里介绍mysql的变量:mysql服务维护着两种变量:全局变量,会话变量。全局变量影响服务器
的全局操作。会话变量影响具体客户端连接相关操作。
全局变量:服务器启动时,全局变量初始化为默认值。可以在选项文件(配置文件)或命令行中指
定的选项来更改默认值。服务器启动后,通过连接服务器并执行set global(全局的)
var_name语句动态更改全局变量。该用户必须具有SUPER权限。
如:set global character_set_client = gbk;
会话变量:服务器为每个客户端连接维护会话变量。连接时使用相应全局变量初始化客户端会话
变量。客户可以通过set session var_name语句动态更改会话变量。设置会话变量不
需要特殊权限,但客户只更改自己的会话变量,不更改其它客户的会话变量。
如:set session character_set_client = gbk;
2.关于mysql中字符集的转换过程:
character_set_client:客户端来源数据使用的字符集
character_set_connection:连接层字符集
character_set_database:当前选中数据库的默认字符集
character_set_server:默认的内部操作字符集
character_set_results:查询结果字符集
character_set_system:系统元数据(字段名等)字符集
客户端以’character_set_client’定义的字符集来编码用户输入的MySQL命令或sql语句。客户端连接
mysqlServer后,建立了一条’数据通信链路’,MySQL命令或sql语句沿着’数据链路’传向MySQL服务器,由
“character_set_client”定义的字符集转换为character_set_connection定义字符集。MySQL服务实
例收到数据通信链路中的MySQL命令或sql语句,将MySQL语句或sql语句从character_set_connection
字符集转换为character_set_server定义的字符集。若MySQL命令或sql语句针对于某个数据库进行操
作,此时将MySQL命令或sql命令从character_set_server定义的字符集转换为character_set_data
base定义的字符集MySQL命令或sql语句执行结束后,将执行结果设置为character_set_results定义
字符集执行结果沿着打开的数据通信链路原路返回,将执行结果又character_set_results定义的字符
集转character_set_client定义的字符集。
3.解决方案:执行操作前设置会话变量和修改配置文件(my.cnf,此为修改全局变量)
重启服务即可。
更改MYSQL数据库不区分大小写表名
1.在LINUX下的MYSQL默认是区分表名大小写的,这会导致项目操作数据库时老是报表不存在的错误信
息,执行show variables like '%lower_case_table_nam%'命令后
0:区分大小写,1:不区分大小写
2.MySQL在Linux下数据库名、表名、列名、别名大小写规则如下:
数据库名与表名是严格区分大小写的;
表的别名是严格区分大小写的;
列名与列的别名在所有的情况下均是忽略大小写的;
变量名也是严格区分大小写的
MySQL在Windows下都不区分大小写。
3.解决方法:依据上述字符集的方案(修改会话变量或配置文件)
修改配置文件:在[mysqld]下加入一行:lower_case_table_names=1
重启即可。
上述的几个问题是我在安装mysql后,使用过程中遇到的问题,经网上查阅资料得以解决,这里总结记录
下问题及解决方案。