MySQL具体解释(20)-----------数据库备份和还原
数据备份:
使用mysqldump命令备份
mysqldump命令能够讲数据库中的数据备份成一个文本文件。
表结果和表中的数据将存储在生成的文本中。mysqldump的工作原理非常easy。
他先查出须要备份的表结构,在在文本中文件里生存一个create语句,然后,将表中的全部记录转换成一条insert语句,这些create语句和insert语句都是还原时使用。还原数据时就能够使用当中的create语句来创建表,使用当中的insert语句来还原数据。
mysqldump -h主机名 -Pport -uusername -ppassword (–database) 数据库名 > 文件名称.sql
备份MySQL数据库的命令
mysqldump -hhostname -uusername -ppassword databasename > backupfile.sql
备份MySQL数据库为带删除表的格式,可以让该备份覆盖已有数据库而不须要手动删除原有数据库。
mysqldump -–add-drop-table -uusername -ppassword databasename > backupfile.sql
直接将MySQL数据库压缩备份
mysqldump -hhostname -uusername -ppassword databasename | gzip > backupfile.sql.gz
备份MySQL数据库某个(些)表
mysqldump -hhostname -uusername -ppassword databasename specific_table1 specific_table2 > backupfile.sql
同一时候备份多个MySQL数据库
mysqldump -hhostname -uusername -ppassword –databases databasename1 databasename2 databasename3 > multibackupfile.sql
只备份数据库结构
mysqldump –no-data –databases databasename1 databasename2 databasename3 > structurebackupfile.sql
备份server上全部数据库
mysqldump –all-databases > allbackupfile.sql
还原MySQL数据库的命令
mysql -hhostname -uusername -ppassword databasename < backupfile.sql
还原压缩的MySQL数据库
gunzip < backupfile.sql.gz | mysql -uusername -ppassword databasename
将数据库转移到新server
mysqldump -uusername -ppassword databasename | mysql –host=*.*.*.* -C databasename
===============================================================
JAVA代码调用命令的方法
<span style="font-size:18px;">Process p = Runtime.getRuntime().exec("cmd /c mysqldump -h127.0.0.1 -P3306 -uroot -p123456 customer > d:/opt/customer/dbback/backupfile-1351022418812.sql");
// 等待编译结束
p.waitFor();
// 检查返回码,看编译是否出错。 int ret = p.exitValue();
System.out.println(ret);</span>
MySQL命令行导入数据库:
1,将要导入的.sql文件移至bin文件下。这种路径比較方便
2,同上面导出的第1步
3,进入MySQL:mysql -u username -p
如我输入的命令行:mysql -u root -p?
? (输入相同后会让你输入MySQL的password)
4,在MySQL-Front中新建你要建的数据库。这时是空数据库,如新建一个名为news的目标数据库
5,输入:mysql>use 目标数据库名
如我输入的命令行:mysql>use news;
6。导入文件:mysql>source 导入的文件名称;
如我输入的命令行:mysql>source news.sql;
MySQL备份和还原,都是利用mysqldump、mysql和source命令来完毕的。
1.Win32下MySQL的备份与还原
1.1 备份
開始菜单 | 执行 | cmd |利用“cd \Program Files\MySQL\MySQL Server 5.0\bin”命令进入bin目录 | 利用“mysqldump? -u username -p databasename >exportfilename”导出数据库到文件,如mysqldump -u root -p voice>voice.sql,然后输入password就可以開始导出。
1.2 还原
进入MySQL Command Line Client,输入password,进入到“mysql>”,输入命令"show databases。",回车,看看有些什么数据库。建立你要还原的数据库,输入"create database voice;",回车;切换到刚建立的数据库,输入"use voice。",回车;导入数据。输入"source voice.sql;"。回车。開始导入,再次出现"mysql>"而且没有提示错误即还原成功。
2.Linux下MySQL的备份与还原
2.1 备份
[root@localhost ~]# cd /var/lib/mysql (进入到MySQL库文件夹,依据自己的MySQL的安装情况调整文件夹)
[root@localhost mysql]# mysqldump -u root -p voice>voice.sql。输入password就可以。
2.2 还原
法一:
[root@localhost ~]# mysql -u root -p 回车。输入password,进入MySQL的控制台"mysql>",同1.2还原。
法二:
[root@localhost ~]# cd /var/lib/mysql (进入到MySQL库文件夹,依据自己的MySQL的安装情况调整文件夹)
[root@localhost mysql]# mysql -u root -p voice<voice.sql,输入password就可以。
以下是版本号2:假设上面不明确的话。能够看以下的解说
1、mysqldump
1.1 备份
mysqldump
是採用SQL级别的备份机制,它将数据表导成 SQL 脚本文件,在不同的 MySQL 版本号之间升级时相对照较合适。这也是最经常使用的备份方法。
如今来讲一下 mysqldump
的一些主要參数:
- --compatible=name
它告诉 mysqldump,导出的数据将和哪种数据库或哪个旧版本号的 MySQL server相兼容。值能够为
ansi、mysql323、mysql40、postgresql、oracle、mssql、db2、maxdb、no_key_options、no_tables_options、no_field_options
等。要使用几个值。用逗号将它们隔开。当然了。它并不保证能全然兼容。而是尽量兼容。 - --complete-insert,-c
导出的数据採用包括字段名的完整
INSERT
方式,也就是把全部的值都写在一行。这么做能提高插入效率。可是可能会受到
max_allowed_packet
參数的影响而导致插入失败。因此,须要慎重使用该參数,至少我不推荐。
- --default-character-set=charset
指定导出数据时採用何种字符集,假设数据表不是採用默认的
latin1
字符集的话。那么导出时必须指定该选项。否则再次导入数据后将产生乱码问题。 - --disable-keys
告诉
mysqldump
在
INSERT
语句的开头和结尾添加/*!40000 ALTER TABLE table DISABLE KEYS */;
和
/*!40000 ALTER TABLE table ENABLE KEYS */;
语句。这能大大提高插入语句的速度,由于它是在插入全然部数据后才重建索引的。该选项仅仅适合
MyISAM
表。 - --extended-insert = true|false
默认情况下。
mysqldump
开启
--complete-insert
模式。因此不想用它的的话,就使用本选项,设定它的值为
false
就可以。 - --hex-blob
使用十六进制格式导出二进制字符串字段。假设有二进制数据就必须使用本选项。
影响到的字段类型有
。
BINARY、VARBINARY、BLOB - --lock-all-tables,-x
在開始导出之前,提交请求锁定全部数据库中的全部表,以保证数据的一致性。这是一个全局读锁,而且自己主动关闭
--single-transaction
和
选项。
--lock-tables - --lock-tables
它和
--lock-all-tables
类似,只是是锁定当前导出的数据表。而不是一下子锁定所有库下的表。本选项仅仅适用于
MyISAM
表,假设是Innodb
表能够用
--single-transaction
选项。 - --no-create-info,-t
仅仅导出数据。而不加入
CREATE TABLE
语句。 - --no-data,-d
不导出不论什么数据,仅仅导出数据库表结构。
- --opt
这仅仅是一个快捷选项。等同于同一时候加入
--add-drop-tables --add-locking --create-option --disable-keys --extended-insert --lock-tables --quick --set-charset
选项。本选项能让
mysqldump
非常快的导出数据。而且导出的数据能非常快导回。该选项默认开启。但能够用
--skip-opt
禁用。注意。假设执行
没有指定
mysqldump--quick
或
--opt
选项,则会将整个结果集放在内存中。假设导出大数据库的话可能会出现故障。 - --quick。-q
该选项在导出大表时非常实用。它强制
mysqldump
从server查询取得记录直接输出而不是取得全部记录后将它们缓存到内存中。 - --routines。-R
导出存储过程以及自己定义函数。
- --single-transaction
该选项在导出数据之前提交一个
BEGIN
SQL语句,BEGIN
不会堵塞不论什么应用程序且能保证导出时数据库的一致性状态。它仅仅适用于事务表,比如
InnoDB
和BDB
。
本选项和--lock-tables
选项是相互排斥的,由于
LOCK TABLES
会使不论什么挂起的事务隐含提交。
要想导出大表的话,应结合使用--quick
选项。 - --triggers
同一时候导出触发器。该选项默认启用,用
--skip-triggers
禁用它。
其它參数详情请參考手冊。我通常使用下面 SQL 来备份 MyISAM
表:
/usr/local/mysql/bin/mysqldump -uyejr -pyejr \
--default-character-set=utf8 --opt --extended-insert=false \
--triggers -R --hex-blob -x db_name > db_name.sql
使用下面 SQL 来备份 Innodb
表:
/usr/local/mysql/bin/mysqldump -uyejr -pyejr \
--default-character-set=utf8 --opt --extended-insert=false \
--triggers -R --hex-blob --single-transaction db_name > db_name.sql
另外,假设想要实如今线备份,还能够使用 --master-data
參数来实现,例如以下:
/usr/local/mysql/bin/mysqldump -uyejr -pyejr \
--default-character-set=utf8 --opt --master-data=1 \
--single-transaction --flush-logs db_name > db_name.sql
它仅仅是在一開始的瞬间请求锁表,然后就刷新binlog了,而后在导出的文件里增加CHANGE MASTER
语句来指定当前备份的binlog位置,假设要把这个文件恢复到slave里去,就能够採用这样的方法来做。
1.2 还原
用 mysqldump
备份出来的文件是一个能够直接倒入的 SQL 脚本,有两种方法能够将数据导入。
- 直接用
mysql
client比如:
/usr/local/mysql/bin/mysql -uyejr -pyejr db_name < db_name.sql
- 用 SOURCE 语法
事实上这不是标准的 SQL 语法,而是
mysql
client提供的功能。比如:SOURCE /tmp/db_name.sql;
这里须要指定文件的绝对路径,而且必须是
mysqld
执行用户(比如 nobody)有权限读取的文件。
2、 mysqlhotcopy
2.1 备份
mysqlhotcopy
是一个 PERL 程序,最初由Tim Bunce编写。
它使用
LOCK TABLES、FLUSH TABLES
和
或
cpscp
来高速备份数据库。它是备份数据库或单个表的最快的途径。但它仅仅能执行在数据库文件(包含数据表定义文件、数据文件、索引文件)所在的机器上。mysqlhotcopy
仅仅能用于备份
MyISAM
,而且仅仅能执行在 类Unix
和
NetWare
系统上。
mysqlhotcopy
支持一次性拷贝多个数据库,同一时候还支持正则表达。下面是几个样例:
root#/usr/local/mysql/bin/mysqlhotcopy -h=localhost -u=yejr -p=yejr \
db_name /tmp (把数据库文件夹 db_name 复制到 /tmp 下)
root#/usr/local/mysql/bin/mysqlhotcopy -h=localhost -u=yejr -p=yejr \
db_name_1 ... db_name_n /tmp
root#/usr/local/mysql/bin/mysqlhotcopy -h=localhost -u=yejr -p=yejr \
db_name./regex/ /tmp
更具体的用法请查看手冊,或者调用以下的命令来查看 mysqlhotcopy
的帮助:
perldoc /usr/local/mysql/bin/mysqlhotcopy
注意,想要使用 mysqlhotcopy
,必需要有
SELECT、RELOAD(要运行 FLUSH TABLES)
权限。而且还必需要可以有读取
datadir/db_name 文件夹的权限。
2.2 还原
mysqlhotcopy
备份出来的是整个数据库文件夹,使用时能够直接复制到
mysqld
指定的 datadir (在这里是
/usr/local/mysql/data/)文件夹下就可以,同一时候要注意权限的问题。例如以下例:
root#cp -rf db_name /usr/local/mysql/data/
root#chown -R nobody:nobody /usr/local/mysql/data/ (将 db_name 文件夹的属主改成mysqld
执行用户)
3、 SQL 语法备份
3.1 备份
BACKUP TABLE
语法事实上和
mysqlhotcopy
的工作原理差点儿相同,都是锁表,然后拷贝数据文件。
它能实如今线备份。可是效果不理想。因此不推荐使用。它仅仅拷贝表结构文件和数据文件,不同一时候拷贝索引文件。因此恢复时比較慢。
样例:
BACK TABLE tbl_name TO '/tmp/db_name/';
注意。必需要有 FILE
权限才干运行本SQL。而且文件夹
/tmp/db_name/ 必须能被 mysqld
用户可写。导出的文件不能覆盖已经存在的文件,以避免安全问题。
SELECT INTO OUTFILE
则是把数据导出来成为普通的文本文件。能够自己定义字段间隔的方式,方便处理这些数据。
样例:
SELECT * INTO OUTFILE '/tmp/db_name/tbl_name.txt' FROM tbl_name;
注意。必需要有 FILE
权限才干运行本SQL,而且文件
/tmp/db_name/tbl_name.txt 必须能被
用户可写,导出的文件不能覆盖已经存在的文件,以避免安全问题。
mysqld
3.2 恢复
用 BACKUP TABLE
方法备份出来的文件,能够执行
RESTORE TABLE
语句来恢复数据表。
样例:
RESTORE TABLE FROM '/tmp/db_name/';
权限要求类似上面所述。
用 SELECT INTO OUTFILE
方法备份出来的文件。能够执行
LOAD DATA INFILE
语句来恢复数据表。
样例:
LOAD DATA INFILE '/tmp/db_name/tbl_name.txt' INTO TABLE tbl_name;
权限要求类似上面所述。
倒入数据之前,数据表要已经存在才行。假设操心数据会发生反复。能够添加
keyword来替换已有记录或者用
REPLACEIGNORE
keyword来忽略他们。
4、 启用二进制日志(binlog)
採用 binlog
的方法相对来说更灵活,省心省力。并且还能够支持增量备份。
启用 binlog
时必需要重新启动
mysqld
。首先。关闭 mysqld
。打开
my.cnf
,增加下面几行:
server-id = 1
log-bin = binlog
log-bin-index = binlog.index
然后启动 mysqld
就能够了。
执行过程中会产生
binlog.000001
以及 binlog.index
。前面的文件是
mysqld
记录全部对数据的更新操作,后面的文件则是全部
binlog
的索引。都不能轻易删除。
关于
的信息请查看手冊。
binlog
须要备份时。能够先运行一下 SQL 语句。让 mysqld
终止对当前
binlog
的写入,就能够把文件直接备份。这种话就能达到增量备份的目的了:
FLUSH LOGS;
假设是备份复制系统中的从server。还应该备份 master.info 和
relay-log.info 文件。
备份出来的 binlog
文件能够用 MySQL 提供的工具
mysqlbinlog
来查看,如:
/usr/local/mysql/bin/mysqlbinlog /tmp/binlog.000001
该工具同意你显示指定的数据库下的全部 SQL 语句。而且还能够限定时间范围。相当的方便。具体的请查看手冊。
恢复时。能够採用类似下面语句来做到:
/usr/local/mysql/bin/mysqlbinlog /tmp/binlog.000001 | mysql -uyejr -pyejr db_name
把 mysqlbinlog
输出的 SQL 语句直接作为输入来运行它。
假设你有空暇的机器,最好还是採用这样的方式来备份。因为作为 slave
的机器性能要求相对不是那么高,因此成本低,用低成本就能实现增量备份并且还能分担一部分数据查询压力,何乐而不为呢?
5、 直接备份数据文件
相较前几种方法。备份数据文件最为直接、高速、方便,缺点是基本上不能实现增量备份。
为了保证数据的一致性,须要在靠背文件前。运行下面 SQL 语句:
FLUSH TABLES WITH READ LOCK;
也就是把内存中的数据都刷新到磁盘中,同一时候锁定数据表。以保证拷贝过程中不会有新的数据写入。这样的方法备份出来的数据恢复也非常easy,直接拷贝回原来的数据库文件夹下就可以。
注意,对于 Innodb
类型表来说。还须要备份其日志文件,即
ib_logfile*
文件。由于当 Innodb
表损坏时。就能够依靠这些日志文件来恢复。
6、 备份策略
对于中等级别业务量的系统来说。备份策略能够这么定:第一次全量备份,每天一次增量备份,每周再做一次全量备份,如此一直反复。而对于重要的且繁忙的系统来说,则可能须要每天一次全量备份。每小时一次增量备份,甚至更频繁。
为了不影响线上业务,实如今线备份,而且能增量备份,最好的办法就是採用主从复制机制(replication
)。在
slave
机器上做备份。
7、 数据维护和灾难恢复
作为一名DBA(我眼下还不是,呵呵)。最重要的工作内容之中的一个是保证数据表能安全、稳定、快速使用。
因此。须要定期维护你的数据表。下面 SQL 语句就非常实用:
CHECK TABLE 或 REPAIR TABLE,检查或维护 MyISAM 表
OPTIMIZE TABLE,优化 MyISAM 表
ANALYZE TABLE,分析 MyISAM 表
当然了。上面这些命令起始都能够通过工具 myisamchk
来完毕,在这里不作详述。
Innodb
表则能够通过运行下面语句来整理碎片。提高索引速度:
ALTER TABLE tbl_name ENGINE = Innodb;
这事实上是一个 NULL
操作。表面上看什么也不做,实际上又一次整理碎片了。
通常使用的 MyISAM
表能够用上面提到的恢复方法来完毕。假设是索引坏了,能够用
myisamchk
工具来重建索引。
而对于
表来说,就没这么直接了。由于它把全部的表都保存在一个表空间了。
Innodb
只是
Innodb
有一个检查机制叫 模糊检查点
,仅仅要保存了日志文件,就能依据日志文件来修复错误。能够在
my.cnf 文件里,添加下面參数,让 mysqld
在启动时自己主动检查日志文件:
innodb_force_recovery = 4
关于该參数的信息请查看手冊。
8、 总结
做好数据备份,定仅仅好合适的备份策略,这是一个DBA所做事情的一小部分,万事开头难。就从如今開始吧。
MySQL具体解释(20)-----------数据库备份和还原的更多相关文章
- MySQL进阶:约束,多表设计,多表查询,视图,数据库备份与还原
MySQL进阶 知识点梳理 一.约束 1. 外键约束 为什么要有外键约束 例如:一个user表,一个orderlist 如果现在想要直接删除id为1的张三,但是orderlist里还有用户id为1的订 ...
- Mysql数据库备份和还原常用的命令
Mysql数据库备份和还原常用的命令是进行Mysql数据库备份和还原的关键,没有命令,什么都无从做起,更谈不上什么备份还原,只有给系统这个命令,让它去执行,才能完成Mysql数据库备份和还原的操作,下 ...
- [转]MySQL数据库备份和还原的常用命令小结
MySQL数据库备份和还原的常用命令小结,学习mysql的朋友可以参考下: 备份MySQL数据库的命令 mysqldump -hhostname -uusername -ppassword datab ...
- sql操作数据库(2)--->DQL、数据库备份和还原
查询 查询表中的所有的行和列的数据 select * from 表名; select * from student; 查询指定列的数据:如果有多个列,中间用逗号隔开. select 列名1,列 ...
- C#.NET SQL数据库备份与还原解决方案
C#.NET SQL数据库备份与还原解决方案http://www.csframework.com/archive/1/arc-1-20110924-1841.htm 开发框架V2.2(快速开发版)系统 ...
- 【C#】数据库备份及还原的实现代码【转载】
[转载]http://www.codesky.net/article/200908/128600.html C#数据库备份及还原1.在用户的配置时,我们需要列出当前局域网内所有的数据库服务器,并且要列 ...
- SQL Server 2008数据库备份和还原(还原是必须有完整备份)
转自lwccc, SQLserver2008数据库备份和还原问题(还原是必须有完整备份) 首先,我要说明的是你必须拥有完整的数据库备份,下面的还原教程,才算有用. 这个连接是某高手的异常恢复方法, 实 ...
- PCB MongoDB数据库 备份与还原
一. MongoDB数据库 备份与还原工具介绍: 数据备份工具 mongodump.exe 数据还原工具 mongorestore.exe 二. MongoDB数据库备份 mongodump - ...
- 批处理(bat)实现SQLServer数据库备份与还原
原文:批处理(bat)实现SQLServer数据库备份与还原 备份数据库.bat @echo off set path=%path%;C:\Program Files (x86)\Microsoft ...
- 【RAC】rac环境下的数据库备份与还原
[RAC]rac环境下的数据库备份与还原 一.1 BLOG文档结构图 一.2 前言部分 一.2.1 导读 各位技术爱好者,看完本文后,你可以掌握如下的技能,也可以学到一些其它你所不知道的知识,~ ...
随机推荐
- 修正ECMALL在PHP5.3以上版本中无法开启支付方式的BUG
修正ECMALL在PHP5.3以上版本中无法开启支付方式的BUG 很多用户反映说PHP5.3.3下,ECMALL的商家无法安装支付方式,这个是比较严重的事情,不能安装支付方式那什么都不能干呢,那我就免 ...
- 关于appStore不显示构建版本的问题
近日往AppStore上跟新一个版本,提交了好几次,每次都提交成功了,但是在iTunes Contacts上一直没有看到可选的构建版本,也没看到有邮件的反馈,纳闷了好久都不知道是什么鬼原因,后面发现是 ...
- linux学习笔记10---命令nl
nl命令在linux系统中用来计算文件中行号.nl 可以将输出的文件内容自动的加上行号! nl命令读取 file 参数(缺省情况下标准输入),计算输入中的行号,将计算过的行号写入标准输出.在输出中,n ...
- spring-common.xml
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.sp ...
- apache ab测试
网站并发测试,网站服务使用的是apache2.4 因此使用ab来测试网站性能. windows使用cms 打开apache/bin 运行ab.exe (......../apache/bin/ab), ...
- poj3680 Intervals 区间k覆盖问题 最小费用最大流 建图巧妙
/** 题目:poj3680 Intervals 区间k覆盖问题 最小费用最大流 建图巧妙 链接:http://poj.org/problem?id=3680 题意:给定n个区间,每个区间(ai,bi ...
- 微信小程序 js逻辑
}) 页面 Page() 函数用来注册一个页面.接受一个 object 参数,其指定页面的初始数据.生命周期函数.事件处理函数等. data 页面的初始数据,data 将会以 JSON 的形式由逻辑层 ...
- 自定义select模拟--基于jQuery
说明 模拟select,实现原生select不能实现的样式 将html结构入在Html页面中,css,js做分离 开发人员引用只要引入相关文件,并$().selectbox()就可转换样式,有更新 ...
- Zookeeper 报ConnectionLostException连接丢失错误汇总
我google出来的几个结果都没有用,这里写出来或许可以帮助别人,这些都是google出来的结果,没有经过验证是否真的能够解决问题. 当前zookeeper的连接状态是connecting,这个时候连 ...
- kafka2:常用topic命令
常用操作 创建一个topic bin/kafka-topics.sh --create --zookeeper 192.168.3.230:2181 --replication-factor 3 -- ...