版权声明:本文由王珏原创文章,转载请注明出处:
文章原文链接:https://www.qcloud.com/community/article/261
来源:腾云阁 https://www.qcloud.com/community
Mysqldump源码分析
本文对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 articles DISABLE 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
)