50--60

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\';

 

DB2数据库备份步骤

 

  1.创建用户:

 

  在cmd中操作:net user sjtd sjtd /add

 

  net localgroup DB2ADMNS sjtd /add

 

  2.建数据库

 

  在db2cmd中操作:

 

  输入"DB2"进入到DB2下,进入脚本编辑模式

 

  执行:(建数据库命令)

 

  CREATE DATABASE sjtd AUTOMATIC STORAGE YES

 

  ON \'D:\lh\db\' DBPATH ON \'D:\\' USING CODESET

 

  GBK TERRITORY CN COLLATE USING SYSTEM PAGESIZE 32768

 

  (建表空间,授权等)

 

  CONNECT TO sjtd;

 

  UPDATE DATABASE CONFIGURATION USING LOGSECOND 10 IMMEDIATE ;

 

  UPDATE DATABASE CONFIGURATION USING LOGFILSIZ 30240 DEFERRED ;

 

  CREATE REGULAR TABLESPACE CODRP PAGESIZE 32 K MANAGED BY AUTOMATIC STORAGE EXTENTSIZE 16 OVERHEAD 10.5 PREFETCHSIZE 16 TRANSFERRATE 0.14 BUFFERPOOL IBMDEFAULTBP DROPPED TABLE RECOVERY ON;

 

  CREATE LARGE TABLESPACE CODRP_ATTACHMENT PAGESIZE 32 K MANAGED BY AUTOMATIC STORAGE EXTENTSIZE 16 OVERHEAD 10.5 PREFETCHSIZE 16 TRANSFERRATE 0.14 BUFFERPOOL IBMDEFAULTBP ;

 

  GRANT DBADM,CREATETAB,BINDADD,CONNECT,CREATE_NOT_FENCED_ROUTINE,IMPLICIT_SCHEMA,LOAD,CREATE_EXTERNAL_ROUTINE,QUIESCE_CONNECT,SECADM ON DATABASE TO USER sjtd;

 

  GRANT USE OF TABLESPACE CODRP TO USER sjtd WITH GRANT OPTION;

 

  GRANT USE OF TABLESPACE CODRP_ATTACHMENT TO USER sjtd WITH GRANT OPTION;

 

  CONNECT RESET;

 

  3.导入数据库表的结构脚本:

 

  在db2cmd窗口中输入:db2 -tvf sjtd.sql(要切换到备份文件当前路径)

 

  导入表中数据脚本:db2move sjtd import -u SJTD -p SJTD

 

编辑要说:因为文章大部分是由网络整理出来的,自己个人是刚刚学习,所以很多看不懂的,希望大家多加指导,有些错误的地方,敬请谅解。

 

 

分类:

技术点:

相关文章: