MySQL账号
远程登录
/etc/mysql/my.cnf
中默认配置有两个参数会禁止远程连接,要把注释掉:
-
skip-networking
-
bind-address
忘记root密码
幸运地是,重设密码很容易。
官方文档:https://dev.mysql.com/doc/refman/5.0/en/resetting-permissions.html
注意:MySQL的root用户和服务器操作系统的root用户是两个不同的用户,不要搞混了。
基本的思路是,以安全模式启动mysql,这样不需要密码可以直接以root身份登录,然后 重设密码。
首先,我们停掉MySQL服务:
sudo service mysql stop
以上命令适用于Ubuntu和Debian。CentOS、Fedora和RHEL下使用mysqld
替换mysql
。
以安全模式启动mysql:
sudo mysqld_safe --skip-grant-tables --skip-networking &
这样我们就可以直接用root登录,无需密码:
mysql -u root
接着重设密码:
mysql> use mysql; mysql> update user set password=PASSWORD("mynewpassword") where User='root'; mysql> flush privileges;
重设完毕后,我们退出,然后启动mysql服务:
mysql > quit
启动服务:
sudo service mysql start
同样,以上命令适用于Ubuntu和Debian,Centos、Fedora和RHEL需要用mysqld替换mysql。
现在可以尝试用新密码登录了:
mysql -u root -pmynewpassword
注意,-p
和密码间不能有空格。
其他方案1
以上是通用方案,在Ubuntu和Debian系统上,有一个debian-sys-maint
用户,Debian类
系统下一些系统脚本对mysql的操作是通过这个用户完成的。所以我们可以通过这个用户来
修改root密码。该用户的密码可以在/etc/mysql/debian.cnf
下找到:
# Automatically generated for Debian scripts. DO NOT TOUCH! [client] host = localhost user = debian-sys-maint password = PASSWORD socket = /var/run/mysqld/mysqld.sock [mysql_upgrade] host = localhost user = debian-sys-maint password = PASSWORD socket = /var/run/mysqld/mysqld.sock basedir = /usr
用该用户登录mysql后,也可以修改密码(具体修改过程见上):
sudo mysql -u debian-sys-maint -p
其他方案2
配置文件目录:
sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf`
找到[mysqld]
,在下面添加一行
skip-grant-tables
【提醒】默认的/etc/mysql/mysql.cnf
是一个导入文件,
一般不建议直接修改,如果你编辑这个文件也可以,
需要先输入[mysqld]
,再换行输入skip-grant-tables
。
第二步,重启mysql,然后免密登录
sudo service mysql restart msyql -u root -p
第三步,修改root密码
use mysql; update user set authentication_string=PASSWORD("你的密码") where user='root'; update user set plugin="mysql_native_password"; # 不用修改, 直接执行 重点 flush privileges; quit;
之前的教程,都知道更新了authentication_string
这个表,没有第3行的操作,
所以,退出重启mysql,还是无法用root登录
这应该是5.7更新安全规则的原因,一定要执行第3条和第4条
第四步,重新修改mysql.cnf
sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf`
在skip-grant-tables
前面,加一个#
号,注释掉,如果是生产环境,一定要修改
再重启mysql服务
sudo service mysql restart mysql -u root -p
输入密码,登录Mysql
用户管理
创建用户
yy
表示你要建立的用户名,后面的123
表示密码:
CREATE USER 'yy' IDENTIFIED BY '123';
如果要限制在固定地址登陆,比如localhost
登陆:
CREATE USER 'yy'@'localhost' IDENTIFIED BY '123';
删除用户
DELETE FROM user WHERE User="test" and Host="localhost"; FLUSH PRIVILEGES;
增加权限
可以从任何主机登录的权限:
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;
可以从指定主机登录的权限:
GRANT ALL PRIVILEGES ON *.* TO 'root'@'10.10.50.127' IDENTIFIED BY '123456' WITH GRANT OPTION;
指定一般用户可以从其他机器登录的权限:
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;
GRANT select, insert, update, delete ON *.* TO 'test1'@'%' IDENTIFIED BY "abc";
删除权限
REVOKE ALL ON *.* from 'test1'@'%';
REVOKE select, insert, update, delete ON *.* from 'test1'@'%';