10月30日学习内容整理:mysql数据备份,索引原理

一、数据备份

1、物理备份:直接复制数据库文件,适用于大型数据库环境,但不能恢复到导构系统中如Windows

2、逻辑备份:备份的是建表、建库、插入等操作所执行的sql语句,适用于中小型数据库,效率相对较低

》》》》》》》全部在cmd默认目录下,不用加分号

》》备份一个库:

mysqldump  -h  服务器地址  -u用户名  -p密码  --database  库名 > 备份文件.sql  (就写备份文件的路径)

服务器地址不写的话默认是本地

《《恢复一个库:cmd默认目录下

mysql   -u用户名  -p密码  <  备份文件.sql  (就是备份文件的路径)

 

》》备份多个库:

mysqldump  -h  服务器地址  -u用户名  -p密码  --databases  库1 库2 库3  > 备份文件.sql  (就写备份文件的路径)

库和库之间用空格隔开

《《恢复一个库:cmd默认目录下

mysql   -u用户名  -p密码  <  备份文件.sql  (就是备份文件的路径)  和恢复一个库没有区别,只不过直接恢复多个库

 

》》备份所有库:

mysqldump  -h  服务器地址  -u用户名  -p密码  --all-databases > 备份文件.sql  (就写备份文件的路径)

《《恢复所有库:

mysql   -u用户名  -p密码  <  备份文件.sql  (就是备份文件的路径)  

 

》》备份一个表:

mysqldump   -u用户名  -p密码  库名 表名  > 备份文件.sql  (就写备份文件的路径)

库和表之间用空格隔开

《《恢复一个表:cmd默认目录下

mysql   -u用户名  -p密码  库名  <  备份文件.sql  (就是备份文件的路径)  

要指定库名,不然会报错

 

》》备份多个表:

mysqldump   -u用户名  -p密码  库名 表1 表2 表3  > 备份文件.sql  (就写备份文件的路径)

多个表之间用空格隔开

《《恢复多个表:cmd默认目录下

mysql   -u用户名  -p密码  库名  <  备份文件.sql  (就是备份文件的路径)  

要指定库名,不然会报错

 

补充:恢复的另一种方法:

mysql> use db1;   切换到库目录下

mysql> SET SQL_LOG_BIN=0;

mysql> source /root/db1.sql  source后跟备份文件的路径

 

3、表的导入和导出

》》》》在mysql目录下

》》导出:导出文本文件

mysql > select * from 库名.表名  

into outfile '导出文件的路径'

fields terminated by ','   #定义字段分割符

optionally enclosed by '" ' #定义字符串使用什么符号括起来

lines terminated by '\n';   #定义换行符,Windows系统

》》导入:导入文本文件

 

mysql > load data infile '导出的文件路径' 

into table 库名.表名

fields terminated by ','   #定义字段分割符

optionally enclosed by '" ' #定义字符串使用什么符号括起来

lines terminated by '\n';   #定义换行符,Windows系统

》》设置导出文件路径参数

上述的导入导出是有风险的,一旦数据库权限泄露就会被轻易的导出数据,所以mysql对此做限制,要求必须

导出到指定的文件路径,这就是secure_file_priv参数,意思就是导出的文件路径必须在这个参数设置的路径下

不在的话是会报错的

——>在配置文件中设置(即是后缀为ini的文件):

[mysqld]

secure_file_priv = '路径'  比如'C:\\'就代表着只能导出到C盘里或C盘里的某个文件

 

4、数据库的迁移

》》前提是两个数据库版本要相同

》》mysqldump -h 源ip -u用户名 -p密码 --databases 库名 | mysql -h 目标ip -u用户名 -p密码

这样就把在源IP的数据库迁移到了目的IP的数据库上

 

 

 

二、索引原理

》》数据库的索引可以理解为字典或者书籍的目录,通过不断的缩小范围来提高查询效率

》》索引的数据结构:Btree  和  Hash 

 1、产生背景:

在生产环境中,对数据库的读操作要比写操作使用频率更高,所以提高查询效率就显得尤为重要,加速查询就要用到索引

2、概念:

在mysql中也被称作键,是存储引擎用于快速找到记录的一种数据结构

3、本质:

本质都是:通过不断地缩小想要获取数据的范围来筛选出最终想要的结果,同时把随机的事件变成顺序的事件,也就是说,有了这种索引机制,我们可以总是用同一种查找方式来锁定数据。

4、索引原理

磁盘是硬盘和软盘的统称,大多时候指的就是硬盘

我们对数据库的读操作其实就是对硬盘的读操作,也就是磁盘的IO操作,那磁盘的IO操作就涉及到了磁盘的读取时间问题,磁盘的读取依靠的是机械运动,类似于以前的那种唱片,有指针和轨道,通过对轨道的旋转来发出特定的声音,磁盘的读取时间分为寻道时间和旋转延迟和传输时间三个部分,寻道时间是磁臂运动到指定磁道的时间,旋转延迟就是磁盘的转速,指的是磁臂运动到数据所在的区域的平均时间,传输时间指的是读和写数据的时间,这个时间很短,与前两个相比可以忽略不计,寻道时间和旋转延迟对操作系统是极大的浪费,所以操作系统为了优化磁盘IO这种高昂的操作,就设计了每发生一次磁盘IO,不光把当前磁盘数据读取出来也会把它相邻的数据都读出来,这就是预读,每一次磁盘IO读取的数据我们把它称作为一页,一页的大小由操作系统决定,所以我们读取一页数据的时候实际才发生了一次磁盘IO,索引就是依据磁盘IO和预读为前提设计出来的

 

 

5、索引的数据结构

平衡树(B+树)  (hash这里不做讨论)

》》平衡树的查找过程:真实的数据要放在叶子节点,就是最下面那一层

 

》》平衡树的性质

索引的字段要尽量的小

索引的最左匹配特性

 

posted @ 2017-10-30 16:09  九二零  阅读(105)  评论(0编辑  收藏  举报