1、数据备份

1》使用MySQLdump命令备份(主要的方式)

//备份数据库中某张表(去掉表的限定,就是备份指定数据库)
//备份脚本可以重新创建表及插入数据
mysqldump -u user -h host -p pwd dbname [tbname[,tbname...]] > filename.sql
C:\Users\lfy>mysqldump -uroot -h localhost -p12345 mybatis test > C:\Users\lfy\De
sktop\mybatis.test_201909072320.sql
mysqldump: [Warning] Using a password on the command line interface can be insec
ure. C:\Users\lfy>
//备份多个数据库,使用空格隔开
mysqldump -u user -h host -p pwd --databases [database[ database...]] > filename.sql
//备份所有数据库
mysqldump -u user -h host -p pwd --all-databases > filename.sql
//如果所有表均为MyISAM表,应该考虑使用MySQLhotcopy备份或者恢复,将会更快速。
  MySQLdump还有常用的选项:
--opt:该选项将打开--quick、--add-locks、--extended-insert等多个选项。使用该选项可以提供最快速的数据库转储。
--add-drop-database:在每个create database语句前添加drop database语句。
--add-drop-tables:在每个create table语句前添加drop table语句。
--add-locking:用lock tables和unclock tables语句引用每个表转储。重载转储文件时插入得更快。
--all--database,-A:转储所有数据库中的所有表。与使用--database选项相同,在命令行中命名所有数据库。
--comments[=0|1]:如果设置为0,禁止转储文件中的其他信息,例如程序版本、服务器版本和主机。--skip-comments与--comments=0的结果相同。默认值为1,既包括额外的信息。
--compact:产生少量输出。该选项禁用注释并启用--skip-add-drop-tables、--no-set-names、--skip-disable-keys、--skip-add-locking。
...

运行:mysqldump --help获取更多选项信息。

2》直接复制整个数据库目录

因为MySQL表保存文件方式,所以可以直接复制MySQL数据库的存储目录及文件进行备份。但这种方法对InnoDB存储引擎的表不适用。还要注意不同版本数据库的数据格式问题。

3》使用MySQLhotcopy工具快速备份

MySQLhotcopy是一个Perl脚本,它使用Lock Tables、Flush Tables和cp或scp来快速备份数据库。它是备份数据库或者单个表的最快途径,但它只能运行在数据库目录所在的机器上,并且只能备份MyISAM类型的表。MySQLhotcopy运行在Unix系统中。

mysqlhotcopy db_name_1,...db_name_n /path/to/new_dirctory

2、数据还原

1》使用MySQL命令恢复

//针对备份的sql文件中包含create、insert、drop
mysql -u user -p pwd [dbname] < filename.sql
//如果已经登录数据库,可以使用以下方式导入脚本文件
source filename
mysql> drop table test;
Query OK, 0 rows affected (0.01 sec) mysql> source C:\Users\lfy\Desktop\mybatis.test.sql
Query OK, 0 rows affected (0.00 sec) Query OK, 0 rows affected (0.00 sec) Query OK, 0 rows affected (0.00 sec)
...

2》直接复制到数据库目录

要求复制的主版本号相同,仅对MyISAM类型的表有效。

3》MySQLhotcopy工具快速恢复

chown -R mysql.mysql /var/lib/mysql/dbname

3、表的导入和导出

1》使用select...into outfile ‘filename’导出文本文件

在指定的服务器需要有写入权限。filename文件不能已存在。

select column_list from tb_name where condition into outfile 'filename' [options]

options包括fields和lines子句:

fields和lines两个子句都是自选的,但是如果两个都被指定了,fileds必须位于lines的前面。在服务器主机外的客户主机上创建结果,应该在客户主机上使用如“MySQL -e "select ..." > filename”的命令来生成文件。

select...into outfile是load data infile的补语。用于语句的options部分的语法包括部分fields和lines子句,这些子句与load data infile语句同时使用。

mysql> select * from test into outfile "C:\\ProgramData\\MySQL\\MySQL Server 5.7
\\Uploads\\test0.txt";
Query OK, 6 rows affected (0.00 sec) mysql> select * from test into outfile "C:\\ProgramData\\MySQL\\MySQL Server 5.7
\\Uploads\\test1.txt"
-> fields
-> terminated by ','
-> enclosed by '\"'
-> escaped by '\''
-> lines
-> terminated by '\r\n';
Query OK, 6 rows affected (0.02 sec) mysql>
说明:
上面的输出格式限定为以","逗号分隔各字段,以"\""双引号包围字段,以“\'”单引号作为转义字符,每行结尾以\r\n结束。

2》使用MySQLdump命令导出文本文件

mysqldump -T path -u user -p pwd dbname [tables] [options]

