一、备份数据语法格式:
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语句对该表进行解锁。