您的位置:网站主页> Mysql教程 > mysql如何备份数据库,求代码

mysql如何备份数据库,求代码

时间:2018-06-04 13:37:01   编辑:王连龙   文章来源:php教学网 已阅读:462 次

编程入门教程[www.ask186.com]网站介绍 

    编程入门教程主要涉及WEB开发领域,主要为广大WEB开发人员提供最新的WEB开发资讯信息,包含php教程mysql教程php面试题在线调色板php学习以及常用( Amazon ApiGoogle Api)等API、爱问资源共享HTML转JS不显示xml...[详细]
广告投放: 编程入门教程:www.ask186.com 电话:15818865556

mysql如何备份数据库,求代码

 

定期的备份可使我们数据库崩溃造成的损失大大降低。

在MySQL中进行数据备份的方法有两种,一种是使用mysqldump程序,一种是使用mysqlhotcopy、cp、tar或cpio等打包程序直接拷贝数据库文件。mysqldump程序备份数据库较慢,但它生成的文本文件便于移植。使用mysqlhotcopy等程序备份速度快,因为它直接对系统文件进行操作,需人为协调数据库数据的备份前后一致性。

 

  • 使用mysqldump备份数据库其实就是把数据库转储成一系列CREATE TABLE和INSERT语句,通过这些语句我们就可重新生成数据库。使用mysqldump的方法如下:

    % mysqldump --opt testdb | gzip > /data/backup/testdb.bak
    #--opt选项会对转储过程进行优化,生成的备份文件会小一点,后的管道操作会进行数据压缩
    % mysqldump --opt testdb mytable1,mytable2 | gzip > /data/backup/testdb_mytable.bak
    #可在数据库后接数据表名,只导出指定的数据表,多个数据表可用逗号分隔
    
       
    --opt选项还可激活--add-drop-table选项,它将会在备份文件的每条CREATE TABLE前加上一条DROP TABLE IF EXISTS语句。这可方便进行数据表的更新,而不会发生“数据表已存在”的错误。

     

    用mysqldump命令还可直接把数据库转移到另外一台服务器上,不用生成备份文件。重复执行可定期更新远程数据库。

     

    % mysqladmin -h remote_host create testdb
    % mysqldump --opt testdb | mysql -h remote_host testdb
    另外还可通过ssh远程调用服务器上的程序,如:
    % ssh remote_host mysqladmin create testdb
    % mysqldump --opt testdb | ssh remote_host mysql testdb
    
  • 通过直接拷贝系统文件的方式备份数据库,在备份时,要确保没有人对数据库进行修改操作。要做到这点,最好关闭服务器。如果不能关闭的,要以只读方试锁定有关数据表。下面是一些示例:

     

    % cp -r db /backup/db                 #备份db数据库到/backup/db目录
    % cp table_name.* /backup/db          #只备份table_name数据表
    % scp -r db remotehot:/usr/local/mysql/data      #用scp把数据库直接拷贝到远程服务器
    
       
    在把数据库直接拷贝到远程主机时,应注意两台机器必须有同样的硬件结构,或者将拷贝的数据表全部是可移植数据表类型。
  • 使用mysqlhotcopy工具,它是一个Perl DBI脚本,可在不关闭服务器的情况下备份数据库,它主要的优点是:

     

    • 它直接拷贝文件,所以它比mysqldump快。

    • 可自动完成数据锁定工作,备份时不用关闭服务器。

    • 能刷新日志,使备份文件和日志文件的检查点能保持同步。

    下面是该工具的使用示例:

    % mysqlhotcopy db  /bakcup/                 #把db数据库备份到backup/db目录里,会自动创建一个db目录
    
    
    
  • 使用BACKUP TABLE语句进行备份,该语句最早出现在MySQL 3.23.25版本中,仅适用于MyISAM数据表。用法如下:

     

    mysql> BACKUP TABLE mytable TO '/backup/db';         #把mytable数据表备份到/backup/db目录下
    

    为了执行该语句,你必须拥有那些表的FILE权限和SELECT权限,备份目录还必须是服务器可写的。该语句执行时,会先把内存中的数据写入磁盘,再把各个数据表的.frm(表结构定义文件)、.MYD(数据)文件从数据目录拷贝到备份目录。它不拷贝.MYI(索引)文件,因为它能用另外两个文件重建。BACKUP TABLE语句备份时,依次锁定数据表,当同时备份多个数据表时,数据表可能会被修改,所以备份0完成时,备份文件中的数据和现时数据表中的数据可能会有差异,为了消除该差异,我们可用只读方式锁定数据表,在备份完成后再解锁。如:

    mysql> LOCK TABLES tb1 READ,tb2 READ;
    mysql> BACKUP TABLE tb1,tb2 TO 'backup/db';
    mysql> UNLOCK TABLES;
    
    
    

    使用BACKUP TABLE语句备份的数据表可用RESTORE TABLE重新加载到服务器。

     

  • InnoDB和BDB数据库也可用mysqldump和直接拷贝法进行备份。使用直接拷贝法时应注意需把组成InnoDB和BDB数据库的所有文件都拷贝下来,如InnoDB的.frm文件、日志文件和表空间配置文件;BDB的数据文件、日志文件等。

  • 使用镜像机制进行备份,我们可用SLAVE STOP语句挂起从服务器的镜像,在从服务器上通过直接拷贝法或其它工具制作备份。备份完成,用SLAVE START重新启动镜像,从服务器重新与主服务器同步,接收备份时主服务器所做的修改。

在MySQL中没有为数据库重命名的命令,但我们可用mysqldump转储数据库,再创建一个新的空数据库,把转储文件加载到该新数据库,这样就完成数据库重命名的工作。如:

% mysqldump old_db >db.sql          #转储db数据库数据
% mysqladmin create new_db          #新建一个空的数据库
% mysql new_db < db.sql             #把db数据库的数据加载到新的数据库中
% mysqladmin drop old_db            #删除旧的数据库 

一个更简单的重命名数据库的方法是直接修改数据库目录名,但该方法不适用于InnoDB和BDB数据库。注意,在更名后,需在权限表中更新相关数据表信息,需执行以下语句:

 

mysql> UPDATE db SET db='new_db' WHERE db='old_db';
mysql> UPDATE tables_priv SET db='new_db' WHERE db='old_db';
mysql> UPDATE columns_priv SET db='new_db' WHERE db='old_db';
mysql> UPDATE host SET db='new_db' WHERE db='old_db';
  • 上一篇:
  • 下一篇:

本文地址:http://www.ask186.com/content/article/mysql/31982.html(转载请保留)

相关关键词搜索:mysql快速备份数据库

发表评论
      
* 以上用户言论只代表其个人观点,不代表www.ask186.com网站的观点或立场
推荐文档更多
编程入门教程 | PHP教程 | Mysql教程 | Apache教程 | 最新文章 | PHP面试题| 网站地图 | Google地图 | Baidu地图 | 在线WEB论坛| 中纪委反腐最新消息

WEB技术QQ交流群:151963186 站长Q号:547214413
版权所有者:编程入门教程 地址:云南省文山州砚山县盘龙乡 滇ICP备12002707号-1
特别声明:本站内容仅供参考,不作为设计及确切依据!想了解更多,可立即进入Bbs提问