Mysql的用户授权及备份

1.用户授权

1.1用户授权
	1.1.1grant授权命令
		1)格式
			grant 权限列表 on 库名.表名 to 用户名@"客户端地址" identified by '密码' [with grant option]

			权限列表:
				all : 所有权限
				usage : 无权限
				insert,delete,update,select,... :部分权限
				insert(字段,...),delete(字段,...),... : 指定字段权限

			库名.表名:
				*.* : 所有库
				mysql.* : mysql库
				mysql.user : mysql库的user表

			登录用户:
				-由两部部分组成: 用户名  (和)  客户端地址,必须两个都满足才能远程登录到数据库服务器.
				-用户名:
					-授权时自定义 要有标识性
					-存储在mysql库的user表里
				-客户端地址:
					%:表示所有主机地址
					192.168.4.%:表示4网段的主机
					192.168.4.51:单个主机
					localhost:本机数据库服务器
		2)案例1:
			grant all on *.* to hly@"192.168.4.%" identified by '123qqq...A' with grant option

	1.1.2相关命令
		1)远程登录用户常用指令(command)
			select user()	//查看数据库当前登录用户
			show grants		//查看当前用户权限
			show grants for 用户@"客户端地址"	//管理员查看已授权用户的权限
			set password=password("密码")	//用户为自己设置新的密码(password():是加密函数)
				select	//查看(在屏幕上显示)
				mysql> select password("123456");
				+-------------------------------------------+
				| password("123456")                        |
				+-------------------------------------------+
				| *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
				+-------------------------------------------+
				1 row in set, 1 warning (0.00 sec)

			set password for 用户@"客户端地址" =password("密码") 	//管理员为用户设置新的密码===grant命令也可以设置密码
			drop 用户名@"客户端地址"	//管理员删除授权用户

	1.1.3授权库
		1)mysql库 记录授权信息:

		-mysql.user:存储(记录)授权的 所有用户和 对应的权限是否拥有  					(user表里 的 权限是指 该用户对 所有库,所有表 的 权限是否拥有)
			管理工具下 会 有多个库 ,所以 这个表 下对应 的权限就是 对 所有库所有表的权限 
			
			此表的权限范围:所有库,所有表
			此表的权限类型:根据管理员 授予的 权限

		-mysql.db : 存储用户对某一个数据库的权限
			(db表里 的 权限是指 该用户对 某一个数据库 的权限是否拥有)
			库里会有多个表,所以 给库 授予什么权限, 授权用户就是对库下的(所有)表或者数据可以有什么样的操作
			这个表下     对应的权限      就是     对该库下的所有表或数据的 权限

			此表的权限范围:某一个库(对应下的所有表,数据等等)
			此表的权限类型:根据管理员 授予的 权限


		-mysql.tables_priv : 存储用户对表的权限
			(tables_priv表里 的权限 是指 
			1>该用户 对某张表 有什么权限,
			2>同时也会显示 该用户 对 表中的某个字段 所拥有的权限,但是不够具体,只显示权限,但是不显示,哪个字段对应哪个权限.)

			此表的权限范围:某一个表
			此表的权限类型:根据管理员 授予的 权限



		-mysql.columns_priv : 存储用户对字段的权限
			(columns_priv表里 的权限 是指 该用户 对 表中 某个字段 有什么权限)

			此表的权限范围:某一个表
			此表的权限类型:根据管理员 授予的 权限


			个人理解(权限的类型):
				不同的 类型的 东西 对应的权限 也不同
				授予不同的 命令使用 也就相当于 授予对应的权限使用
					如:
					数据对应的权限:insert;delete;update;select等
					表结构对应的权限:alter,....等



		
		查看表记录可以获取用户权限,也可以通过修改表记录,修改授权用的权限
					
		update mysql.tables_priv set table_priv="select,update,insert,delete" where user="admin";	//通过修改表记录 更改授权用户的权限
		flush privileges;	//刷新表记录
		show grants for admin@"192.168.4.%"

		2)案例:
		对一台数据库,首要三步走:
			1)管理员查看所有的授权用户:
			select host,user from mysql.user;

			2)管理员根据命令查看每一个授权用户 有什么权限
			show grants for 用户名@"客户端地址";

			3)再根据权限,可以到对应的表中 查看 对应的信息
			mysql.user ; mysql.db ; mysql.tables_priv ;  mysql.columns_priv




	1.1.4撤销授权
		1)//取消授权用户的某项权限,不删除用户
		revoke 权限列表 on 库名.表名 from 用户@客户端地址

		2)案例
		revoke all on webdb.* from webuser@"%"
		grant select on webdb.* to webuser@"%"
1.2root密码
	1.2.1重置root密码
		 1)在shell命令行修改登录
			-需要验证旧密码
			]#mysqladmin -uroot -p旧密码 password '新密码';
		2)恢复root密码
			-不需要验证旧密码
			]#vim /etc/my.cnf
				[mysqld]
				.. ..
				skip-grant-tables
			]#systemctl restart mysqld
			]#mysql
			mysql>update mysql.user set authentication_string=password("密码") where user="root" and host="localhost" ;
			mysql>flush privileges;

备份的方式:

物理备份:cp;tar 
逻辑备份:mysqldump(完全备份) ;binlog(增量备份)---mysql自己的备份方式 
		innobackupex:一款基于mysql的备份软件,可以实现完全备份,增量备份

2完全备份

