mysql备份与恢复数据

MySQL数据备份与恢复方法

使用SELECT INTO OUTFILE备份数据,但这不会备份表的结构,所以只能导入相同结构的表。

具体语法:

SELECT [...] INTO { OUTFILE | DUMPFILE } '文件名' FROM 表名;

先用LOCK TABLES命令锁定写,避免数据冲突

LOCK TABLES 表名 WRITE;

导出数据

SELECT * INTO OUTFILE 文件名 FROM 表名;

备份完后使用UNLOCK TABLES命令解锁表。

也可以用mysqldump程序操作,可以:

  • 备份指定数据库或其中指定表:mysqldump [OPTIONS] 数据库名 [表名] > 文件名
  • 备份多个数据库:mysqldump [OPTIONS] --databases [OPTIONS] 数据库1 [数据库2 数据库3 ...] > 文件名
  • 备份所有数据库:mysqldump [OPTIONS] --all-databases [OPTIONS] > 文件名

这里的[OPTION]有很多选项,这里列出其中一小部分:

  • --add-locks:生成的SQL语句中,在每个表数据恢复之前增加LOCK TABLES并且之后UNLOCK TABLE。(为了使得更快地插入到MySQL)。
  • --add-drop-table:生成的SQL语句中,在每个create语句之前增加一个drop table。
  • -e / --extended-insert:使用全新多行INSERT语法。(给出更紧缩并且更快的插入语句)
  • -l / --lock-tables:为开始导出数据前,读锁定所有涉及的表。
  • -q / --quick:不缓冲查询,直接倾倒至stdout。
  • --opt:选项,它会使上述所有选项有效。

默认为--opt

「例」使用mysqldump备份所有数据库:

mysqldump -u root -proot --all-databases > test.sql

-u后面是用户名,-p后面跟着密码。


使用LOAD DATA INFILE恢复数据,先对表的写入加锁:

LOCK TABLES 表名 WRITE;

然后导入数据

LOAD DATA INFILE 文件名 REPLACE INTO TABLE 表名;

如果不想锁表,可以使用LOW_PRIORITY,数据的导入将推迟到没有用户读表之后进行:

LOAD DATA LOW_PRIORITY INFILE 文件名 REPLACE INTO TABLE 表名;

也可以用mysqlimport恢复数据:

mysqlimport -u 用户名 -p密码 --replace 数据库名 文件名

如果不想锁表,就加上--low-priority

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值