DCL
在默认情况下,只有超级管理员才能操作数据库
访问控制权限
mysql实现了复杂的访问控制和权限系统,允许
命令行链接方式
mysql -u 用户名 -p密码 -h 服务器IP地址 -P 服务器端mysql端口 -D 数据u名
当客户端链接到服务器时,mysql访问控制两个阶段
1.链接
2.验证
默认表
创建mysql的时候就会有
user表:包含账户和权限列
db表:那个用户可以访问那个数据库
table_priv和columns_priv表:包含表级和列级操作
procs_priv:包含存储函数和存储过程的表
创建账户:
create user 用户名(格式:username@访问域名) identified by 密码[必须是明文,字符串]
用户名:
username@%
username@%.alibaba.com 只能访问alibaba.com 域名下的东西
省略@,表示%
通配符(%)和(-)
百分号或者-表示在任意部位都可以修改
删除用户
drop username@访问域名
drop username@访问域名,username1@访问域名,username2@访问域名
delete from user where user=username
查看用户权限
show grants for username@访问域名
点之前的部分表示数据库,(.)之后的部分表示表上的结果,
设置权限
grant 权限1,权限2【all:所有】on 库.表/库/表 to user 【 identified by 密码[必须是明文,字符串]】 【require 链接数据的方式】 【with [grant option | resource option]】(一般都写)
grant all on ( * . *) to username@访问域名 with grant option;
设置指定权限
create user rfc indentified by ‘密码’
grant select,update,delete on alibaba.* to rfc
执行无权利错误 1142(42000)
允许远程链接
grant all privileges on * . * to ‘root’@’%’ indentfied by ‘mysql’ with grant option; 设置权限密码用户名
刷新权限
flush privileges;
撤销权限
revoke privilege_type [(column_list)],[privilege_type [(column_list)]] on object_type.privilege_level from user,[user1,user2]
示例:
revoke select on * . * from user
修改密码
1.登录MySQL
set password for 用户名@localhost =password(‘新密码’)
2.登录MySQL
update user set password=password(‘密码’) where user=‘root’ and host=‘localhost’
刷新
3.用mysqladmin
mysqladmin -u用户名 -p旧密码 password 新密码
4.忘记root密码或者初始化密码
在windows上
1.关闭正在运行的mysql【必须】
2.打开DOS窗口,转到mysql\bin
3.输入
8.0版本以前:mysqld --skip-grant-tables 【跳过权限检查】
8.0版本:mysqld --console --sjip-grant-tables --shared-memory
4.再打开一个DOS窗口,转到mysql\bin目录
5.输入mysql回车,若成功,将出现mysql提示符
6.链接数据库: use mysql
7.改密码
update user set password=password('密码') where user='root' and host='localhost'
8.刷新权限
flush privileges;
9.退出
10.重启电脑早进入,修改完成
数据库备份
mysqldump
mysqldump -u 用户名 -p 密码 [-hlocalhost] 数据库名 > 输出的文件.sql
仅备份数据库结构
mysqldump -u 用户名 -p 密码 [-hlocalhost] --no-data 数据库名 > 输出的文件.sql
仅备份数据库数据
mysqldump -u 用户名 -p 密码 [-hlocalhost] --no-create-info 数据库名 > 输出的文件.sql
导出多个数据库
mysqldump -u 用户名 -p 密码 [数据库1,数据库2] > [输出的文件1.sql,输出的文件2.sql]
所有的:
mysqldump -u 用户名 -p 密码 --all-database > [all_dbs_dump_files.sql]
导入数据库
1、首先建空数据库
mysql>create database abc;
2、导入数据库
方法一:
(1)选择数据库
mysql>use abc;
(2)设置数据库编码
mysql>set names utf8;
(3)导入数据(注意sql文件的路径)
mysql>source /home/abc/abc.sql;
方法二:
mysql -u用户名 -p密码 数据库名 < 数据库名.sql
#mysql -uabc_f -p abc < abc.sql
查询
查询数据库
show databases;
删除数据库:
drop database sc;
查询表的结构:desc 表名;
查看基本表:show tables;
查询列
show columns from 表名;
show columns from 表名 like '关键字';
show columns from 表名 like '%e%';
show columns from 表名 where Field="关键字";
查询用户
select user from mysql;
当前用户:
select user();
select current_user();
当前登录的用户
select user,host,db,command from information_schema.processlist;[临时表]
数据库维护
分析表
analyze table 表名,【表名2,...】;
分析结果:
Table:表名;
Op:执行的操作
Msg_type:信息类型,状态/警告/错误
Msg_text:显示信息
优化表
optimize table 表名;
检查表
check table 表名;
只管检查,不管修复
修复表
尝试修复,不一定能修好
repair table 表名;
显示表是否修复;