数据库的维护

1、备份数据库

和全部数据同样,MySQL的数据也必须常常备份。MySQL数据是基于磁盘的文件,因此本份也很简单。mysql

一、使用命令行实用程序mysqldump转存储全部数据库内容到某个外部文件,在进行常规备份前,这个实用程序应该正常运行,以便能正确地进行备份转存储文件。sql

二、能够用命令行实用程序mysqlhotcopy从一个数据库复制全部数据(并不是全部数据库引擎都支持这个实用程序)。数据库

三、可使用MySQL的BACKUP TABLE 或 SELECT INTO OUTFILE转存储全部数据到某个外部文件,这两条语句都接受将要建立的系统文件名,此系统文件必须不存在,不然会出错。性能优化

例如:
 服务器

SELECT * FROM world.city
INTO OUTFILE '/temp/back.txt';

 

2、数据库的诊断和维护

MySQL提供了一系列的语句,能够用来保证数据库的正确和正常运行。多线程

一、ANALYZE TABLE:用来检查表键是否正确性能

二、CHECK TABLE:用来针对许多问题对表进行检查,在MyISAM表上还能够对索引进行检查优化

三、CHANGED:检查自从最后一次检查之后改动过的表命令行

四、MEDIUM:检查全部被删除的连接并进行键检验线程

五、QUICk:只进行快速扫描

六、FAST:只检查未正常关闭的表

七、EXTENDED:执行最后完全的检查

八、OPTIMIZE TABLE:当从一个表中删除大量数据时,使用它收回所用的空间

九、REPAIR TABLE:若是MyISAM表访问产生不正确和不一致的结果,可使用它修复相应的表(这条语句不该该常用,若是常用可能会有更大的问题要解决)

下面举个例子:检查表键是否正确

CHECK TABLE orders

 

3、查看日志文件

一、错误日志:包含启动和关闭问题以及任意关键错误的细节,日志位于data目录中,日志文件一般命名为hostname.err。此日志文件名能够经过log-error命令行选项更改

二、查询日志:记录全部MySQL活动,在诊断问题时很是有用,不该该长期使用它,日志位于data目录中,日志文件一般命名为hostname.log。此日志文件名能够经过log命令行选项更改

三、二进制日志:记录更新过数据(或可能更新过数据)的全部语句,日志位于data目录中,日志文件一般命名为hostname-bin。此日志文件名能够经过log-bin命令行选项更改

四、缓慢查询日志:记录执行缓慢的任何查询,这个日志对肯定数据库何处须要优化颇有用,日志位于data目录中,日志文件一般命名为hostname-slow.log。此日志文件名能够经过log-slow-queries命令行选项更改

五、刷新或从新开始全部日志文件:使用FLUSH LOGS语句

 

 

4、改善性能

数据库管理员把它们生命中至关一部分时间花在了调整、试验以改善DBMS性能之上。在诊断问题时,性能不良的数据库一般是最多见的祸因。

咱们回顾一下前面各章的重点,提供进行性能优化探讨和分析:

一、通常来讲关键的生产DBMS应该运行在本身的专用服务器上

二、MySQL是用一系列的默认设置预先配置的,这些设置开始一般是很好的,在数据库运行一段时间后可能须要调整内存分配、缓冲区大小等(使用 SHOW VARIABLES; 或 SHOW STAUS; 语句查看当期设置)

三、MySQL是一个多用户多线程的DBMS,常常同时执行多个任务没,若是这些任务中的某个执行缓慢,则全部的请求都会执行缓慢,若是遇到显著的性能不良,可使用SHOW PROCESSLIST 语句显示全部活动进程(包含它们的线程ID和执行时间),可使用 KILL 命令终结特定的进程(使用这个命令须要做为管理员登陆)

四、老是有不止一种方法编写同一条SELECT语句,应该试验联结、并、子查询等,找出最佳的方法,经过使用多条SELECT语句和链接它们的UNION语句有的时候性能能极大的改进

五、使用EXPLAIN语句让MySQL解释它将如何执行一条SELECT语句

六、通常状况下,存储过程执行比一条一条地执行其中的各条MySQL语句都要快

七、应该老是使用正确的数据类型

八、绝对不要检索比需求还要多的数据,换言之,不要使用SELECT *(除非你真正须要每一个列)

九、在导入数据时应该关闭自动提交

十、有的操做(包括INSERT)支持一个可选的DELAYED关键字,若是使用它,将把控制当即返回给调用程序,而且一旦有可能就实际执行该操做

十一、必须索引数据库表以改善数据检索的性能,可是索引损害数据的插入、删除、更新的性能

十二、LIKE很慢,通常状况下最好使用FULLTEXT而不是LIKE

1三、数据库是不断变化的实体,一组优化良好的表过一下子可能就面目全非了,因为表的使用和内容的更改,理想的优化和配置也会改变

1四、你的SELECT语句有一系列的OR条件吗?经过使用多条SELECT和链接它们的UNION语句,你能看到极大的性能改进

1五、最重要的规则就是,每条规则在某些条件下都会被打破