MySQL(十四)管理维护及性能优化
关于MySQL的学习,《MySQL必知必会》这本书呢,看完已经两个月了,一直被工作以及生活的一些琐事拖着,趁着今晚有空闲,就整理完了最后的几章学习笔记,接下来的学习计划呢,
应该是python-web开发以及工作上的关于微服务架构的一些知识点;学习是一种状态,更是一种习惯,只有很努力,才能看起来毫不费力!
一、安全管理
1、访问控制
MySQL服务器的安全基础是:用户对他们需要的数据有适当的访问权,即需要给用户所需的权限且仅提供所需的访问权,这就是所谓的访问控制它需要创建和管理用户账号。
注意事项:慎用root登陆的使用;仅在绝对需要时使用它,日常的MySQL操作中,应该使用我们创建的账号来操作。
2、管理用户
MySQL用户账号和信息存储在名为mysql的MySQL数据库中,一般不需要直接访问,但有时需要直接访问(比如需要获得所有用户账号列表时),为此可以使用如下命令:
USE mysql;
select user from user;
mysql数据库有一个名为user的表,它包含所有用户账号;user表有个名为user的列,它存储用户登录名、
3、用户账号
①创建用户账号
create user ben IDENTIFIED BY 'p@$$wOrd';
create user创建一个新用户账号,其中IEDNTIFIED BY用来指定一个口令,它指定的口令为纯文本,MySQL将在保存到user表之前对其进行加密;为了作为散列值指定
口令,使用IEDNTIFIED BY PASSWORD。
PS:grant和insert into的区别
grant也可以用来创建用户账号,但一般来说使用create user是最清楚和简单的;此外也可以通过插入行到user表来增加用户,但为了安全起见,不建议这么做。MySQL用来
存储用户账号信息的表极为重要,因此相对于直接处理,使用标记和函数来处理这些表更好。
②重新命名用户账号
rename user ben to imyalost;
③删除用户账号
删除用户账号(以及相关的权限),使用drop user语句,如下:
drop user imyalost;
4、设置访问权限
创建用户账号后,必须分配访问权限(新建的用户账号没有任何访问权限,可以登录但是无法读写);为了看到赋予账号的权限,使用如下语句:
show grants for imyalost;
用户定义:MySQL的权限用户名和主机名结合定义,如果不指定主机名,则使用默认主机名%(授予用户访问权限而不管主机名)。
设置权限使用grants语句,要求如下:
①要授予的权限
②被授予访问权限的数据库或表
③用户名
grant select on crashcourse.* to imyalost;
此grant允许用户在crashcourse.*(crashcourse数据库的所有表)上使用select,用户imyalost对crashcourse数据库中所有数据拥有只读权限。
每个grant添加(更新)用户的一个权限,MySQL读取所有授权,并根据它们确定权限。
grant的反操作为revoke,用它撤销特定的权限,例如:
revoke select on crashcourse.* from imyalost;
解析:这条revoke语句取消上面的赋予用户imyalost的select权限;被撤销的权限必须存在,否则会出错。
PS:grant和revoke可在几个层次上控制访问权限:
①整个服务器,使用grant all和revoke all;
②整个数据库,使用on database.*;
③特定的表,使用on database.table;
④特定的列;
⑤特定的存储过程;
PS:具体的可授予或撤销的MySQL权限,请自行搜索;
在使用grant和revoke时,用户账号必须存在,但对所涉及的对象没有这个要求,这样的好处是:允许管理员数据库和表之前设计和实现安全措施;缺点在于,
当某个数据库或表被删除时,相关访问权限仍然存在,而且如果将来重新创建数据库或表时,这些权限仍然起作用。
简化多次授权:可以通过列出各权限并用逗号分隔,将多余的grant语句串联,如下所示:
grant select,insert on crashcourse.* to imyalost;
5、更改口令
更改用户口令,可使用set password语句,新口令必须如下加密:
set password for imyalost = password('n3w p@$$w0rd');
解析:set password更新用户口令,新口令必须传到password()函数进行加密。
此外,set password还可以设置自己的口令,比如:
set password = password('n3w p@$$w0rd');
PS:不指定用户名时,set password更新当前登录用户的口令。
二、数据库维护
1、备份数据
MySQL数据也需要经常备份,由于MySQL数据库基于磁盘文件,普通的备份系统就能备份MySQL数据,但由于这些文件总是处于打开和使用状态,普通的文件副本备份不一定有效。
下面列出一些可行的解决方案:
①使用命令行实用程序mysqldump转储所有数据库内容到某个外部文件;在进行常规备份前该程序应该正常运行,以便能正确备份转储文件;
②使用命令行实用程序mysqlhotcopy从一个数据库复制所有数据(并非所有数据库引擎都支持该程序);
③使用MySQL的backup table或select into outfile转储所有数据到某个外部文件;这两条语句都接受将要创建的系统文件名,此系统文件必须不存在,否则会报错。
数据可用restoretable来复原。
PS:为保证所有数据被写入磁盘(包括索引数据),需要在备份前使用flush tables语句,刷新数据。
2、进行数据库维护
MySQL提供了一系列的语句,可用来保证数据库正确和正常运行,如下:
①analyze table orders;
此语句用来检查表键是否正确。
②check table orders,orderitems;
check table用来针对许多问题进行检查,在MyISAM表上还对索引进行检查。check table支持一系列的用语MyISAM表的方式,如下:
changed检查自最后一次检查以来改动过的表;
extended执行最彻底的检查;fast只检查未正常关闭的表;
medium检查所有被删除的链接并进行键检验;
quick只进行快速扫描。
③optimize table orders;
当从一个表删除大量数据,使用此语句来收回所用的空间,从而优化表的性能。
3、诊断启动问题
服务器启动问题通常在对MySQL配置或服务器本身进行更改时出现,一般在排除系统启动问题时,首先应尽量手动启动服务器;MySQL常用的mysqlid命令行如下:
①- -help显示帮助——————一个选项列表;
②- -safe-mode装载减去某些最佳配置的服务器;
③- -verbose显示全文本消息(为获得更详细的帮助消息与- -help联合使用);
④- -version显示版本信息然后退出。
4、查看日志文件
MySQL管理员依赖的一系列日志文件,主要的日志文件如下:
①错误日志:包含启动和关闭问题以及任意关键错误的细节。此日志通常名为hostname.err,位于data目录中;此日志名可用- -log-error命令行选项更改;
②查询日志:记录所有的mysql活动,诊断问题时非常有用;由于其可能很快地变得非常大,因此不应长时间使用它;日志名通常为hostname.log,位于data目录中,
此名字可用- -log命令行选项更改;
③二进制日志:记录更新过数据的所有语句。通常名为hostname-bin,位于data目录内,此名字可用- -log-bin命令行选项修改;
④缓慢查询日志:记录执行缓慢的任何查询。在确定数据库何处需要优化很有用,通常名为hostname-slow.log,位于data目录中,可使用- -log-slow-querier命令行更改。
PS:使用日志时,可使用flush logs语句来刷新和重新开始所有日志文件。
三、性能优化
改善数据库性能需要知道的一些关键点:
1、关键的生产DBMS应该运行在自己专用的服务器上;
2、MySQL使用一系列默认的设置预先配置的,但后期很可能需要调整内存分配、缓冲区大小等;
3、MySQL是一个多用户多线程的DBMS,它经常执行多个任务。如果这些任务中某个执行缓慢,则所有的请求都会执行缓慢,如果遇到显著的性能不良,可使用show processlist
显示所有活动进程(以及它们的线程ID和执行时间,还可以用kill命令终结某个特定进程);
4、编写select语句的方法很多,应多尝试联结、并、子查询等,找出最佳方法;
5、使用explain语句让MySQL解释它将如何执行一条select语句;
6、一般情况下,存储过程执行的比一条一条的执行其中的各条MySQL语句要快;
7、总是使用正确的数据类型;
8、绝不要检索比需要的还多的数据,即:不要使用select *(除非真正需要);
9、有的操作(包括insert)支持一个可选的delayed关键字,如果使用它,将把控制立即返回给调用程序,并且一旦有可能就实际执行该操作;
10、导入数据时,应关闭自动提交;
11、必须索引数据库表以改善数据库性能,应该分析使用select语句以找出重复的where和order by字句(如果一个简单的where子句返回结果花费时间过长,则可以断定其中
使用的列就是需要索引的对象);
12、使用多条select语句和连接它们的union语句,可以极大的改善性能;
13、索引改善数据检索的性能,但损害数据插入、删除和更新的性能。如果有些表收集数据但不经常被搜索,则在有必要之前不要索引它们(索引可根据需要添加和删除);
14、like很慢,一般建议使用fulltext;
15、数据库是不断变化的实体;
16、最重要的规则:每条规则在某些条件下都会被打破。
MySQL(十四)管理维护及性能优化的更多相关文章
- CentOS7安装CDH 第十四章:CDH的优化
相关文章链接 CentOS7安装CDH 第一章:CentOS7系统安装 CentOS7安装CDH 第二章:CentOS7各个软件安装和启动 CentOS7安装CDH 第三章:CDH中的问题和解决方法 ...
- MySQL查询语句执行过程及性能优化(JOIN/ORDER BY)-图
http://blog.csdn.net/iefreer/article/details/12622097 MySQL查询语句执行过程及性能优化-查询过程及优化方法(JOIN/ORDER BY) 标签 ...
- MySQL查询语句执行过程及性能优化-查询过程及优化方法(JOIN/ORDER BY)
在上一篇文章MySQL查询语句执行过程及性能优化-基本概念和EXPLAIN语句简介中介绍了EXPLAIN语句,并举了一个慢查询例子:
- MySQL学习笔记(二)性能优化的笔记(转)
今天,数据库的操作越来越成为整个应用的性能瓶颈了,这点对于Web应用尤其明显.关于数据库的性能,这并不只是DBA才需要担心的事,而这更是我们程序员需要去关注的事情.当我们去设计数据库表结构,对操作数据 ...
- 高性能MySQL笔记 第6章 查询性能优化
6.1 为什么查询速度会慢 查询的生命周期大致可按照顺序来看:从客户端,到服务器,然后在服务器上进行解析,生成执行计划,执行,并返回结果给客户端.其中“执行”可以认为是整个生命周期中最重要的阶段. ...
- MySQL主从复制日常管理维护篇
日常工作中,我们需要经常进行一些监控和管理维护工作,以便能及时发现一些复制中的问题,并尽快解决,以此来保证复制能够正常工作 1.查看从库状态 MySQL [(none)]> show slave ...
- MySQL查询语句执行过程及性能优化-基本概念和EXPLAIN语句简介
网站或服务的性能关键点很大程度在于数据库的设计(假设你选择了合适的语言开发框架)以及如何查询数据上. 我们知道MySQL的性能优化方法,一般有建立索引.规避复杂联合查询.设置冗余字段.建立中间表.查询 ...
- MySQL学习笔记:select语句性能优化建议
关于SQL中select性能优化有以下建议,仅当笔记记录. 1.检查索引:where.join部分字段都该加上索引 2.限制工作数据集的大小:利用where字句过滤 3.只选择需要的字段:减少IO开销 ...
- MYSQL ini 配置文件详解及性能优化方案
my.ini分为两块:Client Section和Server Section. Client Section用来配置MySQL客户端参数. 要查看配置参数可以用下面的命令: show va ...
随机推荐
- Confluence设置MySQL数据库报错:必须使用'READ-COMMITTED'作为默认隔离级别。
解决方案: mysql -u root -p123456 SET GLOBAL tx_isolation='READ-COMMITTED'; mysql数据库创建 1.设置mysql隔离级别 SET ...
- cSharp:use Activator.CreateInstance with an Interface?
///<summary> ///数据访问工厂 ///生成時間2015-2-13 10:54:34 ///塗聚文(Geovin Du) /// (利用工厂模式+反射机制+缓存机制,实现动态创 ...
- JavaScript 频繁发射事件处理的优化 --- 函数节流/事件稀释
引子:昨天面试时面试官问了如何实现一个固定导航栏,在我答完后面试官问我可能存在哪些问题,如何优化? 这个问题我答得不太好,但现在回想起来应该有两个问题: 1. 把 fixbar元素 position: ...
- 2017-10-10 都市传说: "部分"中文出现乱码
知乎原链, 作者亦本人 事情起源于项目另一开发者在中文Windows下构建时遇到的部分中文出现乱码问题. 当时很不解的是, 为什么会只有部分出现乱码. 第一感觉是, 如果编码转换不正确, 要么全乱码, ...
- 【读书笔记】iOS-属性
assign:简单的赋值. retain:赋值之后,会调用新的retain方法和旧值的release方法. copy:表示先将值拷贝一份,然后,将这个拷贝赋值给实例变量,这个修饰词只适用于实现了NSC ...
- ExtJS学习之MessageBox
MessageBox为ExtJS中的消息对话框,包括alert confirm prompt show四种. 1.index.html <!DOCTYPE html PUBLIC " ...
- Python自动化开发之python的常用模块
python常用模块 模块的种类:模块分为三种,分别是自定义模块:内置标准模块(即标准库):开源模块(第三方). 以下主要研究标准模块即标准库:标准库直接导入即可,不需要安装. 时间模块:time , ...
- How to deploy kotlin in androidstudio?
Kotlin is a good language,more playable than Java.So how do we deploy kotlin? First,install the kotl ...
- (后端)注意hibernate中对象的set方法修改数据库
2017-10-16 公司里面其他人发现了一个问题,五粮液金品库存出现了问题,删除了库存也没还回来,一瓶一千多.而且在我的功能块,在我看出货详情的时候,诡异的事情发生了,第一眼看上去没问题呀,刷新了一 ...
- JAVA学习笔记:注释、变量的声明和定义、
本文内容: 注释 变量的声明和定义 成员变量和局部变量 首发时间:2018-03-16 15:59 注释: 单行注释:// 多行注释:/* - */ 变量: 变量是内存中的一个存储区域,变量的定义就是 ...