MySQL 管理
数据的备份
属于DCL:数据控制语言!control
备份:就是将已有的数据复制一份,存放到其他的存储单元!
常见的有:文本备份,数据备份和sql备份
文本备份
文本备份是最简单的,复制——粘贴!
一般认为,只适合Myisam存储引擎的表!
因为Myisam引擎的表它会将表分为三个部分来进行存储
文本备份的缺点:
每次都需要备份整个全部文件,非常浪费磁盘空间!
数据备份
就是只备份一张表的数据部分!
采用这种备份方式,如果误删了表的全部记录,还可以还原(也就是误使用delete语句),但是如果将整个表都删除了(误使用drop),不能还原!
备份语法
select *|字段列表 into outfile 文件地址 from 表名;
1 | select * into outfile 'd:/stu.sql' from stu; |
还原语法
load data infile 文件路径 into table 表名[字段列表];
1 | load data infile 'd:/stu.sql' into table stu; |
数据的导出工具 mysqldump
将表的结构和数据通过sql语句的形式进行备份!
mysql中有一个专门用来sql备份的客户端 mysqldump.exe
! 位于bin目录下,不需要登录即可使用。在命令行窗口使用。
备份语法
1 备份库
1 | ## 备份一个库 |
2 备份表1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16## 一次备份一个表
mysqldump –hPup 数据库 表名 > 指定的文件中
## 一次备份多个表
# 表名之间是使用空格分隔
mysqldump –hPup 数据库 表名1 表名2 表名n > 指定的文件中
# -h 主机名,本地可省略
# -P 端口,可省略
# -u 用户名
# -p 密码
# > 输出重定向
## 示例
mysqldump -u root -p -B studb stu1 > d:/studb.sql
mysqldump -u root -p -B studb stu1 stu2 > d:/studb.sql
还原语法
1 | ## 导入到指定库中 |
用户和权限管理
用户权限管理:在不同的项目中给不同的角色(开发者)不同的操作权限,为了保证数据库数据的安全。
通常,一个用户的密码不会长期不变,所以需要经常性的变更数据库用户密码来确保用户本身安全(mysql客户端用户)
用户管理
Mysql需要客户端进行连接认证才能进行服务器操作:需要用户信息。Mysql中所有的用户信息都是保存在mysql数据库下的user
表中。
默认的,在安装Mysql的时候,如果不选择创建匿名用户,那么意味着所有的用户只有一个:root超级用户
在mysql中,对用户管理中,是由对应的Host和User共同组成复合主键来区分用户。User
:代表用户名。Host
:代表允许访问数据库的客户端(IP或者主机地址)。如果host使用%代表所有的用户(客户端)都可以访问。
创建用户
基本语法:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16-- 使用 create user 语句创建用户
create user 'username' identified by '明文密码';
-- 或
create user 'username'@'host' identified by '明文密码';
-- -------------------------------------------------------------------------------
-- 使用 grant 语句创建用户
-- TODO
-- -------------------------------------------------------------------------------
-- 直接操作mysql数据表(不推荐)
-- 必须拥有对mysql.user表的insert权限
-- TODO:有些版本可能某些字段不同
-- insert into mysql.user(Host,User,Password,[privilegelist])
-- values('host','username',password('pwd'),privilegevaluelist);
用户 : 可以是 '用户名'
或'用户名'@'主机地址'
主机地址: 省略时默认为%
,即所有主机可访问此账户。privilegelist
权限字段password()
加密密码privilegevaluelist
对应的权限的值
示例:
1 | -- create user 语句创建localhost主机才可用的用户 |
删除用户
基本语法:
1 | -- 使用 drop user 语句删除用户(推荐) |
示例:
1 | -- 使用 drop user 语句删除用户 |
修改密码
Mysql中提供了多种修改的方式:基本上都必须使用对应提供的一个系统函数:password()
,需要靠该函数对密码进行加密处理。
普通用户修改密码
普通用户登录后,通过set
语句设置自己的密码。
1 | set password = password('new_password'); |
'new_password'
新密码
root用户修改普通用户密码
1 | -- 使用 set 语句修改 |
root用户修改root的密码
1 | -- 使用 set 语句修改 |
root 密码丢失的解决方案
如果忘记了root用户密码,就需要去找回或者重置root用户密码
1 使用 –skip-grant-tables 选项启动mysql服务
首先,停止mysql服务 。
启动服务器但是跳过权限,当前启动的服务器没有权限概念:非常危险,任何客户端,不需要任何用户信息都可以直接登录,而且是root权限。
Windows 中,如果mysql目录添加到环境变量中,可直接使用 mysqld
或mysqld-nt
来启动服务,否则,在bin目录使用如下命令:1
2
3
4
5-- mysqld 命令
mysqld --skip-grant-tables
-- mysqld-nt 命令
mysqld-nt --skip-grant-tables
Linux 中,使用mysqld_safe
或使用 /etc/init.d/mysql
命令来启动服务1
2
3
4
5-- mysqld_safe 命令
mysqld_safe --skip-grant-tables user=mysql
-- /etc/init.d/mysql 命令
/etc/init.d/mysql start-mysqld --skip-grant-tables
启动mysql服务后,就可以用root用户登录了
2 使用root登录,重置密码1
2-- widows:无需密码登录root
mysql -u root
登录成功后,可修改root的密码,参考 root修改root的密码 章节。
3 加载权限表
修改密码后,必须用如下语句加载权限表,新的密码才能生效,同时mysql服务器开始权限验证。
1 | flush privileges; |
之后,将mysqld --skip-grant-tables
的窗口关闭,即可使用新密码来登录mysql。
权限管理
在mysql中将权限管理分为三类:
1、 数据权限:增删改查(select|update|delete|insert)
2、 结构权限:结构操作(create|drop)
3、 管理权限:权限管理(create user|grant|revoke):通常只给管理员如此权限
授予权限:grant
将权限分配给指定的用户
基本语法:grant 权限列表 on 库名.表名 to 用户;
权限列表:使用逗号分隔,但是可以使用all privileges
代表全部权限
数据库.表名:可以是单表(数据库名字.表名
),可以是具体某个数据库(数据库.*
),也可以整库(*.*
)
取消权限:revoke
权限回收:将权限从用户手中收回
基本语法:revoke 权限列表 on 库名.表名 from '用户名' [@主机地址];
刷新权限:flush
Flush:刷新,将当前对用户的权限操作,进行一个刷新,将操作的具体内容同步到对应的表中。
基本语法:flush privileges;