ChatGPT解决这个技术问题 Extra ChatGPT

如何备份 MySQL 数据库中的单个表?

默认情况下,mysqldump 会备份整个数据库。我需要在 MySQL 中备份一个表。可能吗?我该如何恢复它?


7
7 revs

从 .sql 转储和恢复单个表

倾倒

mysqldump db_name table_name > table_name.sql

从远程数据库转储

mysqldump -u <db_username> -h <db_host> -p db_name table_name > table_name.sql

供进一步参考:

http://www.abbeyworkshop.com/howto/lamp/MySQL_Export_Backup/index.html

恢复

mysql -u <user_name> -p db_name
mysql> source <full_path>/table_name.sql

或在一行中

mysql -u username -p db_name < /path/to/table_name.sql

从压缩 (.sql.gz) 格式转储和恢复单个表

学分:John McGrath

倾倒

mysqldump db_name table_name | gzip > table_name.sql.gz

恢复

gunzip < table_name.sql.gz | mysql -u username -p db_name


SQL 通常可以很好地压缩——您可以通过 gzip 将上面的命令通过管道传输,生成的文件会小得多:mysqldump db_name table_name | gzip > table_name.sql.gz 恢复:gunzip < table_name.sql.gz | mysql -u username -p db_name
如果您想在命令行中包含密码怎么办?所以你已经在使用 -pPASSWORD
mysql转储--where='where_condition', -w 'where_condition' Dump only rows selected by the given WHERE condition.
J
Jacob

mysqldump 可以采用 tbl_name 参数,因此它只备份给定的表。

mysqldump -u -p yourdb yourtable > c:\backups\backup.sql

R
Robin Gomez

尝试

for line in $(mysql -u... -p... -AN -e "show tables from NameDataBase");
do 
mysqldump -u... -p.... NameDataBase $line > $line.sql ; 
done

$line 内容名称表;)


这对于将数据库转储到单独的表查询中很方便——我可以知道这些选项到底是做什么的吗?
你好,-AN(--no-auto-rehash, -A | --skip-column-names, -N 不要在结果中写列名。) - e(--execute=statement, -e 语句 | 执行语句并退出。默认输出格式与使用 --batch 生成的格式相同。) fuente: dev.mysql.com/doc/refman/5.6/en/mysql-command-options.html
m
minhas23

我们可以使用任何给定条件对任何特定表进行 mysql 转储,如下所示

mysqldump -uusername -p -hhost databasename tablename --skip-lock-tables

如果我们想在表上添加特定的 where 条件,那么我们可以使用以下命令

mysqldump -uusername -p -hhost databasename tablename --where="date=20140501" --skip-lock-tables

D
Daniel Adenew

您可以使用 MYSQLWorkbench tool 轻松转储选定的表,单个或一组表在一个转储中然后按如下方式导入:如果您在本地运行它,您也可以添加 主机信息 添加-h IP.ADDRESS.NUMBER after-u 用户名

mysql -u root -p databasename < dumpfileFOurTableInOneDump.sql 

不幸的是,Mysql Workbench 有一些转义问题,可能会导致导出无用的无效数据...
k
kev

您可以从命令行使用 mysqldump

mysqldump -u username -p password dbname tablename > "path where you want to dump"

您还可以使用 MySQL Workbench:

转到左侧 > 数据导出 > 选择架构 > 选择表,然后单击导出


只是一个小信息,省略 -p 和密码之间的空格 --> -ppassword,但它不安全
M
Matt Rice

您可以使用以下代码:

这个例子备份了sugarcrm 数据库并将输出转储到sugarcrm.sql

# mysqldump -u root -ptmppassword sugarcrm > sugarcrm.sql

# mysqldump -u root -p[root_password] [database_name] > dumpfilename.sql

Sugarcrm.sql 将包含 Sugarcrm 数据库中所有表的删除表、创建表和插入命令。以下是 sugarcrm.sql 的部分输出,显示了 accounts_contacts 表的转储信息:

--

-- 表accounts_contacts的表结构

DROP TABLE IF EXISTS `accounts_contacts`;
SET @saved_cs_client = @@character_set_client;
SET character_set_client = utf8;
CREATE TABLE `accounts_contacts` (
`id` varchar(36) NOT NULL,
`contact_id` varchar(36) default NULL,
`account_id` varchar(36) default NULL,
`date_modified` datetime default NULL,
`deleted` tinyint(1) NOT NULL default '0',
PRIMARY KEY (`id`),
KEY `idx_account_contact` (`account_id`,`contact_id`),
KEY `idx_contid_del_accid` (`contact_id`,`deleted`,`account_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
SET character_set_client = @saved_cs_client;

--

P
Phoenix

您可以使用以下代码:

对于单表结构单独备份

-

mysqldump -d <database name> <tablename> > <filename.sql>

对于带有数据的单表结构

-

mysqldump <database name> <tablename> > <filename.sql>

希望它会有所帮助。


J
JaY KuMaR

只需使用 mysqldump -u root database table 或使用密码 mysqldump -u root -p pass database table


M
MrPHP

我遇到了这个问题,并想用我们完整的示例来扩展其他人的答案:

这将在它自己的文件中备份模式,然后在自己的文件中备份每个数据库表。

日期格式意味着您可以在硬盘空间允许的情况下尽可能频繁地运行它。


DATE=`date '+%Y-%m-%d-%H'`
BACKUP_DIR=backups/
DATABASE_NAME=database_name
mysqldump --column-statistics=0  --user=fake --password=secure --host=10.0.0.1  --routines --triggers --single-transaction --no-data --databases ${DATABASE_NAME} | gzip > ${BACKUP_DIR}${DATE}-${DATABASE_NAME}--schema.sql.gz
for table in $(mysql  --user=fake --password=secure --host=10.0.0.1 -AN -e "SHOW TABLES FROM ${DATABASE_NAME};");
    do
    echo ""
    echo ""
    echo "mysqldump --column-statistics=0  --user=fake --password=secure --host=10.0.0.1 --routines --triggers --single-transaction --databases ${DATABASE_NAME} --tables ${table} | gzip > ${BACKUP_DIR}${DATE}-${DATABASE_NAME}-${table}.sql.gz"
    mysqldump --column-statistics=0  --user=fake --password=secure --host=10.0.0.1 --routines --triggers --single-transaction --databases ${DATABASE_NAME} --tables ${table} | gzip > ${BACKUP_DIR}${DATE}-${DATABASE_NAME}-${table}.sql.gz
done

我们以 bash 脚本的形式每小时运行一次,实际上进行 HOUR 检查,只在白天备份一些表,然后在晚上备份所有表。

为了在驱动器上保留一些空间,脚本还运行它以删除早于 X 天的备份。

# HOW MANY DAYS SHOULD WE KEEP
DAYS_TO_KEEP=25
DAYSAGO=$(date --date="${DAYS_TO_KEEP} days ago" +"%Y-%m-%d-%H")
echo $DAYSAGO
rm -Rf ${BACKUP_DIR}${DAYSAGO}-*
echo "rm -Rf ${BACKUP_DIR}${DAYSAGO}-*"