mysqldump导出指定mysql数据库所有表DDL SQL

内容纲要

一、背景需求

需要拿到MySQL数据库中,所有表的DDL SQL。

二、实现方案

2.1 mysqldump命令

mysqldump -u root -proot --no-data --default-character-set=utf8mb4 database_name > output_ddl.sql

这个命令做了以下事情:

  • -u root 指定用户名为root
  • -proot 是密码,与-p紧密相连(没有空格),表示密码为root
  • --no-data 表示不导出数据,只导出数据库结构(DDL)。
  • --default-character-set=utf8mb4 指定字符集为utf8mb4
  • dataopsdb_dev 是数据库名称。
  • > output_ddl.sql 将输出重定向到output_ddl.sql文件。

请根据您的实际数据库用户名、密码和数据库名称调整这些参数。这个命令应该直接在命令行执行,而不是放在批处理文件中。

2.2 windows上写bat脚本

过程步骤

  1. 生成所有表的SHOW CREATE TABLE语句列表,这可以通过一个简单的SQL查询实现,如之前所述。但鉴于您已经有一个包含这些命令的show_create_tables.sql文件,我们将跳过这一步。
    2.执行这些SHOW CREATE TABLE命令并将结果格式化输出到文件。由于mysql命令行工具不能直接从一个文件中读取命令并执行(除了使用源命令外),您的脚本尝试读取每行并执行。为了直接输出CREATE TABLE语句,您需要捕获这些命令的输出并正确格式化它们。

理想情况下,您应该直接从MySQL数据库中导出所需的DDL,而不是通过批处理脚本间接执行。但如果您坚持使用批处理脚本来实现,一个简化的方法是直接将每个表的SHOW CREATE TABLE结果保存到一个文件,而不是尝试修改批处理脚本的输出格式。

@echo off
chcp 65001
setlocal enabledelayedexpansion

:: 设置数据库名称
set dbName=dataopsdb_dev
:: 设置输出文件
set outputFile=output_ddl.txt

:: 生成 SHOW CREATE TABLE 语句
echo Generating SHOW CREATE TABLE statements...
mysql -u root -proot -e "SELECT CONCAT('SHOW CREATE TABLE \`', table_name, '\`;') FROM information_schema.tables WHERE table_schema = '%dbName%';" -D%dbName% --default-character-set=utf8mb4 > show_create_tables.sql

:: 执行 SHOW CREATE TABLE 语句并保存到文件
echo Executing SHOW CREATE TABLE statements and saving to %outputFile%...
if exist %outputFile% del %outputFile%
for /F "tokens=*" %%A in (show_create_tables.sql) do (
    set "line=%%A"
    mysql -u root -proot -D%dbName% --default-character-set=utf8mb4 -e "!line!" >> %outputFile%
)

echo Done.

2.3 linux上写sh脚本

#!/bin/bash
# 设置字符集
export LANG=en_US.utf8

# 设置数据库名称
dbName="dataopsdb_dev"
# 设置输出文件
outputFile="output_ddl.txt"

# 生成 SHOW CREATE TABLE 语句
echo "Generating SHOW CREATE TABLE statements..."
mysql -u root -proot -e "SELECT CONCAT('SHOW CREATE TABLE \`', table_name, '\`;') FROM information_schema.tables WHERE table_schema = '$dbName';" -D$dbName --default-character-set=utf8mb4 > show_create_tables.sql

# 执行 SHOW CREATE TABLE 语句并保存到文件
echo "Executing SHOW CREATE TABLE statements and saving to $outputFile..."
> "$outputFile"
while IFS= read -r line; do
    mysql -u root -proot -D$dbName --default-character-set=utf8mb4 -e "$line" >> "$outputFile"
done < show_create_tables.sql

echo "Done."

给.sh脚本执行权限,并运行它:

chmod +x script_name.sh
./script_name.sh

这个脚本和.bat脚本执行相同的操作:生成包含SHOW CREATE TABLE语句的文件,然后执行这些语句,并将输出保存到指定的文件中。请根据您的实际环境(MySQL用户名和密码)调整脚本中的凭证信息。

Leave a Comment

您的电子邮箱地址不会被公开。 必填项已用*标注

close
arrow_upward