mysql数据库备份

来源:互联网 发布:亿乐社区系统v2.0源码 编辑:程序博客网 时间:2024/06/10 17:36

mysql数据库备份是数据库管理中最重用的任务之一。通常的备份方法如下:

mysqldump:

将数据库和相关数据表等数据转化为SQL命令,通常最适合数据库迁移。该备份方式速度较慢,对于大型数据库备份需要时间较多。相对数据库版本间的迁移的兼容性最好,同时还能完成对数据表trigger的备份工作。如果table采用的engine是InnoDB,通常建议采用该方式备份。

直接复杂数据库文件目录:

数据库目录在/etc/mysql/my.cnf中配置,默认一般在目录:/var/lib/mysql下,在此目录下对应不同数据库,如系统用于管理的mysql数据库和其它用户自己建立的数据库,其具体数据放置在与数据库同名的目录中。对于table采用engine为MYISAM的备份,可以直接拷贝对应数据库目录。(注意:该方法只保存了数据表,没有实现对存储过程的备份)

日志文件和定期制作的增量备份文件结合:

每次备份的数据量相对较少,适用于备份的前后之间修改量不大的情况。

利用镜像机制备份:

同样的数据库放置于不同的计算机上,并实时保存同步。该方式对两主机间的网络通讯有很高要求。一般使用较少。通常可以采用RAID技术对磁盘镜像,以获得更高效率。

常用的商用数据库都提供较完善的热备份机制,在mysql数据库中,采用mysqldump和直接复制的方式都可以在数据库运行中进行,但无法保证数据完整性。通常解决方法是对表加read lock。MYISAM数据表还无法实现热备份,InnoDB数据表可通过InnoDB Hot Backup工具热备份(http://www.innodb.com/order.php)。


mysqldump:

mysqldump [options] dbname [tables] > backup.sql

(1)备份数据库中的表

mysqldump -u root -p dbname tablename > backup.sql

(2)备份数据库

mysqldump -u root -p dbname > backup.sql

(3)备份所有数据库

mysqldump -u root --all-databases > backup.sql

(4)最稳妥MyISAM数据库备份

mysqldump -u root -p --lock-all-tables databasename > backup.sql

(5)备份InnoDB数据库

mysqldump -u root -p --skip-opt --single-transaction --add-drop-table --create-options --quick --extended-insert --set-charset -disable-keys databasename > backup.sql


存储过程备份:

存储过程放置于mysql数据库proc表中

(1)备份系统中所有存储过程

mysqldump -u root -p mysql proc > backup.sql

(2)备份具体数据库的存储过程

mysqldump -u root -p "--where=db='dbname'" --no-create-info mysql proc > backup.sql

--no-create-info选项表示在备份是不生成CREATE TABLE命令,在恢复是就不会破坏已有的proc表,只会在后面插入数据行


数据库恢复:

(1)单个数据库恢复

首先一定先在系统中建立该数据库,确保该数据库存在,然后使用命令:

mysql -u root -p dbname < backup.sql

或者:

cat backup.sql |  mysql -u root -p dbname

(2)恢复多个数据库

在通过mysqldump备份多个数据库时,backup.sql中包含CREATE DATABASE命令,不用自己手动创建数据库,直接输入以下命令搞定:

mysql -u root -p < backup.sql

(3)以交互方式恢复数据库

mysql -u root -p --silent

use dbname

source /tmp/backup.sql (或者将source简写为\.)

--silent选项屏蔽(Query OK,1 row affected)输出提示