Mysql入门笔记

来源:互联网 发布:图像对比分析软件 编辑:程序博客网 时间:2024/05/18 21:49

一、mysql 日志文件

1)错误日志:Error Log

[mysql@localhost /usr/local/mysql/data/localhost.localdomain.err

2)二进制日志:Binary Log & Binary Log Index

-rw-rw---- 1 mysql mysql    29698 12-29 03:08 mysql-bin.000001
-rw-rw---- 1 mysql mysql  1029074 12-29 03:08 mysql-bin.000002
-rw-rw---- 1 mysql mysql      126 12-29 03:09 mysql-bin.000003
-rw-rw---- 1 mysql mysql       57 12-29 03:09 mysql-bin.index

3)查询日志:query log

4)慢查询日志:slow query log

5)Innodb 的在线redo 日志:innodb redo log


二、数据文件

MyISAM 用“.MYD”作为扩展名,Innodb 用“.ibd”,Archive 用“.arc”,CSV 用“.csv”,数据目录分数据库存放

        mysql> show databases;
        +--------------------+
        | Database           |
        +--------------------+
        | information_schema |
        | hive               |
        | mysql              |
        | performance_schema |
        | test               |
        +--------------------+
        5 rows in set (0.04 sec)
        
        
        mysql> 


        drwx------ 2 mysql mysql     4096 02-02 17:25 hive
        -rw-rw---- 1 mysql mysql 18874368 02-02 18:48 ibdata1
        -rw-rw---- 1 mysql mysql  5242880 04-05 10:47 ib_logfile0
        -rw-rw---- 1 mysql mysql  5242880 12-29 03:09 ib_logfile1
        -rw-rw---- 1 mysql root     22594 04-05 10:47 localhost.localdomain.err
        -rw-rw---- 1 mysql mysql        5 04-05 10:47 localhost.localdomain.pid
        drwxr-xr-x 2 mysql mysql     4096 12-29 03:08 mysql
        -rw-rw---- 1 mysql mysql    29698 12-29 03:08 mysql-bin.000001
        -rw-rw---- 1 mysql mysql  1029074 12-29 03:08 mysql-bin.000002
        -rw-rw---- 1 mysql mysql      126 12-29 03:09 mysql-bin.000003
        -rw-rw---- 1 mysql mysql       57 12-29 03:09 mysql-bin.index
        drwx------ 2 mysql mysql     4096 12-29 03:08 performance_schema
        drwxr-xr-x 2 mysql mysql     4096 12-29 03:06 test
        [mysql@localhost /usr/local/mysql/data]$

1)“.frm”文件
与表相关的元数据(meta)信息都存放在“.frm”文件中,包括表结构的定义信息等。不论是什么存储引擎,每一个表都会有一个以表名命名的“.frm”文件。所有的“.frm”文件都存放在所属数据库的文件夹下面。

2)“.MYD”文件

“.MYD”文件是MyISAM 存储引擎专用,存放MyISAM 表的数据。每一个MyISAM 表都会有一个“.MYD”文件与之对应,同样存放于所属数据库的文件夹下,和“.frm”文件在一起。

3)“.MYI”文件

“.MYI”文件也是专属于MyISAM 存储引擎的,主要存放MyISAM 表的索引相关信息。对于MyISAM 存储来说,可以被cache 的内容主要就是来源于“.MYI”文件中。每一个MyISAM表对应一个“.MYI”文件,存放于位置和“.frm”以及“.MYD”一样。

        -rw-rw---- 1 mysql mysql   8770 12-29 03:08 help_topic.frm
        -rw-rw---- 1 mysql mysql 440640 12-29 03:08 help_topic.MYD
        -rw-rw---- 1 mysql mysql  20480 12-29 03:08 help_topic.MYI

4)“.ibd”文件和ibdata 文件

