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
阶段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
原文:http://www.linuxidc.com/Linux/2013-02/79793.htm