--options选项:
--fields-terminated-by=value
--fields-enclosed-by=value
--fields-optionally-enclosed-by=value
--fields-escaped-by=value
--lines-terminated-by=value
只有指定了-T参数才可以导出纯文本文件;path指示导出文件的路径;tables不指定将导出指定数据库的所有表。
[options]参数需要结合-T选项使用。

C:\Users\lfy>mysqldump -T C:\\ProgramData\\MySQL\\MySQL Server 5.7\\Uploads myba
tis test -uroot -p
Enter password: ****
mysqldump: Got error: 1049: Unknown database 'server' when selecting the databas
e C:\Users\lfy>mysqldump -T "C:\\ProgramData\\MySQL\\MySQL Server 5.7\\Uploads" my
batis test -uroot -p
Enter password: **** C:\Users\lfy>
mysqldump针对路径中有空格,可以对路径使用双引号括起来,也可以使用~1替换的形式。使用mysqldump进行备份数据,会同时产生两个文件,一个sql文件,一个指定的txt文件。

使用[options]:

C:\Users\lfy>mysqldump -T "C:\\ProgramData\\MySQL\\MySQL Server 5.7\\Uploads" my
batis test -uroot -p --fields-terminated-by=, --fields-optionally-enclosed-by=\"
--fields-escaped-by=? --lines-terminated-by=\r\n
Enter password: **** C:\Users\lfy>
说明:使用逗号“,”隔开,字段使用双引号括起来,转义字符为“?”问号,回车换行使用“\r\n”。

3》使用MySQL命令导出文本文件

如果MySQL服务器是单独的机器,用户是在一个client上进行操作,用户要把数据结果导入到client机器上,可以使用MySQL -e语句。MySQL语句导出,数据的人工可读性更强,txt文件第一行默认包含了字段名称。

mysql -u user -p pwd --execute="select语句" db_name > filename.txt
C:\Users\lfy>mysql -uroot -p --execute="select * from test" mybatis > C:\\Users\
\lfy\\Desktop\\t.txt
Enter password: **** C:\Users\lfy>

MySQL命令还可以指定查询结果的显式格式,如果某行记录字段太多不能显示完全,可以使用--vartical参数,将每条记录分为多行显示。

C:\Users\lfy>mysql -uroot -p --html --execute="select * from test" mybatis > C:\
Users\lfy\Desktop\t.html
Enter password: **** C:\Users\lfy>

C:\Users\lfy>mysql -uroot -p --xml --execute="select * from test" mybatis > C:\U
sers\lfy\Desktop\t.xml
Enter password: **** C:\Users\lfy>

4》使用load data infile方式导入文本文件

MySQL支持导入数据的语句,load data语句、source语句、MySQL语句。load data infile语句支持高速从一个文本文件中读取行,并装入一个表。文件名必须是字符串类型。

load data infile 'filename.txt' into table tb_name [options] [ignore number lines]

--ignore number lines表示忽略文件开始处的行数,number表示忽略的行数。

options选项:

5》使用MySQLimport命令导入文本文件

mysqlimport -u user -p pwd dbname filename.txt [options]

--注意,并没有指定导入的数据表的名称,数据表的名称由文件名确定,导入数据之前该表必须存在

还有更多支持的选项,使用mysqlimport --help查看。

4、数据库迁移

1》相同版本的MySQL数据库之间的迁移

相同版本号,主要是指主版本号相同。相同版本号的MySQL数据库之间的迁移,主要是数据备份和数据恢复的组合。

//将www.xxx.com主机上的MySQL数据库全部迁移到www.yyy.com主机
//上,在www.xxx.com主机(即迁出主机)上执行如下命令。
//MySQLdump导出的数据直接通过管道符"|"传递给MySQL命令导入的主机
//如果要迁移全部的数据库,可使用参数--all-databases
mysqldump -h www.xxx.com -u user -p pwd dbname |
mysql -h www.bcd.com -u user -p pwd

2》不同版本的MySQL数据库之间的迁移

业务数据备份当然是很重要的。主要要注意的是老版本的权限控制信息、字符集等问题。存在中文数据的表特别要注意!

3》不同数据库之间的迁移

根据实际情况使用了。数据要保存,还有数据库之间对功能支持的差异,比如字段精度、支持的数据类型差异等。

