xml地图|网站地图|网站标签 [设为首页] [加入收藏]
开发进阶篇系列,Server内幕之数据页
分类:数据库

一.概述

    mysqldump客户端工具是用来备份数据库或在不同数据库之间进行数据迁移。备份内容包含创建表或装载表的sql语句。mysqldump目前是mysql中最常用的备份工具。
  三种方式来调用mysqldump,命令如下:
图片 1
  上图第一种是备份单个数据库或者库中部分数据表(从备份方式上,比sqlserver要灵活一些,虽然sql server有文件组备份)。第二种是备份指定的一个或者多个数据库。第三种是备份所有数据库。
  1.连接导出,下面将test数据库导出为test.txt文件,导出位置在data目录下

[root@hsr data]# /usr/local/mysql/bin/mysqldump -uroot -p test > test.txt

图片 2图片 3

  上图显示: 导出到test.txt文件里, 数据有几部份sql语句,包括:(1)有判断表存在删除,(2)导出表结构和表数据,(3)导前加table write锁,导完释放。通过下面帮助命令可以看到默认设置。

 [root@hsr data]# /usr/local/mysql/bin/mysqldump --help

图片 4  2. 输出内容选项

-n, --no-create-db

不包含数据库的创建语句

-t, --no-create-info

不包含数据表的创建语句

-d,--no-data

不包含数据

    下面演示导出test库的a表,不包含数据:

[root@hsr data]# /usr/local/mysql/bin/mysqldump -uroot -p -d  test a > a.txt

图片 5

    上图显示,使用more 查看a.txt,内容只有表结构。
  3. 使用 --compact选项使得结果简洁,不包括默认选项中的各种注释,下面还是演示a表:

[root@hsr data]# /usr/local/mysql/bin/mysqldump -uroot -p --compact  test a > a.txt

图片 6

  4. 使用-c --complete-insert 选项,使insert语句包括字段名称

[root@hsr data]# /usr/local/mysql/bin/mysqldump -uroot -p -c --complete-insert  test b > b.txt

图片 7

  5. 使用-T选项将指定数据表中的数据备份为单纯的数据文本和建表sql, 两个文件。

     [root@hsr data]# midir bak
        [root@hsr data]# /usr/local/mysql/bin/mysqldump -uroot -p   test b -T ./bak
        Enter password: 
        mysqldump: Got error: 1290: The MySQL server is running with the --secure-file-priv option so it cannot execute 
                      this statement when executing 'SELECT INTO OUTFILE'

 --上面的语句报错,查找错误信息中的字段设置
SHOW VARIABLES LIKE '%secure%';

图片 8

    secure-file-priv参数是用来限制LOAD DATA, SELECT ... OUTFILE, and LOAD_FILE()传到哪个指定目录的。

                   (1) 当secure_file_priv的值为null ,表示限制mysqld 不允许导入|导出。

                   (2) 当secure_file_priv的值为/tmp/ ,表示限制mysqld 的导入|导出只能发生在/tmp/目录下。

                   (3 )当secure_file_priv的值没有具体值时,表示不对mysqld 的导入|导出做限制。

    下面来设置my.cnf文件,加上导入位置,位置在/tmp 目录下,如下图:
图片 9图片 10

-- 再次导出,导出路径在/tmp下
[root@hsr data]#  /usr/local/mysql/bin/mysqldump -uroot -p   test b -T /tmp

图片 11

    使用more 查看文件,b.sql中包含了表架构, b.txt包含数据。
图片 12

图片 13

   6.  字符集选项

    --default-character-set=name 选项可以设置导出的客户端字符集。这个选项很重要,如果客户端字符集和数据库字符集不一致,有可能成为乱码,使得备份文件无法恢复。

[root@hsr data]#  /usr/local/mysql/bin/mysqldump -uroot -p  --compact --default-character-set=utf8 test >test.txt

    图片 14

  7. 其他常用选项

    (1) -F --flush-logs(备份前刷新日志)  备份前将关闭旧日志,生成新日志。恢复的时候直接从新日志开始进行重做,方便恢复过程。

    (2) -l --lock-tables(给所有表加读锁) 使得数据无法被更新,从而使备份的数据保持一致性(可以导致大量长时间阻塞)。

1、B+树基本概念

数据页是包含已添加到数据库表中的用户数据的结构。

  B+树的语言定义比较复杂,简单的说是为磁盘存取设计的平衡二叉树

如前所述, 数据页有三种, 每个都以不同的格式存储数据。

图片 15

SQL server 有行内数据页、行溢出数据页和 LOB 数据页。

  网上经典图,黄色p1 p2 p3代表指针,蓝色的代表磁盘,里面包含数据项,第一层17,35,p1就代表小于17的,p2就代表17-35之间的,p3就代表大于35的,可是需要注意的是,第三层才是真实的数据,17、35都不是真实数据,只是用来划分数据的!

与 SQL server 中的所有其他类型的页一样, 数据页的大小固定为 8 KB 或8192字节。

2、为什么使用B+树

它们由三主要组件组成: 页面页眉、数据行和行偏移量数组, 如图6-4 所示。

  B+树有什么好处我们非要使用它呢?那就先要来看看mysql的索引

图片 16

 

 

  2.1mysql索引

页标题

    试想一下在mysql中有200万条数据,在没有建立索引的情况下,会全部进行扫描读取,这个时间消耗是非常恐怖的,而对于大型一点的网站来说,达到这个数据量很容易,不可能这样去设计

 

    在我们创建数据库表的时候,大家都知道一个东西叫做主键,一般来讲数据库会自动在主键上创建索引,这叫做主键索引,来看看索引的分类吧

如图6-4 所示, 页标题占据每个数据页的前96个字节 (为数据、行开销和行偏移保留8096个字节)。表6-5 列出了检查页标题时显示的一些信息。

    a.主键索引:int优于varchar

图片 17

    b.普通索引(INDEX):最基本的索引,没有限制,加速查找

 

    c.唯一索引(UNUQUE):听名字就知道,要求所有类的值是唯一的,但是允许有空值

行内数据的数据行

    d.组合索引:

 

1 CREATE INDEX name_age_address_Index ON `student`(`name`, `age`, `address`);

页标题后面是存储表实际数据行的区域。单个数据行的最大大小为8060字节的行内数据。

    在这里实际上包含三个索引,说到组合索引,一定要讲最左前缀原则

行还可以在单独的页上存储行溢出和 LOB 数据。

 

在给定页上存储的行数根据表结构和存储的数据而变化。


具有所有固定长度列的表始终可以存储每页相同的行数;

    最左前缀原则:

可变长度行可以根据输入数据的实际长度, 存储尽可能多的行。

      我们现在创建了索引x,y,z,Index:(x,y,z),只会走x,xy,xyz的查询,例如:

保持行长更短可以使更多行适合页面, 从而减少 i/o 并增加所需数据在缓存中的可能。

1 select * from table where x='1'
2 select * from table where x='1' and b='1'
3 select * from table where x='1' and b='1' and c='1'

 

      如果是x,z,就只会走x,注意一种特殊情况,select * from table where x='1' and y>'1' and z='1',这里只会走xy,因为在经历xy的筛选后,z不能保证是有序的,可索引是有序的,因此不会走z

行偏移量数组

本文由澳门新葡亰手机版发布于数据库,转载请注明出处:开发进阶篇系列,Server内幕之数据页

上一篇:日志文件结构及误操作数据找回,索引解说连串 下一篇:没有了
猜你喜欢
热门排行
精彩图文