这两种文件都是存放Innodb 数据的文件,之所以有两种文件来存放Innodb 的数据(包括索引),是因为Innodb 的数据存储方式能够通过配置来决定是使用共享表空间存放存储数据,还是独享表空间存放存储数据。独享表空间存储方式使用“.ibd”文件来存放数据,且每个表一个“.ibd”文件,文件存放在和MyISAM 数据相同的位置。如果选用共享存储表空间来存放数据,则会使用ibdata 文件来存放,所有表共同使用一个(或者多个,可自行配置)ibdata 文件。ibdata 文件可以通过innodb_data_home_dir 和innodb_data_file_path两个参数共同配置组成, innodb_data_home_dir 配置数据存放的总目录, 而innodb_data_file_path 配置每一个文件的名称。当然, 也可以不配置innodb_data_home_dir 而直接在innodb_data_file_path 参数配置的时候使用绝对路径来完成配置。innodb_data_file_path 中可以一次配置多个ibdata 文件。文件可以是指定大小,也可以是自动扩展的,但是Innodb 限制了仅仅只有最后一个ibdata 文件能够配置成自动扩展类型。当我们需要添加新的ibdata 文件的时候,只能添加在innodb_data_file_path配置的最后,而且必须重启MySQL 才能完成ibdata 的添加工作。不过如果我们使用独享表空间存储方式的话,就不会有这样的问题,但是如果要使用裸设备的话,每个表一个裸设备,可能造成裸设备数量非常大,而且不太容易控制大小,实现比较困难,而共享表空间却不会有这个问题,容易控制裸设备数量。我个人还是更倾向于使用独享表空间存储方式。当然,两种方式各有利


三、Replication相关文件

1)master.info 文件

master.info 文件存在于Slave 端的数据目录下,里面存放了该Slave 的Master 端的相关信息,包括Master 的主机地址,连接用户,连接密码,连接端口,当前日志位置,已经读取到的日志位置等信息

2)relay log 和relay log index

mysql-relay-bin.xxxxxn 文件用于存放Slave 端的I/O 线程从Master 端所读取到的Binary Log 信息,然后由Slave 端的SQL 线程从该relay log 中读取并解析相应的日志信息,转化成Master 所执行的SQL 语句,然后在Slave 端应用。mysql-relay-bin.index 文件的功能类似于mysql-bin.index ,同样是记录日志的存放位置的绝对路径,只不过他所记录的不是Binary Log,而是Relay Log。

3)relay-log.info 文件:

类似于master.info,它存放通过Slave 的I/O 线程写入到本地的relay log 的相关信息。供Slave 端的SQL 线程以及某些管理操作随时能够获取当前复制的相关信息

4)system config file

MySQL 的系统配置文件一般都是“my.cnf”,Unix/Linux 下默认存放在"/etc"目录下,Windows 环境一般存放在“c:/windows”目录下面。“my.cnf”文件中包含多种参数选项组(group),每一种参数组都通过中括号给定了固定的组名,如“[mysqld]”组中包括了mysqld服务启动时候的初始化参数,“[client]”组中包含着客户端工具程序可以读取的参数,此外还有其他针对于各个客户端软件的特定参数组,如mysql 程序使用的“[mysql]”,mysqlchk使用的“[mysqlchk]”,等等。如果读者朋友自己编写了某个客户端程序,也可以自己设定一个参数组名,将相关参数配置在里面,然后调用mysql 客户端api 程序中的参数读取api读取相关参数。

5)、pid file
pid file 是mysqld 应用程序在Unix/Linux 环境下的一个进程文件,和许多其他Unix/Linux 服务端程序一样,存放着自己的进程id。
6)、socket file
socket 文件也是在Unix/Linux 环境下才有的,用户在Unix/Linux 环境下客户端连接可以不通过TCP/IP 网络而直接使用Unix Socket 来连接MySQL。


四、MYSQL系统架构

1)逻辑架构




五、MySQL 自带工具使用介绍

1)mysql

