MAC MySQL配置安装及ROOT权限设置
【1】官网下载MySQL-5.7.18-osx10.9-x86_64.dmg
<注:dmg安装方式,新版本的安装包内,只有一个pkg包>
点击安装包,开始安装,标准安装即可,不要犹豫,同意,一路Next(继续)。
安装成功后,会在系统偏好设置中出现MySQL服务项,如图所示:
1.png
注:安装成功后,会在usr/local/下出现mysql和mysql-<你的mysql版本>两个文件夹
我也不清楚为什么会产生两个文件夹,仔细比对过内容几近相同,至今不明所以,求指点!
【2】 点击运行MySQL,会看到如下内容:
2.png
点击Start MySQL Server,红色stopped会变为绿色running,证明mysql已经启动。
【3】对于如何快捷访问mysql的方法各不相同,繁简各异,此处本人采用自认比较简单的配置方法:
配置用户文件.bash_profile (如果没有此文件,以下操作,会自动创建)中添加如下配置即可,
打开Terminal,输入:vim .bash_profile
进入编辑界面,添加以下内容:export PATH=$PATH:/usr/local/mysql/bin
按下esc键,输入 :wq 保存退出
使配置文件生效:source .bash_profile
【4】退出后,Terminal界面直接输入mysql出现如下信息:
3.png
【5】至此常规访问MySQL已经完成,但查询库,会发现MySQL中并没有自带的两个库:mysql、performance_schema
查阅相关资料,是因为MySQL认证和授权两大机制(权限问题)的存在,没有以任何用户身份登录的缘故
众所周知,我们在写连接数据库的代码时,会有root和password,那么我们来用root登录:
输入:mysql -u root -p
要求输入密码:MAC安装时并没有设置root密码之类,相信很多人会
有疑惑,不用担心,此时直接enter会发现依然进入了mysql界面,再次show databases;便会看到mysql、performance_schema的两个库:
4.png
*MAC首次安装MySQL,默认的root密码为空,所以直接enter,即可查询root权限的库表内容,但这显然太不安全,我们需要为root用户设置密码来保护收据的安全,但马上问题就来了。
【6】登录root后,出于安全性考虑,我首先对mysql的user表进行了手动更改,为root用户设置了密码,update mysql.user set Password='123456' where User='root';
,退出数据库,再次登录:mysql -u root -p 输入设置的密码。
发现报以下错误:
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
错误的意思是:root用户访问被拒绝,password已启用
很诧异,既然密码为空可以访问,那设置之后为什么不行了呢,看到拒绝访问,显然又想到是权限问题,但事实并非如此, 其实真正原因是为root设置的密码所导致,正确的设置语句是:
update MySQL.user set authentication_string=password('123456') where user='root' ;
使用我手动的更改sql语句后,表中的password字段为数字:123456,使用上面的语句修改之后,表中是加密的password内容,就是这一点导致我们无法root登录如果是第一次登陆root,按照上面的sql进行修改方,但发生像本人的情况后,会发现无法进入root权限的库表内容,所以无法再更改password。
【7】让我们来解决掉ERROR 1045 (28000)问题
1)关闭MySQL服务,Stop MySQL Server,running变为stopped
5.png
2)然后,打开Terminal,输入:sudo su回车
输入你当前mac用户的管理密码,回车
mysqld_safe --skip-grant-tables --skip-networking &
回车
此时mysql会启动,这个命令是让我们暂时越过权限机制,不需要password,直接登录MySQL。
3)command+T再打开一个Terminal,不要关闭之前的Terminal,
root登录:mysql -u root回车
修改root密码:
update MySQL.user set authentication_string=password('123456') where user='root' ;
刷新权限:flush privileges;
OK,至此,问题搞定!