Mysqldump源码分析

元气小坏坏 提交于 2019-12-23 11:19:34

【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>

版权声明:本文由王珏原创文章,转载请注明出处: 
文章原文链接:https://www.qcloud.com/community/article/261

来源:腾云阁 https://www.qcloud.com/community

 

Mysqldump源码分析

王珏 标签: MySQL

2016-12-13 15:41:13 21

本文对mysql5.6.24 mysqldump工具做了简要分析,流程调用序列如下图所示:

流程分析:

get_options
获取mysql参数

connect_to_db
连接mysql

write_header
写入文件头,保存源数据库原始变量值:字符集、时区、SQL mode等


-- MySQL dump 10.13  Distrib 5.6.24, for Linux (x86_64)

--

-- Host: localhost    Database: test

-- ------------------------------------------------------

-- Server version       5.6.24-log



/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;

/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;

/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;

/*!40101 SET NAMES utf8 */;

/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;

/*!40103 SET TIME_ZONE='+00:00' */;

/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;

/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;

/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;

/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;

do_stop_slave_sql:

执行条件:

if (opt_slave_data && do_stop_slave_sql(mysql))

goto err;

如果设置--dump-slave,执行STOP SLAVE SQL_THREAD

do_flush_tables_read_lock:

执行条件:

if ((opt_lock_all_tables || opt_master_data ||

       (opt_single_transaction && flush_logs)) &&

      do_flush_tables_read_lock(mysql))

    goto err;

执行两次FLUSH,第二次加读锁:

FLUSH TABLES;

FLUSH TABLES WITH READ LOCK;

get_bin_log_name:

执行条件:

if (opt_delete_master_logs)

  {

    if (get_bin_log_name(mysql, bin_log_name, sizeof(bin_log_name)))

     goto err;

  }

如果设置delete-master-logs,dump完毕需要删除master binlog,首先需要保存当前的binlog信息:

通过SHOW MASTER STATUS;获取master binlog信息;

start_transaction:

执行条件:

if (opt_single_transaction && start_transaction(mysql))

    goto err;

设置隔离级别为可重复读:

SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ;

开启一个事务:START TRANSACTION WITH CONSISTENT SNAPSHOT;

add_stop_slave:

执行条件:

if (opt_slave_apply && add_stop_slave())

    goto err;

如果设置了--apply-slave-statements参数,写入STOP SLAVE;

process_set_gtid_purged:

执行条件:

if (gtid_mode_val && strcmp(gtid_mode_val, "OFF"))

  {

add_set_gtid_purged(mysql_con);

  }

如果开启gtid,则情况GTID_PURGED变量:

SET @@GLOBAL.GTID_PURGED=

do_show_master_status:

执行条件:

if (opt_master_data && do_show_master_status(mysql))

    goto err;

如果设置了--master_data 参数,记录当前日志和位置:

SHOW MASTER STATUS;

CHANGE MASTER TO MASTER_LOG_FILE=%s, MASTER_LOG_POS=%s;

do_show_slave_status:

执行条件:

if (opt_slave_data && do_show_slave_status(mysql))

    goto err;

如果这个--dump-slave参数,通过slave获取对应master日志文件和位置:

SHOW SLAVE STATUS;

CHANGE MASTER TO MASTER_LOG_FILE=%s, MASTER_LOG_POS=%s;

do_unlock_tables:

执行条件:

if (opt_single_transaction && do_unlock_tables(mysql)) /* unlock but no commit! */

    goto err;

如果之前有加锁,现在释放:

UNLOCK TABLES;

dump_all_tablespaces:

执行条件:

if (opt_alltspcs)

    dump_all_tablespaces();

如果设置了--all-tablespaces,dump表空间:

从information_schema.FILES获取表空间信息;

dump_all_databases:

执行条件:

 if (opt_alldbs)

  {

    dump_all_databases();

  }

如果设置了--all-databases,dump所有库表:

1.获取所有数据库:SHOW DATABASES;

2.排除information_schema、performance_schema等系统库;

3.dump库中所有表;

3.1、Use database,并打印头信息:

--

-- Current Database: `test`

--

3.2、如果设置了--lock-tables,则LOCK TABLES xxx READ;

3.3、如果设置了--flush-logs, 则FLUSH LOGS;

3.4、如果设置了--single-transaction, 则SAVEPOINT sp;

3.5、逐一dump每个表:dump_all_tables_in_db;

