我正在使用 MySQL Administrator 进行数据库备份。我可以完美地备份整个数据库及其所有表。有些表的大小非常大,所以我想知道我是否只能备份表的结构(仅其元素)而不备份其数据。
答案1
使用--no-data
带有 mysqldump 的开关来告诉它不要转储数据,只转储表结构。
这将输出表的 CREATE TABLE 语句。
像这样
mysqldump --no-data -h localhost -u root -ppassword mydatabase > mydatabase_backup.sql
要定位特定表,请在数据库名称后输入它们。
mysqldump --no-data -h localhost -u root -ppassword mydatabase table1 table2 > mydatabase_backup.sql
http://dev.mysql.com/doc/refman/5.1/en/mysqldump.html#option_mysqldump_no-data
答案2
正如 LukeR 所说,mysqldump 的 --no-data 选项将执行您想要的操作。
除此之外,这里是我编写的一个备份脚本,它将所有 mysql 数据库转储到纯文本文件中,并为每个数据库的表模式和数据创建单独的转储文件(在没有数据的情况下在另一个 mysql 服务器上恢复或创建表是很常见的,当你已经有一个只使用 CREATE TABLE/CREATE INDEX 等命令的小文件时,这会容易得多)
/bin/bash #!/bin/bash #备份mysql.sh # # 克雷格·桑德斯 <[电子邮件保护]> # 此脚本属于公共领域。你可以用它做任何你想做的事情。 MYUSER="用户名" MYPWD="密码" ARGS="--单一事务--刷新日志--完成插入" 数据库=$(mysql -D mysql --skip-column-names -B -e'显示数据库;'| egrep -v'information_schema'); BACKUPDIR=/var/备份/mysql YEAR=$(日期+"%Y") MONTH=$(日期 +"%m") DAY=$(日期 +"%d") DATE="$YEAR-$MONTH/$YEAR-$MONTH-$DAY" mkdir -p $BACKUPDIR/$DATE cd $BACKUPDIR/$DATE 对于 $DATABASES 中的 i ;执行 echo -n“备份$i:模式……” mysqldump $ARGS --no-data -u$MYUSER -p$MYPWD $i > $i.schema.sql echo -n“数据……” mysqldump $ARGS --skip-opt --no-create-db --no-create-info -u$MYUSER -p$MYPWD $i > $i.data.sql echo -n“正在压缩……” gzip -9fq $i.schema.sql $i.data.sql 回显“完成”。 完毕 #删除超过30天的备份文件 OLD=$(查找 $BACKUPDIR -type d -mtime +30) 如果 [ -n "$OLD" ] ; 那么 echo 删除旧备份文件:$OLD 回显 $OLD | xargs rm -rfv 菲
答案3
您也可以通过mysql
命令行界面手动执行此操作DESCRIBE <tablename>
并复制/粘贴结果。