先使用 命令
ibd2sdi --dump-file user.txt ./user.ibd
生成json 数据到txt文件,在使用php拼接sql
function getC($data)
{
$object = $data[1]['object']['dd_object'];
$tableName = $object['name'] ?? '';
$columns = $object['columns'] ?? [];
$sql = "DROP TABLE IF EXISTS `{$tableName}`;" . PHP_EOL;
$sql .= "CREATE TABLE `{$tableName}` (";
$columnSql = '';
$primary = '';
foreach ($columns as $key => $column) {
$columnName = $column['name'];
// if ($columnName === 'DB_TRX_ID'
// || $columnName === 'DB_ROLL_PTR'
// || $columnName === 'DB_ROW_ID') {
// continue;
// }
if ($column['hidden'] == 2) {//隐藏字段
continue;
}
$columnType = $column['column_type_utf8'];
$default = ($column['default_value_utf8'] !== "") ? "DEFAULT {$column['default_value_utf8']}" : '';
$comment = !empty($column['comment']) ? "COMMENT '{$column['comment']}'" : '';
$auto_increment = $column['is_auto_increment'] == true ? "AUTO_INCREMENT" : '';
$isNullable = '';
if (!$default) {
$isNullable = $column['is_nullable'] ? 'NULL' : 'NOT NULL';
}
if ($column['name'] === 'id') {
$primary = " PRIMARY KEY (`{$column['name']}`) USING BTREE,";
}
$columnSql .= (PHP_EOL . "`$columnName` $columnType $isNullable $default $auto_increment $comment, ");
}
if ($columnSql) {
// $row_format = $object['row_format'] ;
if ($primary) {
$columnSql .= PHP_EOL . $primary;
}
$sql .= PHP_EOL . rtrim($columnSql, ", ") . PHP_EOL;
$sql .= ") ENGINE = {$object['engine']} AUTO_INCREMENT=1 COMMENT='{$object['comment']}' ROW_FORMAT = Dynamic; ";
return $sql . PHP_EOL . PHP_EOL . PHP_EOL;
}
return '';
}
$json = file_get_contents('user.txt');
$sql = getC(json_decode($json, true));
file_put_contents('user.sql', $sql, FILE_APPEND);