mysqldump备份注意事项

业务有打电话来讲她们那的机器做保险业务种类不全,这台前置机是JIMMY临走时丢给我维护的。很头痛,资料不全,JIMMY连备份都没有做过。耐着性子把JIMMY留给我的安装文档看了一遍,总算搞明白这是一套基于本地MYSQL数据库的东东,四年以来升过N次级。估计是某次升级把业务上的这台机器给忘了,可为什么落到我手里业务才发现有问题呢?无语,深吸一口气安慰自己:既来之,则安之。

菜单项内容不全,大部分原因是数据库中记录不全,无论哪种数据库都一样。最简单的办法,是把那次升级的文本找到然后重新插入数据库。如果可以肯定数据库内容与密钥和终端无关的话,把整个数据库拷过来也可以。保险的前置机在机房里还有4台,把数据库拷过来是一件简单事。用mysqldump --opt cpai>cpai.sql做数据库备份,然后用mysql cpai<cpai.sql恢复数据库。

然后问题就出现了,select 的时候老是出现表不存在。每做一次,不是这张表不在,就是那张表不在。真是叫人欲哭无泪啊。好容易数据库好了,同一台机器上的短信又不能操作了,偶就只好继续折腾下去。用fsck看硬盘有没有坏节点,重新安装整个应用等等。终于,在偶把这套系统弄明白的时候,也在某个网页发现表损坏的根本原因:“对一个正在运行的数据库进行备份请慎重!!如果一定要在服务运行期间备份,请添加 –skip-opt选项,如:/usr/local/mysql/bin/mysqldump --skip-opt -uroot -p123456 mysqlfxv >mySQL.SQL”,只用--opt,数据库会锁表的说,不但影响正常交易,还不能肯定表是否会损坏。

下面就摘抄一段用法吧:

mysqldump

将数据库、数据表导成一个个 SQL语句形式的文件。

--no-create-info,-t

只导出数据,而不添加 CREATE TABLE 语句。

例:[root@10 shell]# mysqldump --no-create-info wang_db >/home/shell/wang_db.sql

--no-data,-d

不导出任何数据,只导出数据库表结构。

[root@10 shell]# mysqldump --no-data wang_db >/home/shell/wang.db.sql.1

导出完整的数据(包括表的结构和数据)

[root@10 shell]# mysqldump wang_db >/home/shell/wang.db.sql.2

单独导入某个表

[root@10 shell]# mysqldump --add-drop-table wang_db wang_tb >/home/shell/wang.db.sql.3

在生产系统导出数据注意点:对一个正在运行的数据库进行备份请慎重!

如果一定要在服务运行期间备份,请添加 –skip-opt选项,类似执行:

/usr/local/mysql/bin/mysqldump --skip-opt -uroot -p123456 mysqlfxv >mySQL.SQL

以免造成了锁表。