版权声明:本文由王珏原创文章,转载请注明出处: 
文章原文链接: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等


  1. -- MySQL dump 10.13 Distrib 5.6.24, for Linux (x86_64)
  2. --
  3. -- Host: localhost Database: test
  4. -- ------------------------------------------------------
  5. -- Server version 5.6.24-log
  6. /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
  7. /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
  8. /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
  9. /*!40101 SET NAMES utf8 */;
  10. /*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
  11. /*!40103 SET TIME_ZONE='+00:00' */;
  12. /*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
  13. /*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
  14. /*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
  15. /*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;

do_stop_slave_sql:

执行条件:

  1. if (opt_slave_data && do_stop_slave_sql(mysql))
  2. goto err;

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

do_flush_tables_read_lock:

执行条件:

  1. if ((opt_lock_all_tables || opt_master_data ||
  2. (opt_single_transaction && flush_logs)) &&
  3. do_flush_tables_read_lock(mysql))
  4. goto err;

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

FLUSH TABLES;

FLUSH TABLES WITH READ LOCK;

get_bin_log_name:

执行条件:

  1. if (opt_delete_master_logs)
  2. {
  3. if (get_bin_log_name(mysql, bin_log_name, sizeof(bin_log_name)))
  4. goto err;
  5. }

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

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

start_transaction:

执行条件:

  1. if (opt_single_transaction && start_transaction(mysql))
  2. goto err;

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

  1. SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ

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

add_stop_slave:

执行条件:

  1. if (opt_slave_apply && add_stop_slave())
  2. goto err;

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

process_set_gtid_purged:

执行条件:

  1. if (gtid_mode_val && strcmp(gtid_mode_val, "OFF"))
  2. {
  3. add_set_gtid_purged(mysql_con);

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

SET @@GLOBAL.GTID_PURGED=

do_show_master_status:

执行条件:

  1. if (opt_master_data && do_show_master_status(mysql))
  2. goto err;

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

SHOW MASTER STATUS;

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

do_show_slave_status:

执行条件:

  1. if (opt_slave_data && do_show_slave_status(mysql))
  2. goto err;

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

SHOW SLAVE STATUS;

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

do_unlock_tables:

执行条件:

  1. if (opt_single_transaction && do_unlock_tables(mysql)) /* unlock but no commit! */
  2. goto err;

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

UNLOCK TABLES;

dump_all_tablespaces:

执行条件:

  1. if (opt_alltspcs)
  2. dump_all_tablespaces();

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

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

dump_all_databases:

执行条件:

  1. if (opt_alldbs)
  2. {
  3. dump_all_databases();
  4. }

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

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

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

