MySQL运维之---mysqldump备份、select...into outfile、mysql -e 等工具的使用
1、mysqldump备份一个数据库
mysqldump命令备份一个数据库的基本语法:
- mysqldump -u user -p pwd dbname > Backup.sql
我们来讲解一下备份的文件都包含了什么?-- MySQL dump 10.13 Distrib 5.5.20, for Win32 (x86)--
- -- Host: 127.0.0.1 Database: school
- -- ------------------------------------------------------
- -- Server version 5.5.20-log
- /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
- /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
- /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
- /*!40101 SET NAMES utf8 */;
- /*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
- /*!40103 SET TIME_ZONE='+00:00' */;
- /*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
- /*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
- /*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
- /*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
- --
- -- Table structure for table `book`
- --
- DROP TABLE IF EXISTS `book`;
- /*!40101 SET @saved_cs_client = @@character_set_client */;
- /*!40101 SET character_set_client = utf8 */;
- CREATE TABLE `book` (
- `bookid` int(11) NOT NULL,
- `bookname` varchar(255) NOT NULL,
- `authors` varchar(255) NOT NULL,
- `info` varchar(255) DEFAULT NULL,
- `comment` varchar(255) DEFAULT NULL,
- `year_publication` year(4) NOT NULL,
- KEY `BkNameIdx` (`bookname`)
- ) ENGINE=MyISAM DEFAULT CHARSET=utf8;
- /*!40101 SET character_set_client = @saved_cs_client */;
- --
- -- Dumping data for table `book`
- --
- LOCK TABLES `book` WRITE;
- /*!40000 ALTER TABLE `book` DISABLE KEYS */;
- INSERT INTO `book` VALUES (1,'鍓戝湥','灏忔槑','','hao',2013);
- /*!40000 ALTER TABLE `book` ENABLE KEYS */;
- UNLOCK TABLES;
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;- /*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
- /*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
- /*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
- /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
- /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
- /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
- /*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
- -- Dump completed on 2014-07-23 22:04:16
我们看到文件中以“ - ”开头的都表示注释。以“ /*! ”开头,“ */ ”结尾的语句为MYSQL可以执行的注释。旨在说明mysql具有可移植性。
备份文件的上半部分的一些SET语句,这些语句将一些系统变量值赋给用户定义变量,目的是确保被恢复的数据库的系统变量和原来备份时的变量相同。
备份文件的最后几行MYSQL使用SET语句恢复服务器系统变量原来的值。
还有一点需要注意:备份文件中的MYSQL可执行注释语句,以“40101”数字开头的,这些数字代表了MYSQL版本号,告诉我们,这些语句只有在制定的MYSQL版本或者比该版本高的情况下才能执行。40101代表版本:4.01.01版本。
2、备份一个数据库中的某个表
- mysqldump -u user -p pwd dbname table1 table2 table3... > Backup.sql
备份多个数据库
- mysqldump -u root -p pwd --databases dbname1 dbname2 dbname3 .... > Backup.sql
备份MYSQL中全部的数据库
- mysqldump -u root -p pwd --all-databases > Backup.sql
3、mysqldump命令的简单使用(这里注重简单快速上手的使用,如果想看详细的使用方法,可以继续往下拉)
- --add-drop-database 每个数据库创建语句前面加上DROP DATABASE语句
- --add-drop-table 每个表创建语句前面加上DROP TABLE语句
默认情况下,这两个参数命令会自动加上,因此你需要注意的是:导入前一定要确认好旧数据库的确可以删除,因为备份文档里面包含了删除旧的数据库和旧的表的删除语句,因此导入前要仔细检查这一点。
- -n,--no-create-db 不包含数据库的创建语句
- -t,--no-create-info 不包含表的创建语句
- -d,--no-data 不包含数据
这三个语句默认是不加上的,因此备份的时候需要根据自己的需求来进行选择。
4、使用mysqldump命令导出为类似csv文本格式的数据
记住关键参数-T:
- ~]# mysqldump -u username -T target_dir dbname tablename [option]
- -T target_dir 备份表和数据至目标目录下
--fields-terminated-by=name 字段分隔符
--fields-enclosed-by=name 字段引用符
--fields-optionally-enclosed-by=name 字段引用符(只在CHAR、VARCHAR、TEXT等字符型字段上使用)
--fields-escaped-by=name 转移字符
--lines-terminated-ny=name 记录结束符
当你备份至指定目录完成后,你会发现指定目录下面有两个文件,一个是sql文件,一个是txt文件。
案例演示:
- [tidb@:vg_adn_tidbCkhsTest /tmp/bak]$mysqldump -uroot -p123456 mob_adn test -T /tmp/ --fields-terminated-by '\t' --fields-optionally-enclosed-by '"'
- mysqldump: [Warning] Using a password on the command line interface can be insecure.
- [tidb@:vg_adn_tidbCkhsTest /tmp/bak]$ls
- test.sql test.txt
[tidb@:vg_adn_tidbCkhsTest /tmp/bak]$cat test.txt- 312 "0" 2 0 "com.apps.noise.detector" "GB" 5 0 0 0 4 401 "{\"value\":\"Noise Detector\"}" "1160dbc70324001ddf709052280e2de6" 2 11 "" 1 162035357 2047421827 1499358006 1501237112 "" "" ""
sql文件主要是建表语句而已:
- -- MySQL dump 10.13 Distrib 5.7.24, for linux-glibc2.12 (x86_64)
- --
- -- Host: localhost Database: mob_adn
- -- ------------------------------------------------------
- -- Server version 5.7.24-log
- /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
- /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
- /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;--
- -- Table structure for table `test`
- --
- DROP TABLE IF EXISTS `test`;
- /*!40101 SET @saved_cs_client = @@character_set_client */;
- /*!40101 SET character_set_client = utf8 */;
- CREATE TABLE `test` (
- `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
......
......
......
mysqldump实际调用的就是select....into outfile...的接口而已,并在其上添加了新的功能。
如果我们要导入这样的txt格式的文件,我们可以使用mysqlimport命令或者load data infile的方法。参考下节内容
5、使用SELECT.......INTO OUTFILE导出文本文件
该文件被创建在服务器主机上,因此必须有文件写入权限(FILE权限),才能使用此语法
语法:
- select columnlist from Table WHERE condition into outfile 'filename' [OPTIONS]
- fields terminated by 'VALUE'
- fields [OPTIONALLY] ENCLOSED BY 'VALUE'
- fields ESCAPED BY 'VALUE'
- lines STARTING by 'VALUE'
- lines terminated by 'VALUE'
[OPTIONS]部分为可选参数,[OPTIONS]部分的语法包括FILED和LINES子句,其可能取值为:
● fields子句:在FIELDS子句中有三个子句:TERMINATED BY、 [OPTIONALLY] ENCLOSED BY和ESCAPED BY。
如果指定了FIELDS子句,则这三个子句中至少要指定一个。
(1)TERMINATED BY用来指定字段值之间的符号,例如,“TERMINATED BY ','”指定了逗号作为两个字段值之间的标志,默认为“\t”制表符。
(2)ENCLOSED BY子句用来指定包裹文件中字符值的符号,例如,“ENCLOSED BY ' " '”表示文件中字符值放在双引号之间,
若加上关键字OPTIONALLY表示所有的值都放在双引号之间,则只有CHAR和VARCHAR等字符数据字段被包括。
(3)ESCAPED BY子句用来指定转义字符,例如,“ESCAPED BY '*'”将“*”指定为转义字符,取代“\”,如空格将表示为“*N”。
● LINES子句:在LINES子句中使用TERMINATED BY指定一行结束的标志,如“LINES TERMINATED BY '?'”表示一行以“?”作为结束标志,默认值为“\n”。
LINES STARTING BY ''表示每行数据开头的字符,可以为单个或多个,默认不是有任何字符
如果在导出的时候没有制定OPTIONS的参数,导入表的时候也不用指明这些参数。
注意:这个SELECT命令导出文本文件有限制,就是想要在服务器主机之外的部分客户主机上创建结果文件,不能使用此参数。应该使用“mysql -e”命令。(就是我们使用客户端连接远程的服务器端的操作,怪不得TIDB数据库不支持这个命令导出数据)
6、、使用“mysql -e”命令导出文本文件.
这个就是说我们可以在命令模式下执行SQL指令,将查询结果导入到一个类似与csv格式的文本文件中。
- mysql -u root -p --execute="SELECT * from tablename" dbname >filename.txt
上面的select语句必须使用双引号引起来。导出的数据使用制表符分割了。
7、最后细说讲一下mysqldump语法说明:
- -h, --host=name
- 主机名
- -P[ port_num], --port=port_num
- 用于连接MySQL服务器的的TCP/IP端口号
- --master-data
- 这个选项可以把binlog的位置和文件名添加到输出中,如果等于1,将会打印成一个CHANGE MASTER命令;如果等于2,会加上注释前缀。并且这个选项会自动打开--lock-all-tables,除非同时设置了--single-transaction(这种情况下,全局读锁只会在开始dump的时候加上一小段时间,不要忘了阅读--single-transaction的部分)。在任何情况下,所有日志中的操作都会发生在导出的准确时刻。这个选项会自动关闭--lock-tables。
- -x, --lock-all-tables
- 锁定所有库中所有的表。这是通过在整个dump的过程中持有全局读锁来实现的。会自动关闭--single-transaction和--lock-tables。
- --single-transaction
- 通过将导出操作封装在一个事务内来使得导出的数据是一个一致性快照。只有当表使用支持MVCC的存储引擎(目前只有InnoDB)时才可以工作;其他引擎不能保证导出是一致的。当导出开启了--single-transaction选项时,要确保导出文件有效(正确的表数据和二进制日志位置),就要保证没有其他连接会执行如下语句:ALTER TABLE, DROP TABLE, RENAME TABLE, TRUNCATE TABLE,这会导致一致性快照失效。这个选项开启后会自动关闭--lock-tables。
- -l, --lock-tables
- 对所有表加读锁。(默认是打开的,用--skip-lock-tables来关闭,上面的选项会把关闭-l选项)
- -F, --flush-logs
- 在开始导出前刷新服务器的日志文件。注意,如果你一次性导出很多数据库(使用 -databases=或--all-databases选项),导出每个库时都会触发日志刷新。例外是当使用了--lock-all-tables或--master-data时:日志只会被刷新一次,那个时候所有表都会被锁住。所以如果你希望你的导出和日志刷新发生在同一个确定的时刻,你需要使用--lock-all-tables,或者--master-data配合--flush-logs。
- --delete-master-logs
- 备份完成后删除主库上的日志。这个选项会自动打开``--master-data`。
- --opt
- 同-add-drop-table, --add-locks, --create-options, --quick, --extended-insert, --lock-tables, --set-charset, --disable-keys。(默认已开启,--skip-opt关闭表示这些选项保持它的默认值)应该给你为读入一个MySQL服务器的尽可能最快的导出,--compact差不多是禁用上面的选项。
- -q, --quick
- 不缓冲查询,直接导出至stdout。(默认打开,用--skip-quick来关闭)该选项用于转储大的表。
- --set-charset
- 将SET NAMES default_character_set加到输出中。该选项默认启用。要想禁用SET NAMES语句,使用--skip-set-charset。
- --add-drop-tables
- 在每个CREATE TABLE语句前添加DROP TABLE语句。默认开启。
- --add-locks
- 在每个表导出之前增加LOCK TABLES并且之后UNLOCK TABLE。(为了使得更快地插入到MySQL)。默认开启。
- --create-option
- 在CREATE TABLE语句中包括所有MySQL表选项。默认开启,使用--skip-create-options来关闭。
- -e, --extended-insert
- 使用全新多行INSERT语法,默认开启(给出更紧缩并且更快的插入语句)
- -d, --no-data
- 不写入表的任何行信息。如果你只想得到一个表的结构的导出,这是很有用的。
- --add-drop-database
- 在create数据库之前先DROP DATABASE,默认关闭,所以一般在导入时需要保证数据库已存在。
- --default-character-set=
- 使用的默认字符集。如果没有指定,mysqldump使用utf8。
- -B, --databases
- 转储几个数据库。通常情况,mysqldump将命令行中的第1个名字参量看作数据库名,后面的名看作表名。使用该选项,它将所有名字参量看作数据库名。CREATE DATABASE IF NOT EXISTS db_name和USE db_name语句包含在每个新数据库前的输出中。
- --tables
- 覆盖--database选项。选项后面的所有参量被看作表名。
- -u[ name], --user=
- 连接服务器时使用的MySQL用户名。
- -p[password], --password[=password]
- 连接服务器时使用的密码。如果你使用短选项形式(-p),不能在选项和密码之间有一个空格。如果在命令行中,忽略了--password或-p选项后面的 密码值,将提示你输入一个。
注意:如果运行mysqldump没有--quick或--opt选项,mysqldump在转储结果前将整个结果集装入内存,如果转储大数据库可能会出现问题,该选项默认启用,但可以使用--skip-opt禁用。如果使用最新版本的mysqldump程序备份数据,并用于恢复到比较旧版本的mysql服务器中,则不要使用--opt选项。
备份的时候-F和 -l (小写字母L)经常配合一起使用,-F表示备份前刷新日志,方便恢复过程。-l选项在备份期间使用,使得数据无法被更新。从而使备份的数据保持一致性。
MySQL运维之---mysqldump备份、select...into outfile、mysql -e 等工具的使用的更多相关文章
- mysql运维必会的一些知识点整理
(1)基础笔试命令考察 1.开启MySQL服务 /etc/init.d/mysqld start service mysqld start systemctl start mysqld 2.检测端口是 ...
- 【MySQL运维实践】
什么是日志 日志(log)是一种顺序记录事件流水的文件 记录计算机程序运行过程中发生了什么 多种多样的用途 帮助分析程序问题 分析服务请求的特征.流量等 判断工作是否成功执行 等等…… MySQL日 ...
- mysql运维必会的一些知识点整理(转自民工哥)
(1)基础笔试命令考察 1.开启MySQL服务 /etc/init.d/mysqld start service mysqld start systemctl start mysqld 2.检测端口是 ...
- 搭建稳固的MySQL运维体系
MySQL 监控要点 MySQL 监控要点,主要涉及服务器和 MySQL 两个方向的监控告警. 在这两个监控告警方向需要重点关注监控策略.监控趋势图及报警方式. 监控策略指的是每个监控项的告警阈值,例 ...
- 公司没有 DBA,Mysql 运维自己来
如果你的公司有 DBA,那么我恭喜你,你可以无视 Mysql 运维.如果你的公司没有 DBA,那你就好好学两手 Mysql 基本运维操作,行走江湖,防身必备. 环境:CentOS7 版本: 一.虚拟机 ...
- 转:三思!大规模MySQL运维陷阱之基于MyCat的伪分布式架构
在微信公众号看到一篇关于mycat的文章,觉得分析的很不错,给大家分享一下 三思!大规模MySQL运维陷阱之基于MyCat的伪分布式架构 原文链接:https://mp.weixin.qq.com/s ...
- MySQL运维工具
Mysql运维过程中设计的各类工具以及各个场景的的命令行的分类.大体总结如下的xmind图片(.xmind附件 加 Q1123654342). 大体上分为: 实例管理工具.高可用工具.慢日志查询工具. ...
- 美图秀秀DBA谈MySQL运维及优化
美图秀秀DBA谈MySQL运维及优化 https://mp.weixin.qq.com/s?__biz=MzI4NTA1MDEwNg==&mid=401797597&idx=2& ...
- [分享]运维分享一一阿里云linux系统mysql密码修改脚本
[分享]运维分享一一阿里云linux系统mysql密码修改脚本 大象吃豆子 级别: 小白 发帖 12 云币 27 加关注 写私信 只看楼主 更多操作楼主 发表于: 2014-09-3 ...
随机推荐
- Python模块: 文件和目录os+shutil
一 常用函数 os模块 os.sep 表示默认的文件路径分隔符,windows为\, linux为/os.walk(spath): 用来遍历目录下的文件和子目录os.listdir(dirname): ...
- Apriori算法进行关联分析
设全集U = {a, b, c, d, e},其元素a,b, c, d, e称为项. 数据集: D = [ {a, b}, {b, c, d}, {d, e}, {b, c, e}, {a,b, c, ...
- 并发编程 —— ConcurrentHashMap size 方法原理分析
前言 ConcurrentHashMap 博大精深,从他的 50 多个内部类就能看出来,似乎 JDK 的并发精髓都在里面了.但他依然拥有体验良好的 API 给我们使用,程序员根本感觉不到他内部的复杂. ...
- Microsoft Office MIME Types
经常需要查找Microsoft Office MIME Types,终于在MSDN网上找到,摘录如下,以备查阅与参考:http://blogs.msdn.com/b/vsofficedeveloper ...
- ASP.NET 之 EntityFramework实体框架搭建
前段时间接触了EntityFramework,对ORM框架也是有了初步的认识,现在对其进行一点小总结. 一.ORM简介 对象关系映射(Object Relational Mapping,简称ORM)模 ...
- C# 最大二叉堆算法
C#练习二叉堆算法. namespace 算法 { /// <summary> /// 最大堆 /// </summary> /// <typeparam name=&q ...
- Web前端基础——JavaScript
一.脚本程序和 javascrip Javascript脚 本是嵌套在HTML网页中的程序语言,浏览器带有脚本程序的解释器(脚本引擎).脚本也可以有多种,比如还有vbscript, JScrip ...
- java中那些类是线程安全的?
Java中各种集合(字符串类)的线程安全性!!! 一.概念: 线程安全:就是当多线程访问时,采用了加锁的机制:即当一个线程访问该类的某个数据时,会对这个数据进行保护,其他线程不能对其访问,直到该线程读 ...
- 了解java虚拟机---JVM的基本结构(1)
1. JVM的基本结构 1.1. 类加载子系统 类加载子系统负责从文件或者网络中加载Class信息,加载的类信息存放于方法区的内存空间.方法区中可能还会存放运行时常量信息,包括字符串与数字常量.(这部 ...
- HDU4289(KB11-I 最小割)
Control Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Sub ...