mysqldumpによるDDL出力

調べてみました。

テーブルのDDL出力は以下ような関数(backtrace)で行っています。

#0  get_table_structure (table=0x8c3c908 "t1", db=0xbfd0f8b8 "test", table_type=0xbfd0ee30 "\v", ignore_flag=0xbfd0ef8b "¿ù\213\t\b") at mysqldump.c:1624
#1  0x08084483 in dump_table (table=0x8c3c908 "t1", db=0xbfd0f8b8 "test") at mysqldump.c:2316
#2  0x08085eca in dump_all_tables_in_db (database=0xbfd0f8b8 "test") at mysqldump.c:3014
#3  0x0808594c in dump_databases (db_names=0x8c241c4) at mysqldump.c:2841
#4  0x08087c8e in main (argc=1, argv=0x8c241c4) at mysqldump.c:3922

こんな感じでshow create tableを実行して、

  my_snprintf(query, sizeof(query), "SHOW CREATE TABLE %s", result_table);
  if (mysql_query_with_error_report(mysql, &table_res, query))
    DBUG_RETURN(0);

こんな感じで結果をそのまま出力しています。

      row= mysql_fetch_row(result);

      fprintf(sql_file,
              "SET @saved_cs_client     = @@character_set_client;\n"
              "SET character_set_client = utf8;\n"
              "%s;\n"
              "SET character_set_client = @saved_cs_client;\n",
              row[1]);

なのでmysqldumpのTritonn対応をする場合にはサーバ側のshow create tableを改変するだけで良さそうですね。