首先看看“-e, --execute=name”参数,这个参数是告诉mysql,我只要执行“-e”后面的某个命令,而不是要通过mysql 连接登录到MySQL Server 上面。此参数在我们写一些基本的MySQL 检查和监控的脚本中非常有用,我个人就经常在脚本中使用到他。

如果在连接时候使用了“-E, --vertical”参数,登入之后的所有查询结果都将以纵列显示,效果和我们在一条query 之后以“\G”结尾一样,这个参数的使用场景可能不是特别多。

“-H, --html”与“-X, --xml”这两个参数很有意思的,在启用这两个参数之后,select出来的所有结果都会按照“Html”与“Xml”格式来输出,在有些场合之下,比如希望Xml或者Html 文件格式导出某些报表文件的时候,是非常方便的。

“--prompt=name”参数对于做运维的人来说是一个非常重要的参数选项,其主要功能是定制自己的mysql 提示符的显示内容。在默认情况下,我们通过mysql 登入到数据库之后,mysql 的提示符只是一个很简单的内容”mysql>“,没有其他任何附加信息。非常幸运的是mysql 通过“--prompt=name”参数给我们提供了自定义提示信息的办法,可以通过配置显示登入的主机地址,登录用户名,当前时间,当前数据库schema,MySQL Server 的一些信息等等。我个人强烈建议将登录主机名,登录用户名和所在的schema 这三项加入提示内容,因为当大家手边管理的MySQL 越来越多,操作越来越频繁的时候,非常容易因为操作的时候没有太在意自己当前所处的环境而造成在错误的环境执行了错误的命令并造成严重后果的情况。如果我们在提示内容中加入了这几项之后,至少可以更方便的提醒自己当前所处环境,以尽量减少犯错误的概率。我个人的提示符定义: "\\u@\\h : \\d \\r:\\m:\\s> ",显示效果:“sky@localhost : test 04:25:45>”

“--tee=name”参数也是对运维人员非常有用的参数选项,用来告诉mysql,将所有输入和输出内容都记录进文件。在我们一些较大维护变更的时候,为了方便被查,最好是将整个操作过程的所有输入和输出内容都保存下来。有了“--tee=name”参数,就再也不用通过copy 屏幕来保存操作过程了。

“-U, --safe-updates”,“--select_limit=#”和“--max_join_size=#”三个参数都是出于性能相关考虑的参数。使用“-U, --safe-updates”参数之后,将禁止所有不能使用索引的update 和delete 操作的请求,“--select_limit=#”的使用前提是有“-U, --safeupdates”参数,功能是限制查询记录的条数,“--max_join_size=#”也需要与“-U, --safeupdates”一起使用,限制参与join 的最大记录数。

“--show-warnings”参数作用是在执行完每一条query 之后都会自动执行一次“showwarnings”,显示出最后一次warning 的内容。

上面仅仅介绍了部分不是太常使用但是很有特点的少数几个参数选项,实际上mysql程序支持非常多的参数选项,有其自身的参数,也有提交给MySQL Server 的。mysql 的所有参数选项都可以写在MySQL Server 启动参数文件(my.cnf)的[mysql]参数group 中,还有部分连接选项参数会从[client]参数group 中读取,这样很多参数就可以不用在每次执行mysql 的时候都手工输入,而由mysql 程序自己自动从my.cnf 文件load 这些参数。

2)mysqladmin

        [mysql@localhost /usr/local/mysql/data/mysql]$mysqladmin -u root -proot processlist 
        +----+------+-----------+----+---------+------+-------+------------------+
        | Id | User | Host      | db | Command | Time | State | Info             |
        +----+------+-----------+----+---------+------+-------+------------------+
        | 9  | root | localhost |    | Query   | 0    |       | show processlist |
        +----+------+-----------+----+---------+------+-------+------------------+
        [mysql@localhost /usr/local/mysql/data/mysql]$mysqladmin -u root -proot ping
        mysqld is alive
        [mysql@localhost /usr/local/mysql/data/mysql]$mysqladmin -u root -proot status
        Uptime: 8982  Threads: 1  Questions: 43  Slow queries: 0  Opens: 48  Flush tables: 1  Open tables: 41  Queries per second avg: 0.004
        [mysql@localhost /usr/local/mysql/data/mysql]$

