MySQL 备份与恢复详解(3)

–where=’where_condition’, -w ‘where_condition’ 参数代表仅导出符合条件的数据,比如 
–where=”user=’jimf’” 
-w”userid>1” 
-w”userid<1

–lock-all-tables, -x参数代表在导出过程中对每个数据库的每个表加上一个只读锁

–no-autocommit参数代表对每个表的数据导出内容用set autocommit=0和commit两个语句包围

–single-transaction参数代表将事务隔离级别设置为可重复读并在导出开始时执行start transaction开启一个新的事务,在dump的执行过程中也不会阻止任何的读写操作, 一般都会加上改参数

数据导出:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

 

导出一个数据库:

[root@master01 ~]# mysqldump -u root -p -P 3306 --databases course>backup.sql

导出多个数据库:

[root@master01 ~]# mysqldump -u root -p -P 3306 --databases course test>course.sql

#或则

[root@master01 ~]# mysqldump -u root -p -P 3306 -B course test>course.sql

 

导出所有数据库:

[root@master01 ~]# mysqldump -u root -p -P 3306 --all-databases>course.sql

 

导出一个数据库的某几个表:

[root@master01 ~]# mysqldump -u root -p -P 3306 course students students_myisam>course.sql

 

仅导出course数据库的数据而不包含表结构:

[root@master01 ~]# mysqldump -u root -p -P 3306 --no-create-info course>course.sql

 

仅导出course数据库中的students和students_myisam两个表的数据:

[root@master01 ~]# mysqldump -u root -p -P 3306 --no-create-info course students students_myisam>course.sq

 

仅导出course数据库的表结构:

[root@master01 ~]# mysqldump -u root -p -P 3306 --no-data course>course.sql

 

导出course数据库中除了teacher和score两个表的其他表结构和数据:

[root@master01 ~]# mysqldump -u root -p -P 3306 --ignore-table=course.teacher --ignoretable=course.score course>course.sql

 

导出course数据库的表和存储过程和触发器:

[root@master01 ~]# mysqldump -u root -p -P 3306 --routine --trigger course>course.sql

 

导出course数据库中符合where条件的数据:

[root@master01 ~]# mysqldump -u root -p -P 3306 --where="sid in (1,2)" course students

students_myisam>course.sql

 

远程导出course数据库,导出文件在发起导出命令的服务器上:

[root@master02 data]# mysqldump -u root -p -P 3306 -h 10.0.0.201 course > course.sql

 

关于备份锁表的问题

FLUSH TABLES WITH READ LOCK简称(FTWRL),该命令主要用于备份工具获取一致性备份(数据与binlog位点匹配)。由FTWRL总共需要持有两把全局的MDL锁,并且还需要关闭所有表对象,因此这个命令的杀伤性很大,执行命令时容易导致库hang住 
FTWRL主要包括3个步骤: 
1.上全局读锁(lock_global_read_lock) 
2.清理表缓存(close_cached_tables) 
3.上全局COMMIT锁(make_global_read_lock_block_commit)

FTWRL每个操作的影响 
上全局读锁会导致所有更新操作都会被堵塞;关闭表过程中,如果有大查询导致关闭表等待,那么所有访问这个表的查询和更新都需要等待;上全局COMMIT锁时,会堵塞活跃事务提交

从主库备份正确方式: 
[root@master ~]# mysqldump -u root -p -P 3306 –master-data=2 –single-transaction course >course.sql 
此备份方式会在备份开始之初在所有表上加一个只读锁(FLUSH TABLES WITH READ LOCK), 当成功获取了该锁并开始备份之后,此锁就会立即释放。而后续的dump过程中不会影响其他的读写操作

从主库备份如果–dump-slave参数,则备份失败: 
[root@master01 ~]# mysqldump -u root -p -P 3306 –dump-slave=2 –single-transaction course >course.sql 
Enter password: 
mysqldump: Couldn’t execute ‘START SLAVE’: The server is not configured as slave; fix in config file or with CHANGE MASTER TO (1200)

在从库上备份数据: 
[root@slave1 course]# mysqldump -u root -p -P 330 –dump-slave –single-transaction test >course.sql

Mysql 导入备份文件

格式如下 
第一种mysql

1

 

SHELL> mysql -u root -p db_name < dbbackup.sql

 

第二种: 
也可以使用source命令导入一个备份文件:

在sql的备份的那里登录 
mysql > use dbname; 
mysql > use dbbackup.sql;

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

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