MySQL-备份与恢复

一、备份数据语法格式:

SELECT * INTO OUTFILE ‘file_name’ export_options

               |INTO DUMPFILE ‘file_name’

其中,语法项“export_options”的格式是:

[FIELDS

           [TERMINATED BY 'string']

           [[OPTIONALLY] ENCLOSED BY 'char']

           [ESCAPED BY 'char']

]

[LINES TERMINATED BY 'string']

1)语法项“FIELDS”子句中有三个亚子句,

分别是“TERMINATED BY子句” “[OPTIONALLY] ENCLOSED BY子句”和“ESCAPED BY子句”

如果指定了FIELDS子句,则这三个亚子句中至少要求指定一个。

其中,TERMINATED BY子句用来指定字段值之间的符号;

ENCLOSED BY子句用来指定包裹文件中字符值的符号,若加上关键字“OPTIONALLY”则表示所有值都放在双引号之间;

ESCAPED BY子句用来指定转义字符,例如“ ESCAPED BY ‘*’ ”将“*”指定为转义字符,取代“\”,如空格将表示为“*N”。

2)LINES子句中使用guan关键字“TERMINATED BY”指定一个数据行结束的标志,如“LINES TERMINATED BY ‘?’”表示一个数据行以“?”作为结束标识符。

3)导出语句中使用的是关键字“DUMPFILE”,而非“OUTFILE”时,导出的备份文件里面所有的数据行都会彼此紧挨着放置,即值和行之间没有任何标记。

4)使用SELECT INTO ...OUTFILE 语句备份数据

 

 

二、恢复数据语法格式 :

LOAD DATA INFILE ‘file_name.txt’

INTO TABLE tbl_name

[FIELDS

           [TERMINATED BY 'string']

           [[OPTIONALLY] ENCLOSED BY 'char']

           [ESCAPED BY 'char']

]

[LINES

           STARTING BY 'string'

           TERMINATED BY 'string'

]

1)语法项“LINES子句”中的TERMINATED BY亚子句用来指定一行结束的标志;STARTING BY亚子句则指定一个前缀,导入数据行时,忽略数据行中的该前缀和前缀zhi'之前的内容。如果某行不包括该前缀,则整个数据行被跳过。

2)LOAD DATA...INFILE语句恢复数据

mysql> use mysql_test;
Database changed
mysql> select * from customers;
Empty set (0.00 sec)

mysql> load data infile 'c:/backupfile.txt'
    -> into table mysql_test.customers
    -> fields terminated by ','                    //指定逗号作为两个字段值之间的分隔符
    -> optionally enclosed by ''''                 //表示文件中字符值放于双引号之间
    -> lines terminated by '?';                    //表示一个数据行以“?”作为结束标志
Query OK, 7 rows affected (0.86 sec)
Records: 7  Deleted: 0  Skipped: 0  Warnings: 0

mysql> select * from customers;
+-----+-----------+----------+-----------+--------------+
| id  | cust_name | cust_sex | cust_city | cust_address |
+-----+-----------+----------+-----------+--------------+
| 901 | 马腾      | F        | 广东      | 深圳         |
| 902 | 张三      | F        | 北京      | 朝阳         |
| 903 | 李四      | M        | 武汉      | 李家庄       |
| 904 | 张无忌    | M        | 光明顶    | 明教         |
| 905 | 索隆      | M        | 动漫      | 海贼王       |
| 906 | 悟空      | F        | 西游      | 花果山       |
| 909 | 万华      | F        | 长沙市    | 芙蓉区       |
+-----+-----------+----------+-----------+--------------+
7 rows in set (0.00 sec)

mysql>

3)另外需注意的是,在多个用户同时使用MySQL数据库的情况下,为了得到一个一致的备份,需要在指定表上使用LOCK TABLE table_name READ语句做一个读锁定,以防止在备份过程中表被其他用户更新;

而当恢复数据时,则需要使用LOCK TABLE table_name WRITE语句做一个写锁定,以避免发生数据冲突。

在数据库备份或或恢复完毕之后需要使用UNLOCK TABLES语句对该表进行解锁。

猜你喜欢

转载自blog.csdn.net/qq_37592750/article/details/82847678