备份和恢复数据表的方法
为了得到一个一致的备份,在相关的表上做一个LOCK TABLES,你只需一个读锁定,当你在数据库目录中做文件的一个拷贝时,这允许其他线程继续查询该表;
当你恢复数据时,需要一个写锁定,以避免冲突。
1、 使用SQL语句进行备份和恢复——这种方法只能导出数据的内容,不包括表的结构,如果表的结构文件损坏,你必须要先恢复原来的表的结构。
备份:select into outfile
假定表tbl_name具有一个PRIMARY KEY或UNIQUE索引,备份一个数据表的过程如下:
(1)、锁定数据表,避免在备份过程中,表被更新
mysql>LOCK TABLES READ tbl_name;
(2)、导出数据
mysql>SELECT * INTO OUTFILE ‘tbl_name.bak’ FROM tbl_name;
(3)、解锁表
mysql>UNLOCK TABLES;
恢复:需要具备使用文件的权限
load data infile
相应的恢复备份的数据的过程如下:
(1)、为表增加一个写锁定:
mysql>LOCK TABLES tbl_name WRITE;
(2)、恢复数据
mysql>LOAD DATA INFILE ‘tbl_name.bak’
->REPLACE INTO TABLE tbl_name;
如果,你指定一个LOW_PRIORITY关键字,就不必如上要对表锁定,因为数据的导入将被推迟到没有客户读表为止:
mysql>LOAD DATA LOW_PRIORITY INFILE ‘tbl_name’
->REPLACE INTO TABLE tbl_name;
(3)、解锁表
mysql->UNLOCAK TABLES;
2、使用mysqlimport恢复数据
(用在shell里面,待理解)
2、 使用mysqldump备份数据(可以备份数据库的表结构,可以备份一个完整的数据库)
a) 如果你运行mysqldump没有--quick或--opt选项,mysqldump将在导出结果前装载整个结果集到内存中,如果你正在导出一个大的数据库,这将可能是一个问题。
mysqldump --opt database > backup-file.sql
//把数据库导入到backup-file.sql
mysqladmin create target_db_name
//建立新的数据库target_db_name
mysql target_db_name < backup-file.sql
//导入数据到target_db_name
mysqldump [OPTIONS] database [tables]
netstat -an
mysqldump -ukzczuser -pkzcz --opt --default-character-set=utf8 smsota ums_module, ums_role_module, ums_reg, ums_role > ums.bos
shell> mydqldump db_name>db_name.bak
shell>mysql -u root –pmypass db_name>db_name.sql
4、直接拷贝mysql数据库文件:myd、myi、frm