3.5.1、 Use database切换目标数据库;

3.5.2、 获取数据库Create语句:SHOW CREATE DATABASE IF NOT EXISTS;

3.5.3、如果设置--add-drop-database, 输出DROP DATABASE IF EXISTS xxx;

3.5.4、输出CREATE DATABASE IF NOT EXISTS xxx;

3.5.5、调用dump_table dump表结构和数据;

3.5.5.1、调用get_table_structure获取表结构:

SELECT`COLUMN_NAME`AS`Field`,`COLUMN_TYPE`AS`Type`,`IS_NULLABLE`AS`Null`,`COLUMN_KEY`AS
`Key`,`COLUMN_DEFAULT`AS`Default`,`EXTRA`AS`Extra`,`COLUMN_COMMENT`AS`Comment`FROM`
INFORMATION_SCHEMA`.`COLUMNS`WHERETABLE_SCHEMA='%s'ANDTABLE_NAME='%s';

3.5.5.1.1、如果设置--add-drop-table ,输出DROP TABLE IF EXISTS;

3.5.5.1.2、如果没有设置--no-create-info, 执行show create table xxx,输出建表语句;

3.5.5.1.3、执行show fields from xxx,获取表的字段信息;

3.5.5.1.4、执行show keys from xxx,获取表索引信息;

3.5.5.1.5、执行show table status like xxx,获取表引擎以及options信息;

3.5.5.1.6、通过以上信息获取表创建语句;

3.5.5.2、执行SELECT * FROM xxx [ WHERE xxx=yyy ORDER BY xxx]获取表中数据;

3.5.5.3、如果设置--add-locks,输出LOCK TABLES xxx WRITE;

3.5.5.4、如果设置--disable-keys,输出 ALTER TABLE xxx DISABLE KEYS;

3.5.5.5、根据表中数据,生成INSERT/REPLACE INTO 输出到文件;

3.5.5.6、如果设置--disable-keys,输出 ALTER TABLE xxx ENABLE KEYS;

3.5.5.7、如果设置--add-locks,输出UNLOCK TABLES;

3.5.6、调用dump_triggers_for_table表关联的数据库;

3.5.6.1、执行SHOW TRIGGERS LIKE xxx,获取所有触发器;

3.5.6.2、执行SHOW CREATE TRIGGER xxx,获取触发器创建语句并输出到文件;

3.5.7、如果设置了--single-transaction, 则ROLLBACK TO SAVEPOINT sp;

3.5.8、如果设置了--events,调用dump_events_for_db 获取定时器信息;

3.5.8.1、执行show events,获取所有定时器;

3.5.8.2、执行SHOW CREATE EVENT,获取定时器创建语句并输出到文件;

3.5.9、如果设置了--routines,调用dump_routines_for_db 获取存储过程、自定义函数信息;

3.5.9.1、执行SHOW FUNCTION/PROCEDURE STATUS WHERE Db = xxx,获取所有存储过程、自定义函数;

3.5.9.2、执行SHOW CREATE FUNCTION/PROCEDURE xxx,获取所有存储过程、自定义函数创建语句;

3.5.10、如果设置了--lock-tables,则执行UNLOCK TABLES;

3.5.11、如果设置了--flush-privileges,输出FLUSH PRIVILEGES;

3.6、逐一dump每个表上的视图:dump_all_views_in_db

3.6.1、调用get_view_structure获取视图结构:

3.6.1.1、获取数据库下所有表;

3.6.1.2、执行SHOW CREATE TABLE xxx和 information_schema.views中信息获取视图创建语句;

dump_selected_tables:

执行条件:

if (argc > 1 && !opt_databases)

    {

      dump_selected_tables(*argv, (argv + 1), (argc - 1));

    }

如果没有设置--databases,则dump指定一个数据库的多个表;

dump_databases:

执行条件:

if (argc > 1 && !opt_databases)

    {

    }

    else

    {

      /* One or more databases, all tables */

      dump_databases(argv);

    }

如果设置--databases,则dump指定多个数据库;

do_start_slave_sql:

执行条件:

 /* if --dump-slave , start the slave sql thread */

  if (opt_slave_data && do_start_slave_sql(mysql))

    goto err;

如果设置--dump-slave,现在需要执行START SLAVE启动从复制进程:

set_session_binlog:

打开binlog;

add_slave_statements:

执行条件:

