• Mysqldump源码分析


    版权声明:本文由王珏原创文章,转载请注明出处: 
    文章原文链接: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
  • 相关阅读:
    iscsi: 多路径
    Paxos算法分析
    ceph实践: 搭建环境
    ocfs2: 搭建环境
    设计模式:Context模式
    Ceph剖析:Leader选举
    Ceph剖析:定时器safetimer的实现
    nfs:环境搭建
    Ceph剖析:数据分布之CRUSH算法与一致性Hash
    Linux命令小结:crontab/netstat/iostat/sar
  • 原文地址:https://www.cnblogs.com/purpleraintear/p/6184165.html
Copyright © 2020-2023  润新知