Jade Dungeon

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'@'%';