MySQL 备份与恢复详解(4)

使用mysqldump命令导出文本文件 
通过制定-tab=dir_name 参数来指定文本文件的导出路劲 
需要在my.cnf 中先配置 
secure_file_priv=/usr/local/mysql/backup/

比如导出course数据库的所有表的文本文件到=/usr/local/mysql/backup/目录下: 
这个目录也需要mysql 权限才能导出

[root@master01 backup]# mysqldump -u root -p –tab=/usr/local/mysql/backup course

–fields-terminated-by=str参数指定每个字段值之间的间隔符,默认是tab

–fields-enclosed-by=char参数指定每个字段值使用什么字符括起来,默认是没有

–fields-optionally-enclosed-by=char参数指定对每个非数字类型的字段值使用什么字符括起来,默认没有

–lines-terminated-by=str参数指定行之间的结束符,默认是newline

比如:

[root@master01 backup]# mysqldump -u root -p –tab=/usr/local/mysql/backup –fields-terminated-by=, –fields-enclosed-by=’”’ –lines-terminated-by=0x0d0a course

MySQL 备份与恢复详解

针对文本文件(txt)到导入,分为两步, 先是导入表结构文件,再导入数据文件 
表结构文件的导入可以使用mysql db1 < t1.sql或者source命令 
数据文件的导入可以使用mysqlimport或者load data infile命令

模拟用文本文件导入数据,不删除表,删除表数据,再进行导入 

mysqlimport 方式:

1

2

3

4

5

 

mysql> delete from students;

mysql> exit;

[root@master01 backup]# mysqlimport -u root -p --fields-terminated-by=, --fields-enclosed-by='"' --lines-terminated-by=0x0d0a course /usr/local/mysql/backup/students.txt

Enter password:

course.students: Records: 10  Deleted: 0  Skipped: 0  Warnings: 0

 

或者使用load data infile 方式

1

2

3

4

 

mysql> use course;

mysql> select * from students;

mysql> delete from students;

mysql> load data infile '/usr/local/mysql/backup/students.txt' into table students FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\r\n';

 

自定义脚本定时备份

检测所有用户定义的数据库,定时备份所有的数据库,并上传到备份服务器 
Python脚本还是shell 脚本,想怎么写随你

样例脚本如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

 

#!/bin/sh

####################################

##Function: mysql_dump

##Version: 1.1

# #####################################

MYUSER=system

PORT=5001

DB_DATE=$(date +%F)

DB_NAME=$(uname -n)

MYPASS=********

MYLOGIN=" /data/application/mysql/bin/mysql -u$MYUSER -p$MYPASS -P$PORT “

MYDUMP=" /data/application/mysql/bin/mysqldump -u$MYUSER -p$MYPASS -P$PORT -B “

DATABASE=" $($MYLOGIN -e "show databases;" |egrep -vi

"information_schema|database|performance_schema|mysql") “

for dbname in $DATABASE do

MYDIR=/server/backup/$dbname

[ ! -d $MYDIR ] && mkdir -p $MYDIR

$MYDUMP $dbname --ignore-table=opsys.user_action|gzip

>$MYDIR/${dbname}_${DB_NAME}_${DB_DATE}_sql.gz

Done

find /server/backup/ -type f -name "*.gz" -mtime +3|xargs rm –rf

find /server/backup/* -type d -name "*" -exec rsync -avz {} data_backup:/data/backup/ \;

 

Select … into outfield 备份

select … into outfile命令可以用来导出表中符合条件的数据到文本文件,不导出表结构,仅用来导出数据

1

2

3

4

5

 

SELECT INTO…OUTFILE语法:

select * from Table into outfile '/路径/文件名'

fields terminated by ','

enclosed by '"'

lines terminated by ‘\r\n

 

outfile 输出文件路劲必须在my.cnf 中配置secure_file_priv=/usr/local/mysql/backup/

TERMINATED BY用来指定字段值之间的符号,例如, “TERMINATED BY ‘,’”指定了逗号作为两个字段值之间的标志。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/da5dc0e700869060a288b7581c36f8af.html