2.1备份概述
	2.1.1数据备份的方式	
		1)物理备份
			-冷备份:cp,tar,.. ..
		2)逻辑备份
			-mysqldump	//备份命令
			-mysql		//恢复命令
	2.1.2物理备份及恢复
		1)备份操作
			-cp -r /var/lib/mysql /备份目录/mysql.bak
			-tar -zcf /root/mysql.tar.gz /var/lib/mysql/*
		2)恢复操作
			-cp -r /备份目录/mysql.bak/* /var/lib/mysql/
			-tar -xf /root/mysql.tar.gz -C /var/lib/mysql/
			-chown -R mysql:mysql /var/lib/mysql

2.2逻辑备份
	2.2.1数据备份策略
		1)完全备份
			-备份所有数据
		2)增量备份
			-备份上次备份后,所有新产生的数据
		3)差异备份
			-备份完全备份后,所有新产生的数据
	2.2.2完全备份及恢复
		1)完全备份
			]#mysqldump -uroot -p密码 库名 > /目录/xxx.sql
		2)完全恢复
			]#mysql -uroot -p密码 [库名] < /目录/xxx.sql
		3)备份时库名表示方式
			-	--all-databases or A	//所有库
			-	-B 库名1 库名2 库名3 ...		//多个库
			-	库名						//单个库
			-	库名 表名					//单个表

		4)注意事项(原理):
			-无论是备份还是恢复, 都要验证用户权限
		
			-恢复所有库或多个库时,不需要指定库名(因为恢复的文件,会先判断 恢复的库 是否存在,若存在 则删除并重新建库恢复)
		
			-恢复单个库的时候,需要指定库名(因为恢复的文件中,没有建库的语句在里面,但是会判断恢复的表是否存在,若存在则删除,重新创建并恢复)

			-恢复单个表的时候,需要指定库名(因为恢复的文件中,没有建库的语句在里面,但是会判断恢复的表是否存在,若存在则删除,重新创建并恢复)

3增量备份

3.1binlog日志
	3.1.1日志概述
		1)什么是binlog日志
			-也称作 二进制日志
			-MySQL服务日志文件的一种
			-记录除查询之外的所有SQL命令
			-可用于数据备份和恢复
			-配置mysql主从同步的必要条件
	3.1.2启用日志
		1)步骤
			vim	/etc/my.cnf
				[mysql]
					log_bin=/logdir/hly	//启用binlog日志
					server_id=50		//指定服务id值
					max_binlog_size=500m	//指定日志文件容量,默认1G
					:wd
			mkdir /logdir
			chown mysql /logdir
			systemctl restart mysqld

			mysql -uroot -p123qqq...A
			show master status;
			create database db5;
			create table db5.t1(id int);
			insert into db5.t1 values(100);
			insert into db5.t1 values(200);
			insert into db5.t1 values(300);
			show master status;

		1.1)binlog相关文件
			-主机名-bin.index	//索引文件,如果配置文件中指定了binlog日志文件名,则是	文件名.index 文件名.000001 文件名.000002
			-主机名-bin.000001	//第1个二进制日志
			-主机名-bin.000002	//第2个二进制日志
			-.. ..


		2)生成新的日志文件
			手动:1>	mysql>flush logs;
					== #mysql -uroot -p123qqq...A -e "flush logs"
				show master status;	//查看当前使用日志状态,记录日志也会在当前使用日志 记录
				2>	systemctl restart mysqld
			在完全备份之后生成新的日志文件:
				1>	mysqldump -uroot -p123qqq...A --flush-logs db5 > /root/db5.sql
					mysqldump -uroot -p123qqq...A --flush-logs -B 	db3 db5 > /root/db3-5.sql	//备份几个数据库,就新生成几个日志文件
					show master status;
	3.1.3清理日志
		1)删除指定编号之前的binlog日志文件
		mysql> purge master logs to "hly.000004";
			Query OK, 0 rows affected (0.06 sec)
		2)删除所有binlog日志,并重新生成新日志
		mysql> reset master;
			Query OK, 0 rows affected (0.13 sec)
		mysql> show master status;
+------------+----------+--------------+------------------+-------------------+
| File       | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------+----------+--------------+------------------+-------------------+
| hly.000001 |      154 |              |                  |                   |
+------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)

		3)rm -rf /logdir/*
		mysql> reset master;
3.2恢复数据
	3.2.1分析日志
		1)查看日志当前记录格式
			mysql>show variables like "binlog_format";
			三种记录方式:
			1.statement	//报表模式
			2.row		//行模式(二进制)
			3.mixed		//混合模式(有源码)
		2)修改日志记录格式
			]#vim /etc/my.cnf
				[mysqld]
				.. ..
				binlog_format="名称"
		3)查看日志内容
			-mysqlbinlog [选项] /目录/binlog日志文件名
			
			选项:
		--start-datetime="yyyy-mm-dd hh:mm:ss"	起始时间
		--stop-datetime="yyyy-mm-dd hh:mm:ss"	结束时间

		--start-position=数字	起始偏移量
		--stop-position=数字		结束偏移量

	3.2.2恢复数据
		1)基本思路
			-使用mysqlbinlog提起历史SQL操作
			-通过管道交给mysql 命令执行
		2)命令格式
			-mysqlbinlog /目录/日志文件 | mysql -uroot -p密码
		3)应用示例
			使用编号为3的日志文件恢复数据
			mysqlbinlog --start-position=223 --stop-position=896  /var/lib/mysql/mysql-bin.000003 | mysql -uroot -p123qqq...A
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值