还可以通过mysqladmin 来start slave 和stop slave,kill 某个连接到MySQL Server 的线程等等

3)mysqldump

mysqldump 这个工具我想大部分读者可能都比较熟悉了,其功能就是将MySQL Server中的数据以SQL 语句的形式从数据库中dump 成文本文件。虽然mysqldump 是做为MySQL 的一种逻辑备份工具为大家所认识,但我个人觉得称他为SQL 生成导出工具更合适一点,因为通过mysqldump 所生成的文件,全部是SQL 语句,包括数据库和表的创建语句。当然,通过给mysqldump 程序加“-T”选项参数之后,可以生成非SQL 形式的指定给是的文本文件。这个功能实际上是调用了MySQL 中的“select * into OUTFILE from ...”语句而实现。也可以通过“-d,--no-data”仅仅生成结构创建的语句。在声称SQL 语句的时候,字符集设置这一项也是比较关键的,建议每次执行mysqldump 程序的时候都通过尽量做到“--defaultcharacter-set=name”显式指定字符集内容,以防止以错误的字符集生成不可用的内容。mysqldump 所生成的SQL 文件可以通过mysql 工具执行。

4)mysqlimport

mysqlimport 程序是一个将以特定格式存放的文本数据(如通过“select * intoOUTFILE from ...”所生成的数据文件)导入到指定的MySQL Server 中的工具程序,比如将一个标准的csv 文件导入到某指定数据库的指定表中。mysqlimport 工具实际上也只是“load data infile”命令的一个包装实现。

5)mysqlbinlog

mysqlbinlog 程序的主要功能就是分析MySQL Server 所产生的二进制日志(也就是大家所熟知的binlog)。当我们希望通过之前备份的binlog 做一些指定时间之类的恢复的时候,mysqlbinlog 就可以帮助我们找到恢复操作需要做哪些事情。通过mysqlbinlog,我们可以解析出binlog 中指定时间段或者指定日志起始和结束位置的内容解析成SQL 语句,并导出到指定的文件中,在解析过程中,还可以通过指定数据库名称来过滤输出内容。

6)mysqlcheck

mysqlcheck 工具程序可以检查(check),修复(repair),分析( analyze)和优化(optimize)MySQL Server 中的表,但并不是所有的存储引擎都支持这里所有的四个功能,像Innodb 就不支持修复功能。实际上,mysqlcheck 程序的这四个功能都可以通过mysql 连接登录到MySQL Server 之后来执行相应命令完成完全相同的任务。

7)myisamchk

功能有点类似“mysqlcheck -c/-r”,对检查和修复MyISAM 存储引擎的表,但只能对MyISAM 存储引擎的索引文件有效,而且不用登录连接上MySQL Server 即可完成操作。

8)myisampack

对MyISAM 表进行压缩处理,以缩减占用存储空间,一般主要用在归档备份的场景下,而且压缩后的MyISAM 表会变成只读,不能进行任何修改操作。当我们希望归档备份某些历史数据表,而又希望该表能够提供较为高效的查询服务的时候,就可以通过myisampack 工具程序来对该MyISAM 表进行压缩,因为即使虽然更换成archive 存储引擎也能够将表变成只读的压缩表,但是archive 表是没有索引支持的,而通过压缩后的MyISAM 表仍然可以使用其索引。

9)mysqlhotcopy

