数据库备份mysqldump应用总结

[[email protected] ~]# mysqldump -uroot -p123456 xxx > /opt/xxx.sql   #备份数据库xxx
[[email protected] ~]# egrep -v "#|\*|--|^$" /opt/xxx.sql 
DROP TABLE IF EXISTS `test`;
CREATE TABLE `test` (
  `id` int(4) NOT NULL AUTO_INCREMENT,
  `name` char(20) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=latin1;
LOCK TABLES `test` WRITE;
INSERT INTO `test` VALUES (1,‘martin‘),(2,‘martin‘),(3,‘tom‘),(4,‘marry‘),(5,‘jacky‘),(6,‘脗铆‘);
UNLOCK TABLES;
[[email protected] ~]# mysqldump -uroot -p123456 xxx --default-character-set=latin1 > /opt/xxx1.sql     #指定字符集导出数据库
[[email protected] ~]# egrep -v "#|\*|--|^$" /opt/xxx1.sql                                          
DROP TABLE IF EXISTS `test`;
CREATE TABLE `test` (
  `id` int(4) NOT NULL AUTO_INCREMENT,
  `name` char(20) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=latin1;
LOCK TABLES `test` WRITE;
INSERT INTO `test` VALUES (1,‘martin‘),(2,‘martin‘),(3,‘tom‘),(4,‘marry‘),(5,‘jacky‘),(6,‘马‘);   可以看到乱码已经不存在了,建表默认是latin1
UNLOCK TABLES;
[[email protected] ~]# mysql -uroot -p123456 -e "use xxx;drop table test;"   删除表test
[[email protected] ~]# mysql -uroot -p123456 -e "use xxx;show tables;"  可以看到test表已经没有了
[[email protected] ~]# 
[[email protected] ~]# 
[[email protected] ~]# mysql -uroot -p123456 xxx < /opt/xxx1.sql   导回数据库
[[email protected] ~]# 
[[email protected] ~]# mysql -uroot -p123456 -e "use xxx;show tables;"   再次查看test表已经有了
+---------------+
| Tables_in_xxx |
+---------------+
| test          |
+---------------+
[[email protected] ~]# 
[[email protected]ansible ~]# mysqldump -uroot -p123456 -B xxx --default-character-set=latin1 > /opt/xxx1_B.sql   加 -B 选项导出
[[email protected] ~]# cd /opt/
[[email protected] opt]# diff xxx1.sql xxx1_B.sql   对比没有加 -B选项  和加 -B选项时候的区别
18a19,26
> -- Current Database: `xxx`
> --
> 
> CREATE DATABASE /*!32312 IF NOT EXISTS*/ `xxx` /*!40100 DEFAULT CHARACTER SET latin1 */;
> 
> USE `xxx`;
> 
> --
51c59
< -- Dump completed on 2016-08-13 23:07:34
---
> -- Dump completed on 2016-08-13 23:17:33
说明:直观看 加了 -B 参数的作用是在导出数据库的时候增加了 创建数据库和连接数据库的命令了,即如下两条语句
CREATE DATABASE /*!32312 IF NOT EXISTS*/ `xxx` /*!40100 DEFAULT CHARACTER SET latin1 */;
 
USE `xxx`;
[[email protected] opt]# mysql -uroot -p123456 -e "drop database xxx;show databases;"      删除数据库xxx               
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| test               |
+--------------------+
[[email protected] opt]# mysql -uroot -p123456  < /opt/xxx1_B.sql        因为这是加了 -B 选项导出来的数据,所以前面不需要再指定数据库                                       
[[email protected] opt]# mysql -uroot -p123456 -e "show databases;"       可以看到数据库已经恢复了           
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| test               |
| xxx                |
+--------------------+
[[email protected] opt]# mysqldump -uroot -p123456 -B xxx --default-character-set=latin1|gzip > /opt/xxx1_B.sql.gz   用gzip压缩后再导出
[[email protected] opt]# ll
-rw-r--r--  1 root root 2069 Aug 13 23:17 xxx1_B.sql
-rw-r--r--  1 root root  805 Aug 13 23:33 xxx1_B.sql.gz   可以看到压缩后导出的数据大小 小了很多
总结:
1、导出数据用-B参数
2、用gzip对备份的数据压缩
mysqldump 的工作原理
利用mysqldump命令备份数据的过程,实际上就是把数据从mysql库里面以逻辑的sql语句的形式输出
备份多个库
[[email protected] opt]# mysqldump -uroot -p123456 -B test zabbix | gzip > /opt/mul.sql.gz
[[email protected] opt]# ll
total 4900
-rw-r--r--  1 root root 5012554 Aug 15 07:52 mul.sql.gz
-B 参数是关键,表示连接多个库,并且增加 use db; 和 create database db的信息
[[email protected] opt]# mysql -uroot -p123456 -e "show databases;"|grep -Evi "database|info|perf"
martin
martin_gbk
martin_utf8
mysql
test
zabbix
[[email protected] opt]# cat mysql.sh   #备份数据库多个库的脚本
#!/bin/bash
for dbname in `mysql -uroot -p123456 -e "show databases;"|grep -Evi "database|info|perf"`
do
    mysqldump  -uroot -p123456  --events -B ${dbname}|gzip > /opt/${dbname}.sql.gz
done 
[[email protected] opt]# sh mysql.sh 
[[email protected] opt]# ll -h
total 5.1M
-rw-r--r-- 1 root root  549 Aug 15 08:34 martin_gbk.sql.gz
-rw-r--r-- 1 root root  845 Aug 15 08:34 martin.sql.gz
-rw-r--r-- 1 root root  547 Aug 15 08:34 martin_utf8.sql.gz
-rw-r--r-- 1 root root  199 Aug 15 08:34 mysql.sh
-rw-r--r-- 1 root root 149K Aug 15 08:34 mysql.sql.gz
-rw-r--r-- 1 root root  545 Aug 15 08:34 test.sql.gz
-rw-r--r-- 1 root root 4.9M Aug 15 08:34 zabbix.sql.gz
mysql> use martin;
Database changed
mysql> show tables;   
+------------------+
| Tables_in_martin |
+------------------+
| student          |
| student1         |
+------------------+
2 rows in set (0.00 sec)
备份单个表
[[email protected] opt]# mysqldump -uroot -p123456 martin student > one.sql        
martin指的是库名  student指的是表名   这时候不能加 -B参数了   因为 -B参数会将后面识别的都是库名
备份多个表
[[email protected] opt]# mysqldump -uroot -p123456 martin student student1 > two.sql
martin指的是库名  student student1 指的是两个表名
[[email protected] alertscripts]# mysqldump -uroot -p123456 -d martin student1 
只备份student1  表的结构  martin代表数据库
[[email protected] ~]# mysqldump -uroot -p123456 -A -B --events|gzip > /opt/all.sql.gz   -A代表所有数据库
[[email protected] mysql]# ll
-rw-rw---- 1 mysql mysql      236 Aug 11 23:14 mysql-bin.000001
-rw-rw---- 1 mysql mysql      488 Aug 12 00:51 mysql-bin.000002
-rw-rw---- 1 mysql mysql      722 Aug 12 23:46 mysql-bin.000003
-rw-rw---- 1 mysql mysql      229 Aug 13 01:06 mysql-bin.000004
-rw-rw---- 1 mysql mysql      244 Aug 17 14:41 mysql-bin.000005
-rw-rw---- 1 mysql mysql       95 Aug 17 14:41 mysql-bin.index
[[email protected] mysql]# mysqldump -uroot -p123456 -A -B -F --events|gzip > /opt/all.sql.gz   -F 会刷新bin-log
[[email protected] mysql]# ll
-rw-rw---- 1 mysql mysql      236 Aug 11 23:14 mysql-bin.000001
-rw-rw---- 1 mysql mysql      488 Aug 12 00:51 mysql-bin.000002
-rw-rw---- 1 mysql mysql      722 Aug 12 23:46 mysql-bin.000003
-rw-rw---- 1 mysql mysql      229 Aug 13 01:06 mysql-bin.000004
-rw-rw---- 1 mysql mysql      287 Aug 17 14:50 mysql-bin.000005
-rw-rw---- 1 mysql mysql      149 Aug 17 14:50 mysql-bin.000006
-rw-rw---- 1 mysql mysql      149 Aug 17 14:50 mysql-bin.000007
-rw-rw---- 1 mysql mysql      106 Aug 17 14:50 mysql-bin.000008
-rw-rw---- 1 mysql mysql      152 Aug 17 14:50 mysql-bin.index
[[email protected] mysql]# mysqldump -uroot -p123456 --master-data=1 --compact martin       #--master-data=1 该参数会找bin-log位置
CHANGE MASTER TO MASTER_LOG_FILE=‘mysql-bin.000008‘, MASTER_LOG_POS=106;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
[[email protected] mysql]# mysql -uroot -p123456 -e "show master status\G;"    
*************************** 1. row ***************************
            File: mysql-bin.000008
        Position: 106
[[email protected] mysql]# mysqldump -uroot -p123456 --master-data=2 --compact martin       #--master-data=2 该参数会找bin-log位置,但是语句被注释,实际并不执行
--CHANGE MASTER TO MASTER_LOG_FILE=‘mysql-bin.000008‘, MASTER_LOG_POS=106;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;

mysqldump的关键参数说明

1、-B 指定多个库,会增加建库语句和use语句

2、--compact 去掉注释,适合调试输出 生产环境不用

3、-A 备份所有库

4、-F 刷新binlog日志

5、--master-data=1 增加binglog日志文件名及对应的位置点

6、-x 锁表

7、-l  只读锁表

8、-d  只备份表结构

9、-t  只备份数据

10、--single-transaction  适合innodb事务数据库备份

生产场景myisam备份:
mysqldump -uroot -p123456 -A -B --master-data=1 -x --events|gzip > /opt/all.sql.gz
生产场景innodb备份:
mysqldump -uroot -p123456 -A -B --master-data=1 --events --single-transaction|gzip > /opt/all.sql.gz
数据库的恢复
mysql> drop database xxx;
Query OK, 1 row affected (0.07 sec)
mysql> show databases;   
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| test               |
+--------------------+
4 rows in set (0.00 sec)
mysql> system ls /opt
rh  xxx1_B.sql  xxx1_B.sql.gz  xxx1.sql  xxx.sql
mysql> source /opt/xxx1_B.sql                          #用source命令恢复数据库
mysql> show databases;       
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| test               |
| xxx                |
+--------------------+
5 rows in set (0.00 sec)
时间: 2024-12-29 20:22:21

数据库备份mysqldump应用总结的相关文章

数据库备份—mysqldump

数据库备份类型 一.热备份 温备份 冷备份 热备份:数据读写不受影响 温备份:仅可以执行读操作 冷备份:离线备份.读写均终止 二.物理备份 逻辑备份 物理备份:复制数据文件 逻辑备份:将数据导出成文本文件 三.完全备份 增量备份 差异备份 完全备份:备份所有数据 增量备份:仅备份上次完全备份或增量备份变化的数据 差异备份:仅备份上次完全备份以来所有变化的数据 mysqldump是mysql自带的备份工具,它可以实现对MyISAM表的温备份和对innodb表的热备份.但是它的还原速度很慢,在备份小

MySQL数据库备份--mysqldump用法

导出要用到MySQL的mysqldump工具,基本用法是: shell> mysqldump [OPTIONS] database [tables] 如果你不给定任何表,整个数据库将被导出.   通过执行mysqldump --help,你能得到你mysqldump的版本支持的选项表.   注意,如果你运行mysqldump没有--quick或--opt选项,mysqldump将在导出结果前装载整个结果集到内存中,如果你正在导出一个大的数据库,这将可能是一个问题.   mysqldump支持下列

mysql 数据库备份mysqldump

最近mysql数据库服务器需要备份,遇到如下问题,被依次解决 1. [SQL]mysqldump -uroot -proot tms > tms_20150520.sql [Err] 1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'mysqldump -uroot

数据库备份 mysqldump

1.备份全部数据库的数据和结构 mysqldump -uroot -p123456 --all-databases >all.bak mysqldump -uroot -p123456 -A >all.sql 2.备份全部数据库的结构(加 -d 参数) mysqldump -uroot -p123456 -A -d>all_struct.sql 3.备份全部数据库的数据(加 -t 参数) mysqldump -uroot -p123456 -A -t>all_data.sql  

数据库备份及恢复操作

备份文件数据类型 1.数据文件 info.ibd //info为表名 2.表结构文件 info.frm 3.表属性文件 db.opt 备份类型 - 物理备份:对数据库操作系统的物理文件(如数据文件.日志文件等)的备份. --脱机备份(冷备份):在关闭数据库时进行的备份操作,能较好的保证数据库的完整性. --联机备份(热备份):在数据库运行状态时进行操作,这种备份依赖于数据库的日志文件. - 逻辑备份:针对数据库的逻辑组件(如数据库对象的备份) ①完全备份:每次对数据库进行完整备份,可备份整个数据

数据库05 /索引原理/创建用户和授权/数据库备份/慢查询优化/正确使用索引

目录 数据库05 /索引原理/创建用户和授权/数据库备份/慢查询优化/正确使用索引 1.什么是索引 2.索引的原理 3.索引的数据结构(聚集索引.辅助索引) 4.索引操作 5.索引的两大类型hash与btree 6.创建用户和授权 6.1对新用户的增删改 6.2对当前用户授权管理 7.MySQL数据库备份 8.锁和事务 9.慢查询优化的基本步骤 10.正确的使用索引 10.1 索引命中需注意的问题 10.2 其它注意事项 11.了解知识点 数据库05 /索引原理/创建用户和授权/数据库备份/慢查

【摘】Mysql备份还原数据库之mysqldump实例及参数详细说明

原文http://www.cnblogs.com/xuejie/archive/2013/01/11/2856911.html   我们在运营项目的过程中肯定会遇到备份数据库,还原数据库的情况,我们一般用一下两种方式来处理: 1.使用into outfile 和 load data infile导入导出备份数据 这种方法的好处是,导出的数据可以自己规定格式,并且导出的是纯数据,不存在建表信息,你可以直接导入另外一个同数据库的不同表中,相对于mysqldump比较灵活机动. 我们来看下面的例子:

MySQL Study之--Mysql数据库备份工具(mysqldump)

MySQL Study之--Mysql数据库备份工具(mysqldump) 对于Mysql Database的备份方式有很多种,此次文档主要介绍mysqldump工具: mysqldump:      mysqldump工具很多方面类似相反作用的工具mysqlimport.它们有一些同样的选项.但mysqldump能够做更多的事情.它可以把整个数据库装载到一个单独的文本文件中.这个文件包含有所有重建您的数据库所需要的SQL命令.这个命令取得所有的模式(Schema,后面有解释)并且将其转换成DD

Mysql备份还原数据库之mysqldump实例及参数详细说明

http://www.xuejiehome.com/blfl-2.html http://www.cnblogs.com/xuejie/archive/2013/01/11/2856911.html 我们在运营项目的过程中肯定会遇到备份数据库,还原数据库的情况,我们一般用一下两种方式来处理: 1.使用into outfile 和 load data infile导入导出备份数据 这种方法的好处是,导出的数据可以自己规定格式,并且导出的是纯数据,不存在建表信息,你可以直接导入另外一个同数据库的不同