MySQL-快速入门(12)备份、还原的更多相关文章

  1. MySql基础笔记(一)Mysql快速入门

    Mysql快速入门 一)基本概念 1)表 行被称为记录,是组织数据的单位.列被称为字段,每一列表示记录的一个属性. 2)主键 主键用于唯一的标识表中的每一条记录.可以定义表中的一列或者多列为主键, 但 ...

  2. MySQL 快速入门教程

    转:MySQL快速 入门教程 目录 一.MySQL的相关概念介绍 二.Windows下MySQL的配置 配置步骤 MySQL服务的启动.停止与卸载 三.MySQL脚本的基本组成 四.MySQL中的数据 ...

  3. MySQL 快速入门(一)

    目录 MySQL快速入门 简介 存储数据的演变过程 数据库分类 概念介绍 MySQL安装 MySQL命令初始 环境变量配置 MySQL环境变量配置 修改配置文件 设置新密码 忘记密码的情况 基本sql ...

  4. MySQL快速入门(二)

    目录 MySQL快速入门(二) 约束条件 自增 自增的特性 主键 外键 级联更新/删除 表与表之间的关系 外键约束 操作表方法 查询关键字 练习数据 select··from where 筛选 gro ...

  5. MYSQL的日志与备份还原

    一.错误日志 当数据库出现任何故障导致无法使用时,第一时间先去查看该日志 1.服务器启动关闭过程中的信息 2.服务器运行过程中的错误信息 日志存放路径,可以通过命令查看: 日志文件命名格式:host_ ...

  6. MySQL之mysqldump数据备份还原

    一 mysqldump指令实现数据备份.mysql指令实现数据还原 经常有朋友问我,DBA到底是做什么的,百科上说:数据库管理员(Database Administrator,简称DBA),是从事管理 ...

  7. python之路--MySQL权限管理 数据备份还原

    一 权限管理 mysql最高管理者是root用户, 这个一般掌握在公司DBA手里, 当你想去对数据库进行一些操作的时候,需要DBA授权给你. 1. 对新用户增删改 1. 创建用户 # 要先use my ...

  8. Mysql快速入门(看完这篇能够满足80%的日常开发)

    这是一篇mysql的学习笔记,整理结合了网上搜索的教程以及自己看的视频教程,看完这篇能够满足80%的日常开发了. 菜鸟教程:https://www.runoob.com/mysql/mysql-tut ...

  9. Mysql表复制及备份还原

    1.复制表结构   1.1 含有主键等信息的完整表结构   CREATE table 新表名 LIKE book;     1.2 只有表结构,没有主键等信息   create table 新表名 s ...

  10. MySQL - 日常操作二 备份还原

    登录mysql的命令 # 格式: mysql -h 主机地址 -u 用户名 -p 用户密码 mysql -h 110. -P3306 -uroot -p mysql -uroot -p -S /dat ...

随机推荐

  1. java.sql.SQLException: Access denied for user 'root'@'d001' (using password: YES)

    在安装CDH的时候报错了: root@d001:/var/cache//base# /opt/cm-/share/cmf/schema/scm_prepare_database.sh mysql cd ...

  2. requests 模块例题示范

    requests 模块 re模块和requests模块结合示范实例 .*? 不加圆括号表示在要匹配里面的内容不要: (.*?)表示在要匹配的两者之间的内容都要: import requests imp ...

  3. python接口自动化一(发送get请求)

    一.环境安装 1.用pip安装requests模块 >>pip install requests 二.get请求 1.导入requests后,用get方法就能直接访问url地址,如:htt ...

  4. The Preliminary Contest for ICPC Asia Shanghai 2019 J. Stone game

    题目:https://nanti.jisuanke.com/t/41420 思路:当a(a∈S′)为最小值 如果Sum(S′)−a≤Sum(S−S′)成立 那么(∀t∈S′,Sum(S′)−t≤Sum ...

  5. 19. ClustrixDB 执行计划解读

    EXPLAIN语句用于显示ClustrixDB查询优化器(也称为Sierra)如何执行INSERT.SELECT.UPDATE和DELETE语句.EXPLAIN的输出有三列: Operation - ...

  6. eclipse在线安装ermaster插件

    eclipse在线安装ermaster插件: https://www.jianshu.com/p/449fbcd9141a ERMaster的安装和使用 https://www.cnblogs.com ...

  7. XML DOM (Document Object Model) 定义了访问和操作 XML 文档的标准方法。

    XML DOM DOM 把 XML 文档视为一种树结构.通过这个 DOM 树,可以访问所有的元素.可以修改它们的内容(文本以及属性),而且可以创建新的元素.元素,以及它们的文本和属性,均被视为节点. ...

  8. Codeforces 962D Merge Equals ( 模拟 )

    题意 : 给出一个序列,然后每次将重复出现的元素进行求和合并(若有多个,则优先取最小的进行合并),若某重复元素有很多,那么取最左边的那两个进行合并且合并后元素位于原来右边元素的位置,例如 3 2 6 ...

  9. SQL 行转列(列的值不规则的数目)

    --创建一个临时表用来存储数据 create table #tmp_SNValue_Table (FieldName nvarchar(20), [Value] nvarchar(max)) inse ...

  10. Codechef SEAARC Sereja and Arcs (分块、组合计数)

    我现在真的什么都不会了呢...... 题目链接: https://www.codechef.com/problems/SEAARC 好吧,这题其实考察的是枚举的功力-- 题目要求的是\(ABAB\)的 ...