备份或导出数据库命令mysqldump怎么使用

说白了,mysqldump的用途就那么几个,但是每个参数都可以用来玩花样。

扩展一下,最简单的使用其实就是三步:用root用户登录,将数据库转储到文件。
例如mysqldump -u root -p1 2 3 test > test.dump,生成的文件中既包含建表语句,又包含插入数据的小insert语句。
还有一点就是添加了--opt参数,这会让生成的文件更加高效——创建表前会添加DROP TABLE IF EXISTS,插入前添加LOCK TABLES,插入后添加UNLOCK TABLES以防止数据更改。
还有另一个关键细节。
跨主机备份时,使用--host=host1 指定源服务器,然后| mysql --host=host2 -C 直接传输到目标服务器。
数据传输会自动压缩。

一开始我以为--no-data会删除数据只留下结构,后来发现它连表名都备份了。
如果只想备份表结构,其实得使用--no-data --databases组合,或者直接使用--struct(不过这是第三方工具,mysqldump没有这个参数)。
等等,还有一件事,恢复数据库时不要错过2 >,否则错误消息会清除恢复结果。

最后提醒:使用cron进行定时备份时,如果文件名包含日期,记得加引号,否则crontab会爆炸。
建议直接使用变量进行拼接,如backup_$(date +%m-%d-%Y).sql.gz,这样更稳定。

MySQL 数据库恢复报错:导出和恢复命令错误,以及未关闭数据库导致的问题?

记得有一次,我在维护一个在线数据库的时候,突然收到一个报警,告诉我数据库恢复失败。
当我看到错误信息时,我立即感到困惑。
这是一个很大的项目,数据不能丢失。
这时候我赶紧跑到服务器上,查看日志,发现恢复命令写错了。
原来是使用mysqldump命令来导入数据的。
这是一个很大的错误。
mysqldump 用于导出数据,而不是导入数据。
我很快改用mysql命令导入,问题就解决了。
不过,这件事突然让我想到以后需要在脚本中添加一个检查,防止再次出现类似的低级错误。