mysqlhotcopy 和其他的客户端工具程序不太一样的是他不是c(或者c++)程序编写的,而是一个perl 脚本程序,仅能在Unix/Linux 环境下使用。他的主要功能就是对MySQL 中的MyISAM 存储引擎的表进行在线备份操作,其备份操作实际上就是通过对数据库中的表进行加锁,然后复制其结构,数据和索引文件来完成备份操作,当然,也可以通过指定“--noindices”告诉mysqlhotcopy 不需要备份索引文件。

10)other

除了上面介绍的这些工具程序之外,MySQL 还有自带了其他大量的工具程序,如针对离线Innodb 文件做checksum 的innochecksum,转换mSQL C API 函数的msql2mysql,dumpMyISAM 全文索引的myisam_ftdump,分析处理slowlog 的mysqldumpslow,查询mysql相关开发包位置和include 文件位置的mysql_config, 向MySQL AB 报告bug 的mysqlbug,测试套件mysqltest 和mysql_client_test , 批量修改表存储引擎类型的mysql_convert_table_format, 能从更新日志中提取给定匹配规则的query 语句的mysql_find_rows,更改MyIsam 存储引擎表后缀名的mysql_fix_extensions,修复系统表的mysql_fix_privilege_tables,查看数据库相关对象结构的mysqlshow,MySQL 升级工具mysql_upgrade,通过给定匹配模式来kill 客户端连接线程的mysql_zap,查看错误号信息的perror,文本替换工具replace,等等一系列工具程序可供我们使用。如果您希望在MySQL源代码的基础上做一些自己的修改,如修改MyISAM 存储引擎的时候,可以利用myisamlog来进行跟踪分析MyISAM 的log。


六、存储引擎概述

其他的一些存储引擎相对来说使用场景要稍微少一些,都是应用于某些特定的场景,如NDB Cluster 虽然也支持事务,但是主要是用于分布式环境,属于一个share nothing 的分布式数据库存储引擎。Maria 是MySQL 最新开发(还没有发布最终的GA 版本)的对MyISAM的升级版存储引擎,Falcon 是MySQL 公司自行研发的为了替代当前的Innodb 存储引擎的一款带有事务等高级特性的数据库存储引擎,目前正在研发阶段。Memory 存储引擎所有数据和索引均存储于内存中,所以主要是用于一些临时表,或者对性能要求极高,但是允许在西噢他嗯Crash 的时候丢失数据的特定场景下。Archive 是一个数据经过高比例压缩存放的存储引擎,主要用于存放过期而且很少访问的历史信息,不支持索引。Merge 和Federated在严格意义上来说,并不能算作一个存储引擎。因为Merge 存储引擎主要用于将几个基表merge 到一起,对外作为一个表来提供服务,基表可以基于其他的几个存储引擎。而Federated 实际上所做的事情,有点类似于Oracle 的dblink,主要用于远程存取其他MySQL服务器上面的数据。

1)MyISAM 存储引擎简介

MyISAM 存储引擎的表在数据库中,每一个表都被存放为三个以表名命名的物理文件。首先肯定会有任何存储引擎都不可缺少的存放表结构定义信息的.frm 文件,另外还有.MYD和.MYI 文件,分别存放了表的数据(.MYD)和索引数据(.MYI)。每个表都有且仅有这样三个文件做为MyISAM 存储类型的表的存储,也就是说不管这个表有多少个索引,都是存放在同一个.MYI 文件中。
虽然每一个MyISAM 的表都是存放在一个相同后缀名的.MYD 文件中,但是每个文件的存放格式实际上可能并不是完全一样的,因为MyISAM 的数据存放格式是分为静态(FIXED)固定长度、动态(DYNAMIC)可变长度以及压缩(COMPRESSED)这三种格式。当然三种格式中是否压缩是完全可以任由我们自己选择的,可以在创建表的时候通过ROW_FORMAT 来指定{COMPRESSED | DEFAULT},也可以通过myisampack 工具来进行压缩,默认是不压缩的。而在非压缩的情况下,是静态还是动态,就和我们表中个字段的定义相关了。只要表中有可变长度类型的字段存在,那么该表就肯定是DYNAMIC 格式的,如果没有任何可变长度的字段,则为FIXED 格式,当然,你也可以通过alter table 命令,强行将一个带有VARCHAR 类型字段的DYNAMIC 的表转换为FIXED,但是所带来的结果是原VARCHAR 字段类型会被自动转换成CHAR 类型。相反如果将FIXED 转换为DYNAMIC,也会将CHAR 类型字段转换为VARCHAR 类型,所以大家手工强行转换的操作一定要谨慎。