3.dump库中所有表;

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

  1. --
  2. -- Current Database: `test`
  3. --

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获取表结构:

  1. SELECT`COLUMN_NAME`AS`Field`,`COLUMN_TYPE`AS`Type`,`IS_NULLABLE`AS`Null`,`COLUMN_KEY`AS
  2. `Key`,`COLUMN_DEFAULT`AS`Default`,`EXTRA`AS`Extra`,`COLUMN_COMMENT`AS`Comment`FROM`
  3. 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:

执行条件:

  1. if (argc > 1 && !opt_databases)
  2. {
  3. dump_selected_tables(*argv, (argv + 1), (argc - 1));
  4. }

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

dump_databases:

执行条件:

  1. if (argc > 1 && !opt_databases)
  2. {
  3. }
  4. else
  5. {
  6. /* One or more databases, all tables */
  7. dump_databases(argv);
  8. }

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

do_start_slave_sql:

执行条件:

  1. /* if --dump-slave , start the slave sql thread */
  2. if (opt_slave_data && do_start_slave_sql(mysql))
  3. goto err;

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

set_session_binlog:

打开binlog;

add_slave_statements:

执行条件:

  1. if (opt_slave_apply && add_slave_statements())
  2. goto err;

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

purge_bin_logs_to:

执行条件:

  1. if (opt_delete_master_logs && purge_bin_logs_to(mysql, bin_log_name))
  2. goto err;

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

PURGE BINARY LOGS TO binlog_xxx;

dbDisconnect:

断开mysql连接;

write_footer:

写入文件结尾:

  1. /*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
  2. /*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
  3. /*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
  4. /*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
  5. /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
  6. /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
  7. /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
  8. /*!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文件:


  1. -- MySQL dump 10.13 Distrib 5.6.24, for Linux (x86_64)
  2. --
  3. -- Host: localhost Database: test
  4. -- ------------------------------------------------------
  5. -- Server version 5.6.24-log
  6. /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
  7. /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
  8. /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
  9. /*!40101 SET NAMES utf8 */;
  10. /*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
  11. /*!40103 SET TIME_ZONE='+00:00' */;
  12. /*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
  13. /*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
  14. /*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
  15. /*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
  16. --
  17. -- Position to start replication or point-in-time recovery from
  18. --
  19. CHANGE MASTER TO MASTER_LOG_FILE='binlog.000013', MASTER_LOG_POS=3209;
  20. --
  21. -- Current Database: `test`
  22. --
  23. CREATE DATABASE /*!32312 IF NOT EXISTS*/ `test` /*!40100 DEFAULT CHARACTER SET latin1 */;
  24. USE `test`;
  25. --
  26. -- Table structure for table `abc`
  27. --
  28. DROP TABLE IF EXISTS `abc`;
  29. /*!40101 SET @saved_cs_client = @@character_set_client */;
  30. /*!40101 SET character_set_client = utf8 */;
  31. CREATE TABLE `abc` (
  32. `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  33. `name` varchar(65000) DEFAULT NULL,
  34. PRIMARY KEY (`id`)
  35. ) ENGINE=InnoDB AUTO_INCREMENT=201 DEFAULT CHARSET=latin1 ROW_FORMAT=COMPACT;
  36. /*!40101 SET character_set_client = @saved_cs_client */;
  37. --
  38. -- Dumping data for table `abc`
  39. --
  40. /*!40000 ALTER TABLE `abc` DISABLE KEYS */;
  41. 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');
  42. /*!40000 ALTER TABLE `abc` ENABLE KEYS */;
  43. /*!50003 SET @saved_cs_client = @@character_set_client */ ;
  44. /*!50003 SET @saved_cs_results = @@character_set_results */ ;
  45. /*!50003 SET @saved_col_connection = @@collation_connection */ ;
  46. /*!50003 SET character_set_client = utf8 */ ;
  47. /*!50003 SET character_set_results = utf8 */ ;
  48. /*!50003 SET collation_connection = utf8_general_ci */ ;
  49. /*!50003 SET @saved_sql_mode = @@sql_mode */ ;
  50. /*!50003 SET sql_mode = 'STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION' */ ;
  51. DELIMITER ;;
  52. /*!50003 CREATE*/ /*!50017 DEFINER=`root`@`%`*/ /*!50003 trigger abc_trigger before insert on abc for each row
  53. begin set @x = "hello trigger";
  54. end */;;
  55. DELIMITER ;
  56. /*!50003 SET sql_mode = @saved_sql_mode */ ;
  57. /*!50003 SET character_set_client = @saved_cs_client */ ;
  58. /*!50003 SET character_set_results = @saved_cs_results */ ;
  59. /*!50003 SET collation_connection = @saved_col_connection */ ;
  60. --
  61. -- Temporary view structure for view `abc_view1`
  62. --
  63. DROP TABLE IF EXISTS `abc_view1`;
  64. /*!50001 DROP VIEW IF EXISTS `abc_view1`*/;
  65. SET @saved_cs_client = @@character_set_client;
  66. SET character_set_client = utf8;
  67. /*!50001 CREATE VIEW `abc_view1` AS SELECT
  68. 1 AS `id`,
  69. 1 AS `name`*/;
  70. SET character_set_client = @saved_cs_client;
  71. --
  72. -- Table structure for table `hello`
  73. --
  74. DROP TABLE IF EXISTS `hello`;
  75. /*!40101 SET @saved_cs_client = @@character_set_client */;
  76. /*!40101 SET character_set_client = utf8 */;
  77. CREATE TABLE `hello` (
  78. `name` varchar(20) DEFAULT NULL,
  79. `num` int(11) DEFAULT NULL
  80. ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
  81. /*!40101 SET character_set_client = @saved_cs_client */;
  82. --
  83. -- Dumping data for table `hello`
  84. --
  85. /*!40000 ALTER TABLE `hello` DISABLE KEYS */;
  86. INSERT INTO `hello` VALUES ('qqq',888),('aaa',888),('www',888),('sdfsdf',888),('erere',888),('25',888);
  87. /*!40000 ALTER TABLE `hello` ENABLE KEYS */;
  88. --
  89. -- Table structure for table `myisam_test`
  90. --
  91. DROP TABLE IF EXISTS `myisam_test`;
  92. /*!40101 SET @saved_cs_client = @@character_set_client */;
  93. /*!40101 SET character_set_client = utf8 */;
  94. CREATE TABLE `myisam_test` (
  95. `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  96. `name` varchar(100) DEFAULT NULL,
  97. PRIMARY KEY (`id`)
  98. ) ENGINE=MyISAM AUTO_INCREMENT=2 DEFAULT CHARSET=latin1;
  99. /*!40101 SET character_set_client = @saved_cs_client */;
  100. --
  101. -- Dumping data for table `myisam_test`
  102. --
  103. /*!40000 ALTER TABLE `myisam_test` DISABLE KEYS */;
  104. INSERT INTO `myisam_test` VALUES (1,'qqq');
  105. /*!40000 ALTER TABLE `myisam_test` ENABLE KEYS */;
  106. --
  107. -- Table structure for table `t1`
  108. --
  109. DROP TABLE IF EXISTS `t1`;
  110. /*!40101 SET @saved_cs_client = @@character_set_client */;
  111. /*!40101 SET character_set_client = utf8 */;
  112. CREATE TABLE `t1` (
  113. `year_col` int(11) DEFAULT NULL,
  114. `some_data` int(11) DEFAULT NULL
  115. ) ENGINE=InnoDB DEFAULT CHARSET=latin1
  116. /*!50100 PARTITION BY RANGE (year_col)
  117. (PARTITION p0 VALUES LESS THAN (1991) ENGINE = InnoDB,
  118. PARTITION p1 VALUES LESS THAN (1995) ENGINE = InnoDB,
  119. PARTITION p2 VALUES LESS THAN (1999) ENGINE = InnoDB,
  120. PARTITION p5 VALUES LESS THAN MAXVALUE ENGINE = InnoDB) */;
  121. /*!40101 SET character_set_client = @saved_cs_client */;
  122. --
  123. -- Dumping data for table `t1`
  124. --
  125. /*!40000 ALTER TABLE `t1` DISABLE KEYS */;
  126. /*!40000 ALTER TABLE `t1` ENABLE KEYS */;
  127. --
  128. -- Current Database: `test`
  129. --
  130. USE `test`;
  131. --
  132. -- Final view structure for view `abc_view1`
  133. --
  134. /*!50001 DROP VIEW IF EXISTS `abc_view1`*/;
  135. /*!50001 SET @saved_cs_client = @@character_set_client */;
  136. /*!50001 SET @saved_cs_results = @@character_set_results */;
  137. /*!50001 SET @saved_col_connection = @@collation_connection */;
  138. /*!50001 SET character_set_client = utf8 */;
  139. /*!50001 SET character_set_results = utf8 */;
  140. /*!50001 SET collation_connection = utf8_general_ci */;
  141. /*!50001 CREATE ALGORITHM=UNDEFINED */
  142. /*!50013 DEFINER=`root`@`%` SQL SECURITY DEFINER */
  143. /*!50001 VIEW `abc_view1` AS select `abc`.`id` AS `id`,`abc`.`name` AS `name` from `abc` */;
  144. /*!50001 SET character_set_client = @saved_cs_client */;
  145. /*!50001 SET character_set_results = @saved_cs_results */;
  146. /*!50001 SET collation_connection = @saved_col_connection */;
  147. /*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
  148. /*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
  149. /*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
  150. /*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
  151. /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
  152. /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
  153. /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
  154. /*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
  155. -- Dump completed on 2016-11-18 11:07:25

Mysqldump源码分析的更多相关文章

  1. ABP源码分析一:整体项目结构及目录

    ABP是一套非常优秀的web应用程序架构,适合用来搭建集中式架构的web应用程序. 整个Abp的Infrastructure是以Abp这个package为核心模块(core)+15个模块(module ...

  2. HashMap与TreeMap源码分析

    1. 引言     在红黑树--算法导论(15)中学习了红黑树的原理.本来打算自己来试着实现一下,然而在看了JDK(1.8.0)TreeMap的源码后恍然发现原来它就是利用红黑树实现的(很惭愧学了Ja ...

  3. nginx源码分析之网络初始化

    nginx作为一个高性能的HTTP服务器,网络的处理是其核心,了解网络的初始化有助于加深对nginx网络处理的了解,本文主要通过nginx的源代码来分析其网络初始化. 从配置文件中读取初始化信息 与网 ...

  4. zookeeper源码分析之五服务端(集群leader)处理请求流程

    leader的实现类为LeaderZooKeeperServer,它间接继承自标准ZookeeperServer.它规定了请求到达leader时需要经历的路径: PrepRequestProcesso ...

  5. zookeeper源码分析之四服务端(单机)处理请求流程

    上文: zookeeper源码分析之一服务端启动过程 中,我们介绍了zookeeper服务器的启动过程,其中单机是ZookeeperServer启动,集群使用QuorumPeer启动,那么这次我们分析 ...

  6. zookeeper源码分析之三客户端发送请求流程

    znode 可以被监控,包括这个目录节点中存储的数据的修改,子节点目录的变化等,一旦变化可以通知设置监控的客户端,这个功能是zookeeper对于应用最重要的特性,通过这个特性可以实现的功能包括配置的 ...

  7. java使用websocket,并且获取HttpSession,源码分析

    转载请在页首注明作者与出处 http://www.cnblogs.com/zhuxiaojie/p/6238826.html 一:本文使用范围 此文不仅仅局限于spring boot,普通的sprin ...

  8. ABP源码分析二:ABP中配置的注册和初始化

    一般来说,ASP.NET Web应用程序的第一个执行的方法是Global.asax下定义的Start方法.执行这个方法前HttpApplication 实例必须存在,也就是说其构造函数的执行必然是完成 ...

  9. ABP源码分析三:ABP Module

    Abp是一种基于模块化设计的思想构建的.开发人员可以将自定义的功能以模块(module)的形式集成到ABP中.具体的功能都可以设计成一个单独的Module.Abp底层框架提供便捷的方法集成每个Modu ...

随机推荐

  1. JAVA 环境变量设置 (windows + Linux)

    注:使用JDK1.5以上的版本,可以不设置CLASSPATH这个环境变量 Windows: 双击安装到某一目录 设置以下环境变量(使用环境变量便于更新) JAVA_HOME   E:\software ...

  2. (copy) DBAN vs nwipe

    source: https://sourceforge.net/p/dban/discussion/208932/thread/cb591b59/ Question:Trouble in runnin ...

  3. (喷血分享)利用.NET生成数据库表的创建脚本,类似SqlServer编写表的CREATE语句

    (喷血分享)利用.NET生成数据库表的创建脚本,类似SqlServer编写表的CREATE语句 在我们RDIFramework.NET代码生成器中,有这样一个应用,就是通过数据库表自动生成表的CREA ...

  4. STL之优先队列(1)

    优先队列用法 在优先队列中,优先级高的元素先出队列. 标准库默认使用元素类型的<操作符来确定它们之间的优先级关系. 优先队列的第一种用法: 也是最常用的用法 priority_queue< ...

  5. CSS3 中border-image详解

    CSS3 border-image详解.应用及jQuery插件 一.border-image的兼容性 border-image可以说是CSS3中的一员大将,将来一定会大放光彩,其应用潜力真的是非常的惊 ...

  6. 安装第三方库出现 Python version 2.7 required, which was not found in the registry

    安装第三方库出现 Python version 2.7 required, which was not found in the registry 建立一个文件 register.py 内容如下. 然 ...

  7. xcode 创建项目 勾选 git 出现警告

    1. 解决方法: 在mac机上找到终端工具  >> 这里先介绍下使用Command-line. 1,下载Git installer,地址:http://git-scm.com/downlo ...

  8. flash性能优化方案整理(最全)

    性能优化的原则 1.避免过早优化:太早优化将使代码难以设计和维护,最好是针对程序的瓶颈进行优化. 2.改进性能有时需要权衡:不能一味注重改进性能,一个项目要考虑各方面的利弊,比如代码的健壮性,结构性, ...

  9. CSS中的浮动问题

    有关于我们经常做的导航问题.我们如果想用ul>li来做导航的话,我是一般是用到浮动这个属性的. 也就是 float:left; 或者是 display:inline-block;  下边代码: ...

  10. 2x2矩阵相乘模版

    由于Unity只有4x4矩阵,今天要做一个2x2矩阵的旋转,居然忘了顺序.故写下作为模版记录. 顺序: 下面是使用其进行旋转的C#代码: public struct Position { public ...