使用mysqldump命令行工具创建逻辑备份:

注意mysqldump的版本和路径

mysqldump命令创建的是逻辑备份,结果集有两种格式:一种是将数据转换成标准的SQL语句(一堆CREATE,DROP,INSERT等语句),另一种是将数据按照指定分隔符,输出成定界格式的平面文件。

[root@mydb1 ~]# mysqldump

usage: mysqldump [OPTIONS] database [tables]

OR     mysqldump [OPTIONS] --databases [OPTIONS] DB1 [DB2 DB3...]

OR     mysqldump [OPTIONS] --all-databases [OPTIONS]

For more options, use mysqldump –help

 

mysqldump 参数详解:

--single-transaction

用于保证innodb备份数据一致性,配合RR隔离级别使用;当发起事务,读取一个快照版本,直到备份结束时,都不会读取到本事务开始之后提交的数据;(很重要)

-q, --quick

加 SQL_NO_CACHE 标示符来确保不会读取缓存里的数据-l

--lock-tables

发起 READ LOCAL LOCK锁,该锁不会阻止读,也不会阻止新的数据插入

--master-data

两个值 1和2,如果值等于1,就会添加一个CHANGE MASTER语句(后期配置搭建主从架构)

如果值等于2,就会在CHANGE MASTER语句前添加注释(后期配置搭建主从架构)

-c, --complete-insert;

导出完整sql语句

-d,--no-data;

不导出数据,只导表结构

-t,--no-create-info;

只导数据,不导表结构

-w, --where=name ;

按条件导出想要的数据

--set-gtid-purged,在gtid环境中使用

备份数据库:

备份单个数据库或单个数据库中的指定表:

mysqldump [OPTIONS] database [tb1] [tb2]…

备份多个数据库:

mysqldump [OPTIONS] –databases

[OPTIONS] DB1 [DB2 DB3...]

备份所有数据库:

mysqldump [OPTIONS] –all-databases

[OPTIONS]

利用mysql命令恢复数据:

mysql -uroot -proot23 db_name < table_name.sql

 

通过--where选项导出满足条件的数据

mysqldump -uroot -p --single-transaction --master-data --where='id < 10' test02 goods_code_info > TableConditon.sql

备注:--where等号的后面的条件,必须要用括号扩起来.上面的语句的作用,导出test02库下goods_code_info表中满足id<10这个条件的记录.

注意sql_log_bin和gtid_purged
time /usr/local/mysql/bin/mysqldump -uroot -pmsds007 --single-transaction --master-data=2 -A -S /app/mysqldata/3306/mysql.sock > db3306-`date +%Y%m%d`.sql
time /usr/local/mysql/bin/mysqldump -uroot -pmsds007 --single-transaction --master-data=2 --set-gtid-purged=off mytest -S /app/mysqldata/3306/mysql.sock > db3306-`date +%Y%m%d`_mytest.sql
time /usr/local/mysql/bin/mysql -uroot -pmsds007 -S /app/mysqldata/3306/mysql.sock < db3306-20170710.sql
每次导完数据,尽量flush privileges;一下
使用mysqlbinlog恢复--skip-gtids 忽略gtid信息

 

查看导出的文件,是先drop表再create表,再看有没有乱码,注意字符集

 

打开general log执行

time /usr/local/mysql/bin/mysqldump -uroot -pmsds007 --single-transaction --master-data=2 -A -S /app/mysqldata/3306/mysql.sock > db3306-`date +%Y%m%d`.sql

看general log的详细信息 

 

原理图

MySQL dump 表结构 mysql dump原理_MySQL