2)Innodb 存储引擎简介

支持事务安装

数据多版本读取

Innodb 改变了MyISAM 的锁机制,实现了行锁

实现外键

3)ARCHIVE存储引擎

ARCHIVE 存储引擎主要用于通过较小的存储空间来存放过期的很少访问的历史数据。ARCHIVE 表不支持索引,通过一个.frm 的结构定义文件,一个.ARZ 的数据压缩文件还有一个.ARM 的meta 信息文件。由于其所存放的数据的特殊性,ARCHIVE 表不支持删除,修改操作,仅支持插入和查询操作。锁定机制为行级锁定。

4)FEDERATED存储引擎

5)NDB Cluster 存储引擎简介

6)Merge存储引擎

7)BDB 存储引擎

8)Memory存储引擎

9)BLACKHOLE存储引擎

10)CSV存储引擎


七、权限安全

MySQL 的权限系统在实现上比较简单,相关权限信息主要存储在几个被称为granttables 的系统表中,即: mysql.User,mysql.db,mysql.Host,mysql.table_priv 和mysql.column_priv。由FLUSH PRIVILEGES

1)Global Level

root@localhost : mysql 05:14:35> GRANT SELECT,UPDATE,DELETE,INSERT ON *.*TO 'def'@'localhost';

2)Database Level

root@localhost : mysql 06:06:26> GRANT ALTER ON test.* TO 'def'@'localhost';Query OK, 0 rows affected (0.00 sec)

SHOW GRANTS FOR def@localhost;

先通过USE 命令选定需要授权的数据库,然后通过“*”来限定作用域,这样授权的作用域实际上就是当前选定的整个数据库

USE test;

GRANT DROP ON * TO 'def'@'localhost';

在授予权限的时候,如果有相同的权限需要授予多个用户,我们也可以在授权语句中一次写上多个用户信息,通过逗号(,)分隔开就可以了,如下:

grant create on perf.* to 'abc'@'localhost','def'@'localhost';

3)Table Level

Table Level 的权限作用范围是授权语句中所指定数据库的指定表。如可以通过如下语句给test 数据库的t1 表授权:
root@localhost : test 12:02:15> GRANT INDEX ON test.t1 TO 'abc'@'%.jianzhaoyang.com';

Table Level 的权限由于其作用域仅限于某个特定的表,所以权限种类也比较少,仅有ALTER,CREATE,DELETE,DROP,INDEX,INSERT,SELECT UPDATE 这八种权限

4)Column Level

Column Level 的权限作用范围就更小了,仅仅是某个表的指定的某个(活某些)列。由于权限的覆盖原则,Column Level 的权限同样可以被Global,Database,Table 这三个级别的权限中的相同级别所覆盖,而且由于Column Level 所针对的权限和Routine Level的权限作用域没有重合部分,所以不会有覆盖与被覆盖的关系。针对Column Level 级别的权限仅有INSERT,SELECT 和UPDATE 这三种。Column Level 的权限授权语句语法基本和TableLevel 差不多,只是需要在权限名称后面将需要授权的列名列表通过括号括起来,如下:root@localhost : test 12:14:46> GRANT SELECT(id,value) ON test.t2 TO'abc'@'%.jianzhaoyang.com';

