MySQL 데이터베이스 백업 및 복구 (1)-Select Into Outfile 및 Load Data Infile 명령 사용

MySQL 데이터베이스 백업 및 복구 (1)-Select Into Outfile 및 Load Data Infile 명령 사용

1. Select Into Outfile 명령을 사용하여 데이터 내보내기

명령 형식은 다음과 같습니다.

SELECT ... 
INTO OUTFILE 'file_name'
fields terminated by 'char';                                              

참고 :
(1) OUTFILE 매개 변수로 지정된 파일이있는 경로에는 mysql 액세스 권한이 있어야합니다. 그렇지 않으면 오류가보고됩니다.
(2) 각 레코드의 데이터는 기본적으로 Tab으로 구분되거나 필드로 끝나는 매개 변수를 사용하여 구분자를 지정할 수 있습니다.
(3) Select into outfile 및 Load data infile 명령을 실행하려면 my.cnf 매개 변수 파일에서 secure_file_priv 매개 변수의 설정을 활성화해야합니다. 이 매개 변수의 설정은 다음과 같습니다.
——NULL : MySQL 서비스가 가져 오기 및 내보내기 작업을 금지 함
—— 디렉터리 이름 : MySQL 서비스는이 디렉터리에서 파일 가져 오기 및 내보내기 작업 만 수행하도록 허용합니다. 디렉토리가 존재해야하며 MySQL 서비스는이를 생성하지 않습니다. ——
빈 문자열 ( '') : 파일은 모든 위치에있을 수 있습니다.

1. secure_file_priv 매개 변수의 값을 확인하십시오.

mysql> show variables like '%secure_file_priv%';
+------------------+-----------------------+
| Variable_name    | Value                 |
+------------------+-----------------------+
| secure_file_priv | /var/lib/mysql-files/ |
+------------------+-----------------------+
1 row in set (0.01 sec)

2. secure_file_priv 매개 변수의 값을 수정하십시오.

[root@Mysql11 ~]# vim /etc/my.cnf  ##编辑MySQL配置文件
#######################################################################
[mysqld]
..........
secure_file_priv=''
..........
#######################################################################

MySQL 서비스를 다시 시작하고 secure_file_priv 매개 변수의 값을 확인하십시오.

mysql> show variables like '%secure_file_priv%';
+------------------+-------+
| Variable_name    | Value |
+------------------+-------+
| secure_file_priv |       |
+------------------+-------+
1 row in set (0.00 sec)

3. 예

(1) 데이터를 내보내려면 선택을 사용하십시오. 구분 기호를 지정하지 마십시오.

mysql> select * from stu into outfile '/tmp/stu.txt';
Query OK, 5 rows affected (0.00 sec)

stu.txt 파일의 내용을보고 탭 키를 사용하여 데이터를 분리하십시오.

[root@Mysql11 ~]# cat /tmp/stu.txt
1	zhangsan	20	Xinxiang	15578941258
2	tom	20	Xinxiang	13778942222
3	jack	20	Zhengzhou	13675871454
4	john	21	Zhengzhou	13937681111
5	mark	22	Aanyang	13055882233

(2) 선택을 사용하여 데이터 내보내기-구분 기호 지정

mysql> select * from stu into outfile '/tmp/stu2.txt' fields terminated by ',';
Query OK, 5 rows affected (0.00 sec)

stu.txt 파일의 내용을보고 쉼표 (,)를 사용하여 데이터를 구분하십시오.

[root@Mysql11 ~]# cat /tmp/stu2.txt;
1,zhangsan,20,Xinxiang,15578941258
2,tom,20,Xinxiang,13778942222
3,jack,20,Zhengzhou,13675871454
4,john,21,Zhengzhou,13937681111
5,mark,22,Aanyang,13055882233

둘째, Load Data Infile 명령을 사용하여 데이터 가져 오기

명령 형식은 다음과 같습니다.

LOAD DATA [LOCAL] INFILE 'file_name'
INTO TABLE tbl_name
[TERMINATED BY 'string';

설명 :
(1) 파일 형식에 따라 해당 구분자를 지정합니다.
(2) 비 서버 측에서 데이터로드를 실행하려면 로컬이 필요합니다. 예를 들어, 시스템 B에서 A의 mysqld에 로그인하려면 local을 사용해야합니다.

1. stu.txt 파일을 사용하여 데이터 가져 오기

(1) stu 테이블의 데이터 지우기

mysql> truncate stu;
Query OK, 0 rows affected (0.04 sec)

mysql> select * from stu;
Empty set (0.00 sec)

(2) 데이터 가져 오기

mysql> load data infile '/tmp/stu.txt' into table stu;
Query OK, 5 rows affected (0.00 sec)
Records: 5  Deleted: 0  Skipped: 0  Warnings: 0

mysql> select * from stu;
+----+----------+------+-----------+-------------+
| id | name     | age  | address   | phone       |
+----+----------+------+-----------+-------------+
|  1 | zhangsan |   20 | Xinxiang  | 15578941258 |
|  2 | tom      |   20 | Xinxiang  | 13778942222 |
|  3 | jack     |   20 | Zhengzhou | 13675871454 |
|  4 | john     |   21 | Zhengzhou | 13937681111 |
|  5 | mark     |   22 | Aanyang   | 13055882233 |
+----+----------+------+-----------+-------------+
5 rows in set (0.00 sec)

2. stu2.txt 파일을 사용하여 데이터 가져 오기

(1) stu 테이블의 데이터 지우기

mysql> truncate stu;
Query OK, 0 rows affected (0.02 sec)

mysql> select * from stu;
Empty set (0.00 sec)

(2) 데이터 가져 오기

구분 기호를 지정하지 않으면 다음 오류가 발생합니다.

mysql> load data infile '/tmp/stu2.txt' into table stu;
ERROR 1265 (01000): Data truncated for column 'id' at row 1

구분 기호를 지정하면 가져 오기가 성공합니다.

mysql> load data infile '/tmp/stu2.txt' into table stu fields terminated by ',';
Query OK, 5 rows affected (0.00 sec)
Records: 5  Deleted: 0  Skipped: 0  Warnings: 0

mysql> select * from stu;
+----+----------+------+-----------+-------------+
| id | name     | age  | address   | phone       |
+----+----------+------+-----------+-------------+
|  1 | zhangsan |   20 | Xinxiang  | 15578941258 |
|  2 | tom      |   20 | Xinxiang  | 13778942222 |
|  3 | jack     |   20 | Zhengzhou | 13675871454 |
|  4 | john     |   21 | Zhengzhou | 13937681111 |
|  5 | mark     |   22 | Aanyang   | 13055882233 |
+----+----------+------+-----------+-------------+
5 rows in set (0.00 sec)

추천

출처blog.csdn.net/weixin_44377973/article/details/107072574