if (opt_slave_apply && add_slave_statements())

    goto err;

如果设置了--apply-slave-statements参数,写入START SLAVE;

purge_bin_logs_to:

执行条件:

if (opt_delete_master_logs && purge_bin_logs_to(mysql, bin_log_name))

    goto err;

如果设置--delete-master-logs, purge掉旧日志:

PURGE BINARY LOGS TO binlog_xxx;

dbDisconnect:

断开mysql连接;

write_footer:

写入文件结尾:

/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;



/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;

/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;

/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;

/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;

/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;

/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;

/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;

附录一:mysqldump相关参数:

命令行 描述
--add-drop-database 在CREATE DATABASE前DROP DATABASE。
--add-drop-table 在CREATE TABLE前DROP TABLE。
--add-drop-trigger 在CREATE TRIGGER 前DROP TRIGGER。
--add-locks 在INSERT前后分别加LOCK TABLES和UNLOCK TABLES。
--all-databases 备份所有库中所有表。
--allow-keywords 允许列名包含关键字。
--apply-slave-statements 在CHANGE MASTER前加 STOP SLAVE在最后添加 START SLAVE。
--bind-address=ip_address 对于有多个网络接口的机器选择使用指定的接口连接MySQL。
--comments 为备份文件添加注释。
--compact 禁用结构化注释及首尾结构体。开启--skip-add-drop-table、--skip-add-locks、--skip-comments、--skip-disable-keys、--skip-set-charset以产生更紧促的输出。
--compatible=name[,name,...] 产生与其他数据库或者老版MySQL兼容的备份文件,可用的值有ansi, mysql323, mysql40, postgresql, Oracle, mssql, db2, maxdb, no_key_options, no_table_options, no_field_options。可同时使用多个以逗号分隔的值。
--complete-insert 使用带有列名的完整INSERT。
--create-options 在CREATE TABLE中使用MySQL特定的表选项。
--databases 备份多个数据库,选项后跟多个库名。备份文件中会包含USE db_name。
--debug[=debug_options] 写debug日志。
--debug-check 程序退出时打印一些调试信息
--debug-info 程序退出时打印一些有关cpu和memory的统计信息。
--default-auth=plugin 指明要使用的客户端认证插件
--default-character-set=charset_name 设置默认字符集
--delayed-insert 使用INSERT DELAYED 而非INSERT。MySQL5.6.6中INSERT DELAYED已不被推荐使用,相应的该选项也将来未来的mysqldump中移除。
--delete-master-logs 在master上备份后删除其二进制日志。该选项会自动激活—master-data选项。
--disable-keys 对每个表在INSERT前后分别加/!40000 ALTER TABLE articlesDISABLE KEYS /和/!40000 ALTER TABLE articles ENABLE KEYS /。可使从备份文件恢复数据更快,因为索引在所有行插入后创建。仅对于MyISAM表的非唯一索引。
--dump-date 若使用了—comments选项则会在末尾显示-- Dump completed on xxxxxx,以标记时间。
--dump-slave[=value] 会在输出结果添加包含master二进制文件和位置信息的CHANGE MASTER语句。与—master-data选项类似,但用于复制slave以建立另外的与其同master的slave。会开启—lock-all-tables除非使用了—single-transaction。会在dump前停止slave的SQL thread在dump后开始该线程。可与--apply-slave-statements、--include-master-host-port结合使用。
--events 为备份的数据库备份事件。
--extended-insert 使用包含多个值列表的多行INSERT。
--fields-enclosed-by=string 与—tab选项结合使用。指明输出文件中的filed以何种字符串enclosed,与 LOAD DATA INFILE对应的选项意义相同。
--fields-escaped-by 同上
--fields-optionally-enclosed-by=string 同上
--fields-terminated-by=string 同上
--flush-logs 在备份前刷新MySQL日志。需RELOAD权限。若同时备份多个数据库,如使用—all-database或—database,则对于每个备份的数据库都会刷新一次日志,除非使用了—master-data或—lock-all-tables,此时日志仅在锁定表时刷新一次。若想让备份和刷新日志同时进行需结合使用—lock-all-tables或—master-data。
--flush-privileges 在备份了mysql这个数据库后发出FLUSH PRIVILEGES语句。本分mysql库或依赖mysql库中数据的库时需使用。
--help 显示帮助信息
--hex-blob 将二进制列,如,BINARY,VARBINARY,BLOB,BIT备份为十六进制形式。
--host 要连接的主机
--ignore-table=db_name.tbl_name 指明不备份的表
--include-master-host-port 使用了--dump-slave时在CHANGE MASTER语句中加入MASTER_HOST和MASTER_PORT。
--insert-ignore 用INSERT IGNORE 而非INSERT ,以忽略重复的数据。
--lines-terminated-by=string 与—tab选项结合使用。与LOAD DATA INFILE的LINE意义相同。指明行由何种字符串terminated。
--lock-all-tables 通过在备份期前加read lock锁定所有库的所有表。会自动关闭—single-transaction和—lock-tables。
--lock-tables 对于备份的库在备份前锁定将被备份的属于该库的表。使用READ LOCAL锁定以允许MyIASM表的并发插入。对于事务型的表请使用—single-transaction而非—lock-tables。另外该选项不能保证备份文件上各数据库间的表在逻辑上是一致的,因为市委每个库单独锁定表。一些选项如—opt会自动开启—locak-tables,可通过使用在其后使用--skip-lock-tables规避。
--log-error=file_name 在给定文件中附加警告和错误信息。
--login-path=name 从.mylogin.cnf登录文件读取登录参数。可通过mysql_config_editor创建登录文件。
--master-data[=value] 在输出中添加二进制日志名和位置。会开启—lock-all-tables除非也是用了—single-transaction。会自动关闭—lock-tables。
--max_allowed_packet=value 可发送或接收的最大包分组长度。
--net_buffer_length=value TCP/IP及socket通讯的buffer大小。
--no-autocommit 在INSERT前后添加set autocommit=0和commit。
--no-create-db 若使用了—all-databases或—databases,不在输出中添加CREATE DATABASE。
--no-create-info 不使用CREATE TABLE 重建备份的表。
--no-data 只备份结构不备份数据。
--no-set-names 同--skip-set-charset不设置charset。
--no-tablespaces 不在输出中使用CREATE LOG FILE和CREATE TABLESPACE。
--opt --add-drop-table, --add-locks, --create-options, --quick, --extended-insert, --lock-tables, --set-charset,和--disable-keys几个选项合起来的简写形式。
--order-by-primary 将备份的表中的行按主键排序或者第一个唯一键排序。当备份MyISAM表且将被载入到InnoDB表时很有用,打包备份本身的时间会较长。
--password[=password] 连接主机的密码
--pipe 在Windows上通过命名管道连接server。
--plugin-dir=path 插件存放目录。
--port=port_num 通过主机所使用的端口。
--protocol=type 连接主机所使用的协议。
--quick 备份时逐行读取表而非一次全部行后缓冲在内存中。在备份大表时有用。
--quote-names 使用“`”包围数据库名、表名、列名等标识符。若使用了ANSI_QUOTES则用“””包围。特别的,可能需要在—compatible后开启该选项。
--replace 使用REPLACE而非INSERT。
--result-file=file 将结果输出带指定的文件。
--routines 备份routines(存储过程和函数)。
--set-charset 添加SET NAMES default_character_set。默认开启。
--set-gtid-purged=value 确定是否在结果中添加SET @@GLOBAL.GTID_PURGED。若为ON但在server中没有开启GTID则发生错误。若OFF则什么都不做。若AUTO则server中开启GTID那么添加上述语句,反之不加。
--single-transaction 在备份前设置事务隔离级别为REPEATABLE READ并向server发送START TRANSACTION语句。仅对事务型表如InnoDB有用。与--ock-tables互斥。对于大文件备份--single-transaction与--quick结合使用。
--skip-add-drop-table 禁用--add-drop-table。
--skip-add-locks 禁用--add-locks。
--skip-comments 禁用—comments。
--skip-compact 禁用—compact。
--skip-disable-keys 禁用—disable-keys。
--skip-extended-insert 禁用--extended-insert。
--skip-opt 禁用--skip-opt。
--skip-quick 禁用--quick。
--skip-quote-names 禁用--quote-names。
--skip-set-charset 禁用—set-charset。
--skip-triggers 不备份triggers
--skip-tz-utc 禁用-- tz-utc
--socket=path 连接本机server所使用的socket。
--ssl-ca=file_name 包含信任的SSL CAs列表的文件名。
--ssl-capath=dir_name 包含PEM格式的可信任SSL CA证书的目录。
--ssl-cert=file_name 用于建立安全连接的SSL证书文件的名字。
--ssl-cipher=cipher_list 一系列用于SSL加密的所允许的密码。
--ssl-crl=file_name 包含证书废止列表的文件名。
--ssl-crlpath=dir_name 包含证书废止列表的文件的目录。
--ssl-key=file_name 用于建立安全连接的SSL key文件名。
--ssl-verify-server-cert The server's Common Name value in its certificate is verified against the host name used when connecting to the server
--tab=path 对于每个备份的表mysqldump创建一个包含CREATE TABLE语句的tbl_name.sql,而被连接的server会创建一个由tab键分隔的包含相应数据的tbl_name.txt。选项值为将被写入的目录。当mysqldump与mysqld处于同一主机时使用。否则tbl_name.txt文件会被写入远程主机相应的目录。当使用了—databases或—all-databases时该选项不适用。
--tables 覆盖--databases 或 -B 选项。该选项后的名称参数均被认为是表名。
--triggers 为每个备份的表备份trigger。
--tz-utc 在备份文件中添加SET TIME_ZONE='+00:00'。
--user=user_name 连接server所使用的用户名
--verbose 详细模式。
--version 显示版本信息并退出。
--where='where_condition' 仅备份与where条件中匹配的行。
--xml 产生XML格式的输出。

附录二:mysqldump文件:


-- MySQL dump 10.13  Distrib 5.6.24, for Linux (x86_64)

--

-- Host: localhost    Database: test

-- ------------------------------------------------------

-- Server version  5.6.24-log



/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;

/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;

/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;

/*!40101 SET NAMES utf8 */;

/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;

/*!40103 SET TIME_ZONE='+00:00' */;

/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;

/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;

/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;

/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;



--

-- Position to start replication or point-in-time recovery from

--



CHANGE MASTER TO MASTER_LOG_FILE='binlog.000013', MASTER_LOG_POS=3209;



--

-- Current Database: `test`

--



CREATE DATABASE /*!32312 IF NOT EXISTS*/ `test` /*!40100 DEFAULT CHARACTER SET latin1 */;

USE `test`;

--

-- Table structure for table `abc`

--



DROP TABLE IF EXISTS `abc`;

/*!40101 SET @saved_cs_client     = @@character_set_client */;

/*!40101 SET character_set_client = utf8 */;

CREATE TABLE `abc` (

  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,

  `name` varchar(65000) DEFAULT NULL,

  PRIMARY KEY (`id`)

) ENGINE=InnoDB AUTO_INCREMENT=201 DEFAULT CHARSET=latin1 ROW_FORMAT=COMPACT;

/*!40101 SET character_set_client = @saved_cs_client */;



--

-- Dumping data for table `abc`

--



/*!40000 ALTER TABLE `abc` DISABLE KEYS */;

INSERT INTO `abc` VALUES (24,'111'),(25,'qwwqee'),(26,'dfdsf'),(27,'23'),(28,'123'),(29,'123'),(34,'rer'),(35,'fdfd'),(50,'wre'),(51,'re'),(52,'trt'),(100,'dddd'),(200,'200'),(231,'we');

/*!40000 ALTER TABLE `abc` ENABLE KEYS */;

/*!50003 SET @saved_cs_client      = @@character_set_client */ ;

/*!50003 SET @saved_cs_results     = @@character_set_results */ ;

/*!50003 SET @saved_col_connection = @@collation_connection */ ;

/*!50003 SET character_set_client  = utf8 */ ;

/*!50003 SET character_set_results = utf8 */ ;

/*!50003 SET collation_connection  = utf8_general_ci */ ;

/*!50003 SET @saved_sql_mode       = @@sql_mode */ ;

/*!50003 SET sql_mode              = 'STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION' */ ;

DELIMITER ;;

/*!50003 CREATE*/ /*!50017 DEFINER=`root`@`%`*/ /*!50003 trigger abc_trigger before insert on abc for each row

begin set @x = "hello trigger";

end */;;

DELIMITER ;

/*!50003 SET sql_mode              = @saved_sql_mode */ ;

/*!50003 SET character_set_client  = @saved_cs_client */ ;

/*!50003 SET character_set_results = @saved_cs_results */ ;

/*!50003 SET collation_connection  = @saved_col_connection */ ;



--

-- Temporary view structure for view `abc_view1`

--



DROP TABLE IF EXISTS `abc_view1`;

/*!50001 DROP VIEW IF EXISTS `abc_view1`*/;

SET @saved_cs_client     = @@character_set_client;

SET character_set_client = utf8;

/*!50001 CREATE VIEW `abc_view1` AS SELECT

 1 AS `id`,

 1 AS `name`*/;

SET character_set_client = @saved_cs_client;



--

-- Table structure for table `hello`

--



DROP TABLE IF EXISTS `hello`;

/*!40101 SET @saved_cs_client     = @@character_set_client */;

/*!40101 SET character_set_client = utf8 */;

CREATE TABLE `hello` (

  `name` varchar(20) DEFAULT NULL,

  `num` int(11) DEFAULT NULL

) ENGINE=InnoDB DEFAULT CHARSET=latin1;

/*!40101 SET character_set_client = @saved_cs_client */;



--

-- Dumping data for table `hello`

--



/*!40000 ALTER TABLE `hello` DISABLE KEYS */;

INSERT INTO `hello` VALUES ('qqq',888),('aaa',888),('www',888),('sdfsdf',888),('erere',888),('25',888);

/*!40000 ALTER TABLE `hello` ENABLE KEYS */;



--

-- Table structure for table `myisam_test`

--



DROP TABLE IF EXISTS `myisam_test`;

/*!40101 SET @saved_cs_client     = @@character_set_client */;

/*!40101 SET character_set_client = utf8 */;

CREATE TABLE `myisam_test` (

  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,

  `name` varchar(100) DEFAULT NULL,

  PRIMARY KEY (`id`)

) ENGINE=MyISAM AUTO_INCREMENT=2 DEFAULT CHARSET=latin1;

/*!40101 SET character_set_client = @saved_cs_client */;



--

-- Dumping data for table `myisam_test`

--



/*!40000 ALTER TABLE `myisam_test` DISABLE KEYS */;

INSERT INTO `myisam_test` VALUES (1,'qqq');

/*!40000 ALTER TABLE `myisam_test` ENABLE KEYS */;



--

-- Table structure for table `t1`

--



DROP TABLE IF EXISTS `t1`;

/*!40101 SET @saved_cs_client     = @@character_set_client */;

/*!40101 SET character_set_client = utf8 */;

CREATE TABLE `t1` (

  `year_col` int(11) DEFAULT NULL,

  `some_data` int(11) DEFAULT NULL

) ENGINE=InnoDB DEFAULT CHARSET=latin1

/*!50100 PARTITION BY RANGE (year_col)

(PARTITION p0 VALUES LESS THAN (1991) ENGINE = InnoDB,

 PARTITION p1 VALUES LESS THAN (1995) ENGINE = InnoDB,

 PARTITION p2 VALUES LESS THAN (1999) ENGINE = InnoDB,

 PARTITION p5 VALUES LESS THAN MAXVALUE ENGINE = InnoDB) */;

/*!40101 SET character_set_client = @saved_cs_client */;



--

-- Dumping data for table `t1`

--



/*!40000 ALTER TABLE `t1` DISABLE KEYS */;

/*!40000 ALTER TABLE `t1` ENABLE KEYS */;



--

-- Current Database: `test`

--



USE `test`;



--

-- Final view structure for view `abc_view1`

--



/*!50001 DROP VIEW IF EXISTS `abc_view1`*/;

/*!50001 SET @saved_cs_client          = @@character_set_client */;

/*!50001 SET @saved_cs_results         = @@character_set_results */;

/*!50001 SET @saved_col_connection     = @@collation_connection */;

/*!50001 SET character_set_client      = utf8 */;

/*!50001 SET character_set_results     = utf8 */;

/*!50001 SET collation_connection      = utf8_general_ci */;

/*!50001 CREATE ALGORITHM=UNDEFINED */

/*!50013 DEFINER=`root`@`%` SQL SECURITY DEFINER */

/*!50001 VIEW `abc_view1` AS select `abc`.`id` AS `id`,`abc`.`name` AS `name` from `abc` */;

/*!50001 SET character_set_client      = @saved_cs_client */;

/*!50001 SET character_set_results     = @saved_cs_results */;

/*!50001 SET collation_connection      = @saved_col_connection */;

/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;

/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;

/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;

/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;

/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;

/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;

/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;

/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; 

-- Dump completed on 2016-11-18 11:07:25
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!