当前位置: > 数据库 > MySQL >

MySQL的备份与还原

时间:2018-05-30 11:54来源:linux.it.net.cn 作者:IT

MySQL备份和还原,都是利用mysqldump、mysql和source命令来完成的。
1.Win32下MySQL的备份与还原 
1.1 备份 
开始菜单 | 运行 | cmd |利用“cd /Program Files/MySQL/MySQL Server 5.0/bin”命令进入bin文件夹 | 利用“mysqldump  -u 用户名 -p databasename >exportfilename”导出数据库到文件,如mysqldump -u root -p voice>voice.sql,然后输入密码即可开始导出。
  
1.2 还原 
进入MySQL Command Line Client,输入密码,进入到“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,输入密码即可。

2.2 还原
法一:
[root@localhost ~]# mysql -u root -p 回车,输入密码,进入MySQL的控制台"mysql>",同1.2还原。

法二:
[root@localhost ~]# cd /var/lib/mysql (进入到MySQL库目录,根据自己的MySQL的安装情况调整目录) 
[root@localhost mysql]# mysql -u root -p voice<voice.sql,输入密码即可。

从压缩文件中还原

[root@localhost mysql]# gunzip < alldatabases.sql.gz | mysql -uroot -p dbname

原文:http://blog.csdn.net/quietprofound/article/details/2947197

 

 

阶段1:傻瓜式全备份
 
mysqldump -h ip地址 -uusername -ppassword -A >~/name.sql
 
此种情况将整个数据库(结构和数据)导出备份成一个sql文件
 
阶段2:适当的调整参数达到不同的备份效果
 
我们先help一下
 
mysqldump --help
 
由于help输出过多就不一一列举出来了
 
 
 
通过远程连接备份 
 
-h 需要备份服务器的地址 
 
-u 允许远程连接的账号 
 
-p允许远程连接账号的密码 
 
-A 全备份
 
 
 
常用参数的说明
 
-A, --all-databases 备份所有数据库
 
--add-drop-database 在每个create database 语句之前增加一个drop database。
 
--add-drop-table 在每个create table 语句之前增加一个drop table。
 
--add-locks 在每个表导出之前增加LOCK TABLES并且之后UNLOCK TABLE。(为了使得更快地插入到MySQL)
 
--default-character-set=name 设置导出数据的字符集
 
--opt  同--quick --add-drop-table --add-locks --extended-insert --lock-tables。应该给你为读入一个MySQL服务器的尽可能最快的导出。
 
-e, --extended-insert  使用全新多行INSERT语法。(给出更紧缩并且更快的插入语句)。生成的文件insert语句中回事批量的,提高导入时的速度
 
--hex-blob 使用十六进制格式导出二进制字符串字段。如果有二进制数据就必须使用本选项。影响到的字段类型有 BINARY、VARBINARY、BLOB。
 
--quick,-q 该选项在导出大表时很有用,它强制 mysqldump 从服务器查询取得记录直接输出而不是取得所有记录后将它们缓存到内存中
 
-t, --no-create-info 只导出数据
 
-d, --no-data 只导出结构
 
阶段3:备份制定定数据库和制定数据库的某个表
 
mysqldump -h ip地址 -uusername -ppassword databasename >~/name.sql
 
mysqldump -h ip地址 -uusername -ppassword databasename tablename >~/name.sqllinux

阶段4.1:

通过读取文本来分库备份数据库成不同的sql文件

例如我们分别有数据库db1 db2 db3 db4 db5。。。。。。db100当我们每个库数据量都不小的时候需要按数据库分别备份,

我们也不可能100个库分别写成100个备份的脚本运行,这样我们就需要结合shell脚本中的循环语句来操作

cat filename.txt |while read i

do

备份脚本,例如:mysqldump -h ip地址 -uusername -ppassword $i >~/name.sql

done

其中filename.txt中保存数据库的库名,每行一个。

通过这样的做法再结合linux的crond服务我们就可以自动备份了

阶段4.2

如果需要分库分表备份那该这么办呢

这时候做法和分库的时候一样,分别按每个库生成相应表的表明文件一行一个分别命名为db1.txt db2.txt db3.txt db4.txt db5.txt。。。。。。。db100.txt

通过两次循环分别进行分库分表的备份



cat filename.txt |while read i

do

mkdir $i

cat $i.txt|while read a

do

备份脚本,例如:mysqldump -h ip地址 -uusername -ppassword $i $a >$i/$a.sql

done

done

当然我们有时候需要记录下备份的时间

fn=$(date +"%Y-%m-%d_%H:%M")



cat filename.txt |while read i

do

mkdir $i

cat $i.txt|while read a

do

备份脚本,例如:mysqldump -h ip地址 -uusername -ppassword $i $a >$i/$a$fn.sql

done

done

阶段5:

经过第4阶段之后我们的备份更加细致,那部分的数据出问题我们就恢复那部分的(虽然颗粒度还是有些粗)

但是我们是不是觉得第4阶段的备份还是很复杂,例如我们存库名和表明的文件就是一个庞大的工程,新建库我们得在库文件中添加一行

新建表我们得到某个库下面的表的文件中添加一条,这样既繁琐又容易出错,而且容易忘记,维护起来很麻烦。

现在我们有个办法可以让他自动列出库和库下的表

mysql -e

执行

mysql -e "show databases"

得到如下结果

+--------------------+

| Database |

+--------------------+

| information_schema |

| mysql |

| performance_schema |

| test |

+--------------------+

但是这样的结果我们没法用,所需要去掉外围的条条框框的东西

mysql -e "show databases"|sed '1d'

information_schema

mysql

performance_schema

test



for db in `mysql -e "show databases"|sed '1d'`

do

备份脚本,例如:mysqldump -h ip地址 -uusername -ppassword $db >name.sql

done

参照这个我们同样可以分库分表备份

mysql databasename -e "show tables"|sed '1d'
 
fn=$(date +"%Y-%m-%d_%H:%M")

for db in `mysql -e "show databases"|sed '1d'`

do

mkdir $db

for tables in `mysql $db -e "show tables"|sed '1d'`

do

备份脚本,例如:mysqldump -h ip地址 -uusername -ppassword $db $tables >$db/$tables$fn.sql

done

done 




(责任编辑:IT)
------分隔线----------------------------
栏目列表
推荐内容