注意:当某个用户在向某个表插入(INSERT)数据的时候,如果该用户在该表中某列上面没有INSERT 权限,则该列的数据将以默认值填充。这一点和很多其他的数据库都有一些区别,是MySQL 自己在SQL 上面所做的扩展。

5)Routine Level

Routine Level 的权限主要只有EXECUTE 和ALTER ROUTINE 两种,主要针对的对象是procedure 和function 这两种对象,在授予Routine Level 权限的时候,需要指定数据库和相关对象,如:root@localhost : test 04:03:26> GRANT EXECUTE ON test.p1 to'abc'@'localhost';

除了上面几类权限之外,还有一个非常特殊的权限GRANT,拥有GRANT 权限的用户可以将自身所拥有的任何权限全部授予其他任何用户,所以GRANT 权限是一个非常特殊也非常重要的权限。GRANT 权限的授予方式也和其他任何权限都不太一样,通常都是通过在执行GRANT授权语句的时候在最后添加WITH GRANT OPTION 子句达到授予GRANT 权限的目的。此外,我们还可以通过GRANT ALL 语句授予某个Level 的所有可用权限给某个用户,如:root@localhost : test 04:15:48> grant all on test.t5 to 'abc';Query OK, 0 rows affected (0.00 sec)


八、备份

第一、同一时刻取出所有数据;
第二、数据库中的数据处于静止状态。

1)生成INSERT 语句备份

在同一个事务中,数据库是可以做到所读取的数据是处于同一个时间点的。所以,对于事务支持的存储引擎,如Innodb 或者BDB 等,我们就可以通过控制将整个备份过程控制在同一个事务中,来达到备份数据的一致性和完整性,而且mysqldump 程序也给我们提供了相关的参数选项来支持该功能,就是通过“--single-transaction”选项,可以不影响数据库的任何正常服务。mysqldump 程序自己也提供了相关选项如“--lock-tables”和“--lock-all-tables”,在执行之前会锁定表,执行结束后自动释放锁定。这里有一点需要注意的就是,“--lock-tables”并不是一次性将需要dump 的所有表锁定,而是每次仅仅锁定一个数据库的表,如果你需要dump 的表分别在多个不同的数据库中,一定要使用“--lock-all-tables”才能确保数据的一致完整性。

2)生成特定格式的纯文本备份数据文件备份

        root@localhost : test 10:02:02> SELECT * INTO OUTFILE '/tmp/dump.text'
        -> FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
        -> LINES TERMINATED BY '\n'
        -> FROM test_outfile limit 100;
        Query OK, 100 rows affected (0.00 sec)
        root@localhost : test 10:02:11> exit
        Bye
        root@sky:/tmp# cat dump.text
        350021,21,"A","abcd"
        350022,22,"B","abcd"
        350023,23,"C","abcd"
        350024,24,"D","abcd"
        350025,25,"A","abcd"

3)通过mysqldump 导出

可能我们都知道mysqldump 可以将数据库中的数据以INSERT 语句的形式生成相关备份文件,其实除了生成INSERT 语句之外,mysqldump 还同样能实现上面“SELECT ... TOOUTFILE FROM ...”所实现的功能,而且同时还会生成一个相关数据库结构对应的创建脚本。

        root@sky:~# mysqldump -uroot -T/tmp/mysqldump test test_outfile --fieldsenclosed-
        by=\" --fields-terminated-by=,
        root@sky:~# ls -l /tmp/mysqldump
        total 8
        -rw-r--r-- 1 root root 1346 2008-10-14 22:18 test_outfile.sql
        -rw-rw-rw- 1 mysql mysql 2521 2008-10-14 22:18 test_outfile.txt
        root@sky:~# cat /tmp/mysqldump/test_outfile.txt
        350021,21,"A","abcd"
        350022,22,"B","abcd"
        350023,23,"C","abcd"
        350024,24,"D","abcd"
        350025,25,"A","abcd"
        ... ...
        root@sky:~# cat /tmp/mysqldump/test_outfile.sql



原创粉丝点击