暂无图片
暂无图片
1
暂无图片
暂无图片
暂无图片

mysqldump学习总结

原创 liang 2020-03-21
3306

1.概述

mysqldump是mysql数据库的一个常用的工具,经常会使用它来做数据逻辑迁移、主从搭建等工作。

通过/usr/local/mysql/bin/mysqldump --help命令来查看这个命令的使用说明。

2.核心参数解释

这里介绍几个核心参数,也是生产中用得最多的参数。

–single-transaction
用于保证InnoDB备份数据时的一致性,配合RR隔离级别一起使用;当发起事务时,读取一个数据的快照,直到备份结束时,都不会读取到本事务开始之后提交的任何数据(这个参数相当重要)。

–all-databases (-A)
备份所有的数据库。

–master-data
该参数有1和2两个值,如果值等于1,就会在备份出来的文件中添加一个CHANGE MASTER的语句(后期配置搭建主从架构);如果值等于2,就会在备份出来的文件中添加一个CHANGE MASTER的语句,并在语句前面添加注释符号(后期配置搭建主从架构)。

–dump-slave
该参数用于在从库端备份数据,在线搭建新的从库时使用。该参数也有1和2两个值。值为1时,也是在备份出来的文件中添加一个CHANGE MASTER的语句;值为2时,则会在 CHANGE MASTER命令前增加注释信息。

–no-create-info (-t)
备份过程中,只备份表数据,并不备份表结构。

–no-data (-d)
备份过程中,只备份表结构,不备份表数据。

–complete-insert (-c)
使用完整的insert语句会包含表中的列信息,这么做可以提高插入效率。

–databases (-B)
备份多个数据库。例如:mysqldump -uroot -poracle123 -database db1 db2。

–default-character-set
字符集,MySQL目前默认的字符集为UTF8,要与备份出的表的字符集保持一致。

–quick (-q)
相当于加sql_no_query,意味着并不会读取缓存中的数据。

–where=name (-w)
按条件备份出想要的数据。

3.mysqldump工具使用方法演示

3.1全库备份与恢复

mkdir -p /data/backup
cd /data/backup
cd 进入/data/backup,然后备份。将在该目录下产生备份文件,如果不cd 进入,那么可以加绝对路径,比如:/data/backup/all_20190614.sql

3.1.1备份全库

/usr/local/mysql/bin/mysqldump --single-transaction -uroot -poracle -A > all_20190614.sql
-A表示备份所有库

3.1.2恢复全库

/usr/local/mysql/bin/mysql -uroot -poracle < all_20190614.sql

注:这里最好给备份文件标注下时间,方便后期快速找到所需要恢复的文件。
如果数据库中已开启gtid选项,但备份过程中不想带gtid信息,可以加上–set-gtid-purged= OFF参数。
备份时,去掉gtid信息:
/usr/local/mysql/bin/mysqldump --single-transaction -uroot -poracle -A --set-gtid-purged=OFF > all_2.sql

搭建主从复制,全库备份:
/usr/local/mysql/bin/mysqldump --single-transaction -uroot -poracle -A --master-data=1 > all_1.sql

/usr/local/mysql/bin/mysqldump --single-transaction -uroot -poracle -A --master-data=2 > all_2.sql
推荐方式,推荐–master-data=2 。

master-data=1 时,more all_1.sql

--
-- Position to start replication or point-in-time recovery from
--

CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000006', MASTER_LOG_POS=154;

--
-- Current Database: `mysql`
--

master-data=2 时,more all_2.sql,可以看到设置master-data=2时,CHANGE MASTER前面是注释掉的。

--
-- Position to start replication or point-in-time recovery from
--

-- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000006', MASTER_LOG_POS=154;

--
-- Current Database: `mysql`
--

3.2单库备份与恢复

3.2.1备份单库

/usr/local/mysql/bin/mysqldump --single-transaction -uroot -poracle test > mysqldump_test.sql
备份单个库,这里只备份test库

3.2.2恢复单库

create database test;
恢复单库时,如果test库不存在,要先创建,然后才能恢复。如果test库存在,可以直接恢复test库。
/usr/local/mysql/bin/mysql -uroot -poracle test < mysqldump_test.sql

3.3单库下某张表的备份与恢复

3.3.1备份单表

/usr/local/mysql/bin/mysqldump --single-transaction -uroot -poracle test sbtest > mysqldump_test_sbtest.sql
备份单个库下的表,备份test库下sbtest表

3.3.2恢复单表

恢复单表时,导入符号之前不需要写表的名字,只需要写库的名字即可。
/usr/local/mysql/bin/mysql -uroot -poracle test < /data/backup/mysqldump_test_sbtest.sql

3.4单表部分数据的备份与恢复

3.4.1备份单表部分数据

根据条件备份某库下指定表的部分数据

root@db 21:49:  [test]> select * from EMP where EMPNO in (7876,7900);
+-------+-------+-------+------+---------------------+------+------+--------+
| EMPNO | ENAME | JOB   | MGR  | HIREDATE            | SAL  | COMM | DEPTNO |
+-------+-------+-------+------+---------------------+------+------+--------+
|  7876 | ADAMS | CLERK | 7788 | 1987-05-23 00:00:00 | 1100 | NULL |     20 |
|  7900 | JAMES | CLERK | 7698 | 1981-12-03 00:00:00 |  950 | NULL |     30 |
+-------+-------+-------+------+---------------------+------+------+--------+
2 rows in set (0.00 sec)

/usr/local/mysql/bin/mysqldump --single-transaction -uroot -poracle test EMP --where=“EMPNO in (7876,7900)” > mysqldump_test_EMP.sql
备份test库下EMP表,EMPNO 为7876或者7900的记录。

/usr/local/mysql/bin/mysqldump --single-transaction -uroot -poracle db1 EMP -d --where=“EMPNO>7900”> db1_EMP_over_7900.sql
备份单库db1下的EMP表中EMPNO大于7900的记录。
注:WHERE条件后面记得要加双引号(""),否则不会被识别。

3.4.2恢复单表部分数据

/usr/local/mysql/bin/mysql -uroot -poracle test < /data/backup/mysqldump_test_EMP.sql
恢复时,会把EMP表中的原记录清空,然后在恢复。不是追加进去。

3.5备份表结构

/usr/local/mysql/bin/mysqldump --single-transaction -uroot -poracle db1 EMP -d > db1_EMP_d.sql
备份单库db1下的EMP表的表结构

3.6备份表定义

/usr/local/mysql/bin/mysqldump --single-transaction -uroot -poracle db1 EMP -t > db1_EMP_t.sql
备份单库db1下的EMP表的数据

最后修改时间:2020-03-24 09:09:19
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论