怎样备份mysql数据的一个表 而不是整个数据库

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了怎样备份mysql数据的一个表 而不是整个数据库相关的知识,希望对你有一定的参考价值。

一个数据库下有很多表,但只想备份这个表,怎么做?到时候换到一个新数据库上又怎么做?手动操作的,不要代码

复制希望你能帮助学习搜索你的问题,我只是帮着完整的谷歌搜索下

命令备份

mysqll提供了一个mysqldump命令,我们可以使用它数据备份。

提示输入密码,这TM数据库的表结构和mysqldump的-U根-P TM> tm_050519.sql数据备份到tm_050519.sql,因为备份的数据量,大会占用太多的空间,那么你可以利用gzip压缩数据,命令如下:

#mysqldump的U盘根-P TM | GZIP> tm_050519.sql.gz <BR /系统崩溃,重建系统,您就可以恢复数据:

#mysqldump的-U根P TM <tm_050519.sql
直接从压缩文件中恢复:
BR />#gzip压缩tm_050519.sql.gz mysqldump的 - U盘根-P TM
当然,也有很多MySQL工具提供更直观的备份和恢复功能,如phpMyAdmin是非常方便的。但我认为,mysqldump是最基本,最普遍的。

使用crontab每天定时备份mysql数据库

系统crontab来执行备份文件,并保存备份结果按日期备份的目的。

1,创建一个保存的备份文件的路径的/ var /备份/ mysqlbak的

目录#mkdir-P /无功/备份/ mysqlbak
2,创建/ USR /的sbin / bakmysql的的文件

#VI的/ usr / sbin目录/ bakmysql.sh的

! /斌/庆典
#MySQL备份脚本
CD的/ var /备份/ mysqlbak /
dateDIR =`日期+“%Y-%M-%e”'
MKDIR P $ dateDIR /数据
我的/ usr /本地/网络/ MySQL的/ bin中/ MySQL的uroot plin31415926-E“显示数据库”|
grep的-V“数据库”| grep的-V “INFORMATION_SCHEMA”`

的/ usr /本地/网络/ MySQL的/ bin中/ mysqldump的 - uroot-plin31415926我
gzip压缩的/ var /备份/ mysqlbak / $ dateDIR / $ I _ $ dateDIR。广州

3,文件属性,使可执行文件

搭配chmod + x / usr / sbin目录/ bakmysql
4,/ etc / crontab文件 BR />
的crontab-E
添加
01 3 ***根目录的/ usr / sbin目录/ bakmysql的
#3点钟,每天进行备份
>
所以每天都可以在/ var /备份/备份SQL文件mysqlbak的看到!
参考技术A 如果表比较小,100M以内,或者几乎很少操作,可以直接复制粘贴就可以了,每个表有三个文件,一起复制。追问

好办法,但怎么还原到一个数据库里?也对应表覆盖?

追答

排除读写可能冲突的情况的话,是可以直接覆盖的。

本回答被提问者采纳
参考技术B 如果使用 phpmyadmin
点击导出 在导出的时候 选择 自定义-显示所有选项 里面有单表的导出

完成之后 可以生成一个文件 这个文件包含 表的结构 和数据
希望对你有帮助追问

如果还原到一个数据库里,怎样做?担心会把所有数据库覆盖了?

追答

还原到一个 数据库里面
最简单的方法 把原来的删除 在执行SQL 导入
其他的方式都比较复杂

追问

数据库其它数据都要,只是插入这个表,这时怎样导入SQL?

追答

只删除这一个表就行了
或者备份的时候 只备份数据
恢复的时候 先把数据清空
在还原

SELECT FOR UPDATE 在 MySQL 中保存整个表,而不是逐行保存

【中文标题】SELECT FOR UPDATE 在 MySQL 中保存整个表,而不是逐行保存【英文标题】:SELECT FOR UPDATE holding entire table in MySQL rather than row by row 【发布时间】:2014-04-10 03:03:41 【问题描述】:

我将有多个客户将数据输入数据库,我必须确保事务不会混合。

我在文档中读到 START TRANSACTIONSELECT ... FOR UPDATE 会锁定它读取的每一行:

SELECT ... FOR UPDATE 读取最新的可用数据,在它读取的每一行上设置排他锁。因此,它设置的锁与搜索的 SQL UPDATE 在行上设置的锁相同。

见https://dev.mysql.com/doc/refman/5.0/en/innodb-locking-reads.html

所以我登录了一个客户端并输入了以下语句:

START TRANSACTION;
SELECT * FROM productMacAddress WHERE status='free' limit 8 FOR UPDATE;

在此暂停第二个客户端条目....

UPDATE productMacAddress SET status='testing1' WHERE status='free' LIMIT 8;
COMMIT;

在另一个客户端,我输入:

START TRANSACTION;
SELECT * FROM productMacAddress WHERE status='free' limit 4 FOR UPDATE;
UPDATE productMacAddress SET status='testing2' WHERE status='free' LIMIT 4;
COMMIT;

但是在第一个客户完全完成之前,我无法SELECT 表中的任何内容。为什么会这样?文档说明它应该逐行锁定,特别是因为我LIMIT 8

提前谢谢你。

【问题讨论】:

【参考方案1】:

InnoDB 表的默认隔离级别是可重复读取。当此隔离级别处于活动状态时,我们会得到以下行为(引用自:https://dev.mysql.com/doc/refman/5.5/en/set-transaction.html):

对于锁定读取(SELECT with FOR UPDATE 或 LOCK IN SHARE MODE), UPDATE 和 DELETE 语句,锁定取决于是否 语句使用具有唯一搜索条件的唯一索引,或 范围类型的搜索条件。对于具有唯一搜索的唯一索引 条件,InnoDB 只锁定找到的索引记录,而不是间隙 在它之前。对于其他搜索条件,InnoDB 锁定索引范围 扫描,使用间隙锁或下一个键(间隙加索引记录)锁 阻止其他会话插入到范围覆盖的间隙中。

换句话说:您可以尝试在 SELECT 的 WHERE 条件中使用主键吗?因此,例如,而不是:

START TRANSACTION;
SELECT * FROM productMacAddress WHERE status='free' limit 8 FOR UPDATE;

试试:

START TRANSACTION;
SELECT * FROM productMacAddress WHERE id=10 FOR UPDATE;

如果 id 是主键。任何其他具有唯一索引的列也可以使用。在 WHERE 子句中使用非唯一列时,InnoDB 将锁定一系列行。

【讨论】:

有些复杂的情况是:当“SELECT FOR UPDATE”后跟WHERE语句如:“WHERE (indexed_key= value1 or indexed_key=value2)”时,InnoDB会锁定整个表再次而不是这两行。这是为什么呢?

以上是关于怎样备份mysql数据的一个表 而不是整个数据库的主要内容,如果未能解决你的问题,请参考以下文章

linux下mysql备份文件怎样还原到windows下

怎样备份/还原MySQL数据库 之 MySQL Workbench

mysql —备份和恢复

mysql 不停机 短时间锁表 备份 主备同步 新增备份机器

mysql备份数据库时怎样只备份一个数据库中的其中几张表的数据,覆盖时只覆盖这几张表的内容

详细介绍MySQL中数据的备份与恢复,防止数据丢失