MySQL常用命令

注意
本文最后更新于 2023-10-31,文中内容可能已过时。

摘要

1
mysql> SHOW DATABASES;
1
2
mysql> CREATE DATABASE 库名;
mysql> create database sonar character set utf8mb4 collate utf8mb4_unicode_ci;
1
2
mysql> USE 库名;
mysql> CREATE TABLE 表名 (字段名 VARCHAR(20), 字段名 CHAR(1));
1
mysql> DROP DATABASE 库名;
1
mysql> DROP TABLE 表名;
1
mysql> create user '[用户名称]'@'%' identified by '[用户密码]';

密码8位以上,包括:大写字母、小写字母、数字、特殊字符,%:匹配所有主机,‘localhost’,代表只能本地访问

1
mysql> drop user [用户名称]@'%';
1
mysql> grant all on [数据库名称].* to [用户名称];

*代表整个数据库

1
mysql> grant [权限1,权限2,权限3] on *.* to user@'host' identified by 'password'

常用权限:all privileges、create、drop、select、insert、delete、update

1
2
mysql> grant all privileges on *.* to root@'%' with grant option;
mysql> flush privileges;
  • all privileges:表示将所有权限授予给用户。也可指定具体的权限,如:SELECT、CREATE、DROP等。
  • on:表示这些权限对哪些数据库和表生效,格式:数据库名.表名,这里写"*“表示所有数据库,所有表。如果我要指定将权限应用到test库的user表中,可以这么写:test.user
  • to:将权限授予哪个用户。格式:“用户名”@“登录IP或域名”。%表示没有限制,在任何主机都可以登录。比如:‘root’@‘192.168.1.%’,表示root这个用户只能在192.168.0.* IP段登录
  • with grant option:通过在grant语句的最后使用该子句,就允许被授权的用户把得到的权限继续授给其它用户
1
mysql> revoke all on test.* from admin;

授权用户远程连接

在本机先使用root用户登录 mysql mysql -u root -p"youpassword" 进行授权操作:

1
mysql> GRANT ALL PRIVILEGES ON *.* TO root@'%' identified by 'root';

重载授权表

1
mysql> flush privileges;

方法1: 用SET PASSWORD命令

首先登录MySQL。

格式

1
mysql> set password for 用户名@localhost = password('新密码');

例子

1
mysql> set password for root@localhost = password('123');

方法2:用mysqladmin

格式

1
mysqladmin -u用户名 -p旧密码 password 新密码

例子

1
mysqladmin -uroot -p123456 password 123

方法3:用UPDATE直接编辑user表

首先登录MySQL。

1
2
3
mysql> use mysql;
mysql> update user set password=password('123') where user='root' and host='localhost';
mysql> flush privileges; 

方法4:使用 alter user 修改

1
2
mysql> alter user 'root'@'%' identified by '123456';
mysql> flush privileges;

ERROR 1045 (28000): Access denied for user

大意就是你有一个用户名为空的账户,mysql会先匹配它,然后就一直提示你密码错误,删掉这个匿名用户,然后执行FLUSH PRIVILEGES

1
2
mysql> delete from user where user=' ';
mysql> flush privileges;

插件库的文件名是validate_password。要在服务器启动时加载插件,可以使用--plugin-load-add选项来命名包含它的库文件。使用这种插件加载方法,必须在每次服务器启动时提供该选项。例如,将这些行放到服务器my.cnf文件中(根据需要调整平台的.so后缀)

1
2
3
4
[mysqld]
plugin-load-add=validate_password.so
#服务器在启动时加载插件,并防止在服务器运行时删除插件。
validate-password=FORCE_PLUS_PERMANENT
1
mysql> install plugin validate_password soname 'validate_password.so';
1
mysql> show variables like 'validate_password%';

用于控制validate_password行为系统参数

这些参数是要安装好validate_password 插件后才能通过show variables like 'validate_password%';看到。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
validate_password_policy 这个参数用于控制validate_password的验证策略 0-->low  1-->MEDIUM  2-->strong。
策略解释
0 or LOW 校验级别最低,只校验密码长度,只要长度跟validate_password_length一样即可,默认长度是8位。
1 or MEDIUM 这个时候首先要满足的是validate_password_policy=0时的验证要求。然后先去验证密码中的数字个数,大小写个数,特殊字符个数。
2 or STRONG 这个时候必须先满足0,1的要求,然后它还追加了一个,对于密码中任意连续4个(或4个让上)字符不得是字典中的单词

validate_password_length密码长度的最小值(这个值最小要是4)。
validate_password_number_count 密码中数字的最小个数。
validate_password_mixed_case_count 大小写的最小个数。
validate_password_special_char_count 特殊字符的最小个数。
validate_password_dictionary_file 字典文件
1
2
3
4
mysql> set global validate_password_length=8
mysql> set global validate_password_number_count=1
mysql> set validate_password_mixed_case_count=1
mysql> set validate_password_special_char_count=1

相关内容