最开始,服务器部署使用的宝塔面板,数据库运维管理全都是在宝塔上可视化操作,并没有真正的面对数据库执行过命令。出于某些原因,后续不准备再继续使用宝塔面板,所以,记录一下关于 MySQL 数据库管理方面相关的方法和命令。
在服务器上,可使用 mysql 命令打开控制台:
mysql -uroot -p
Enter password: [输入密码]
进入 mysql 库,查询 user 表可查看用户信息:
User:用户名Host:允许登录用户的主机,% 表示允许所有主机登录。use mysql;
select * from user;
同理,命令中的
%表示允许所有远程主机登录,127.0.0.1或localhost表示允许本机登录。
# 赋予权限并修改密码
grant all privileges on *.* to 'root'@'%' with grant option;
alter user 'root'@'%' identified with mysql_native_password by 'root账户密码';
# 重新加载权限表
flush privileges;
使用 CREATE USER 创建用户
命令语法:
CREATE USER 'username'@'host' [ IDENTIFIED BY [ PASSWORD ] 'password' ] [ ,'username'@'host' [ IDENTIFIED BY [ PASSWORD ] 'password' ]]
使用示例:
CREATE USER 'test'@'localhost' IDENTIFIED BY 'testpassword';
使用 GRANT 创建用户
该命令可以在创建用户同时指定用户的访问权限
命令语法:
GRANT ON database.table TO user [IDENTIFIED BY [PASSWORD] 'password']
使用示例:
# 'test'.* 表示对 test库下的所有表具有ALL权限
GRANT ALL ON test.* TO 'test'@localhost IDENTIFIED BY 'testpassword';
权限类型():
指定授权范围:
*:表示当前数据库中的所有表。*.*:表示所有数据库中的所有表。db_name.*:表示某个数据库中的所有表,db_name 指定数据库名。db_name.tbl_name:表示某个数据库中的某个表或视图,db_name 指定数据库名,tbl_name 指定表名或视图名。tbl_name:表示某个表或视图,tbl_name 指定表名或视图名。db_name.routine_name:表示某个数据库中的某个存储过程或函数,routine_name 指定存储过程名或函数名。具体命令:
查询指定用户权限
show grants for root;
授予用户权限
命令语法:
GRANT ON database.table TO 'username'@'host';
使用示例:
# 为 test 用户授予 test 库下所有表的 SELECT, INSERT 权限
GRANT SELECT, INSERT ON test.* TO 'test'@'%';
回收用户权限
命令语法
REVOKE ON database.table FROM 'username'@'host';
使用示例:
# 回收 test 用户在 test 库下所有表的 SELECT, INSERT 权限
REVOKE SELECT, INSERT ON test.* FROM 'test'@'%';
可使用 DROP 命令删除用户,删除用户时需指定 host,默认删除 host 为 % 的账户,如果有其他账户不会被一起删除,需要指定 host 才能删除。
命令语法:
DROP USER 'username'@'host' [ , 'username'@'host' ]
使用示例:
# 删除 test 用户的 localhost 主机
DROP USER 'test'@'localhost';
ALTER USER USER() IDENTIFIED BY 'new_password';
命令语法:
CREATE DATABASE [IF NOT EXISTS] <数据库名>
[[DEFAULT] CHARACTER SET <字符集名>]
[[DEFAULT] COLLATE <校对规则名>];
命令说明:
IF NOT EXISTS:在创建数据库之前进行判断,只有该数据库目前尚不存在时才能执行操作。此选项可以用来避免命令因数据库已经存在而报错。[DEFAULT] CHARACTER SET:指定数据库的字符集。指定字符集的目的是为了避免在数据库中存储的数据出现乱码的情况。如果在创建数据库时不指定字符集,那么就使用系统的默认字符集。[DEFAULT] COLLATE:指定字符集的默认校对规则。常见字符集说明:
| 字符集 | 长度 | 说明 |
|---|---|---|
| gbk | 2 | 支持中文,但是不是国际通用字符集 |
| utf8 | 3 | 支持中英文混合场景,是国际通用字符集,只支持最长三个字节的 UTF-8 字符 |
| latin1 | 1 | MySQL 默认字符集 |
| utf8mb4 | 4 | 完全兼容 UTF-8,用四个字节存储更多的字符 |
常见校对规则说明:
校验规则指的是字符集比较大小的时候依据的准则,每种字符集都包含自己默认的校验规则。针对规则名称最后面的后缀,我们可以总结如下:
_ai :不区分重音
_as :区分重音
_ci :不区分大小写
_cs :区分大小写
_bin :二进制
使用示例:
# 创建 test 数据库
CREATE DATABASE test;# 创建 test 数据库,并指定字符集和校验规则
CREATE DATABASE test DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_chinese_ci;
SHOW CREATE DATABASE <数据库名>;
DROP DATABASE <数据库名>;