mysqldump可以针对单个表、多个表、单个数据库、多个数据库、所有数据库进行导出的操作
mysqldump常用选项
-h, --host=name:服务器IP
-u, --user=name:登录名
-p, --password[=name]:登录密码
-A, --all-databases:导出所有数据库
-B, --databases:导出指定的数据库,多个数据库名使用空格分割
--tables:导出指定表
-d, --no-data:仅导出表结构,不导出数据
-t, --no-create-info:不导出表创建语句
-n, --no-create-db:不导出CREATE DATABASE IF EXISTS语句
-e, --extended-insert:将多条记录合并成一条INSERT语句来提高插入效率
--add-drop-table:在创建表之前加入DROP TABLE语句
--hex-blob :将二进制的数据以16进制导出
-R, --routines:导出存储过程和存储函数
--triggers:导出触发器
单库备份
mysqldump -uroot -p test >/download/testbak_$(date +%F).sql
Enter password:
ll /download/
-B 恢复时会自动创建库
-B参数的作用,就是当我们的数据库丢失时,可以直接用此备份文件进行恢复,无需再重新建库、建表,然后再进行数据恢复的操作
mysqldump -uroot -p -B test >/download/testbak_$(date +%F)_b.sql
压缩备份
mysqldump -uroot -p -B test|gzip >/download/testbak_$(date +%F).sql.gz
单表备份
mysqldump -uroot -p -B test test >/download/test_testbak_$(date +%F).sql
只备份表结构
mysqldump --no-data --databases mydatabase1 mydatabase2 mydatabase3 > test.dump
1.备份全部数据库的数据和结构
mysqldump -uroot -p123456 -A >F:\all.sql
2.备份全部数据库的结构(加 -d 参数)
mysqldump -uroot -p123456 -A-d>F:\all_struct.sql
3.备份全部数据库的数据(加 -t 参数)
mysqldump -uroot -p123456 -A-t>F:\all_data.sql
4.备份单个数据库的数据和结构(,数据库名mydb)
mysqldump -uroot-p123456 mydb>F:\mydb.sql
5.备份单个数据库的结构
mysqldump -uroot -p123456 mydb-d>F:\mydb.sql
6.备份单个数据库的数据
mysqldump -uroot -p123456 mydb-t>F:\mydb.sql
7.备份多个表的数据和结构(数据,结构的单独备份方法与上同)
mysqldump -uroot -p123456 mydb t1 t2>f:\multables.sql
8.一次备份多个数据库
mysqldump -uroot -p123456 --databases db1 db2>f:\muldbs.sql
不退出数据库,完成备份test数据库
system mysqldump -uroot -ppassword -B test>/root/test_bak.sql
简单的备份脚本
bak.sh
#!/bin/sh
ip=`grep 'IPADDR' /etc/sysconfig/network-scripts/ifcfg-eth0|awk -F "=" '{print $2}'`
#定义服务器IP变量
BAKDIR=/backup
#定义备份路径
[ ! -d $BAKDIR/${ip} ] && mkdir -p $BAKDIR/${ip}
#判断如果不存在这个路径就创建一个,为了服务器多的时候方便看
DB_PWD="123456"
DB_USER="root"
MYSQL="/application/mysql/bin/mysql"
MYSQL_DUMP="/application/mysql/bin/mysqldump"
DATA=`date +%F`
####bak data of test's databses####
DB_NAME=`$MYSQL -u$DB_USER -p$DB_PWD -e "show databases;"|sed '1,5d'`
#定义数据库变量
for name in $DB_NAME
#for循环语句取库名
do
$MYSQL_DUMP -u$DB_USER -p$DB_PWD -B ${name} |gzip >$BAKDIR/${ip}/${name}_$DATA.sql.gz
#全库备份
[ ! -d $BAKDIR/${ip}/${name} ] && mkdir -p $BAKDIR/${ip}/${name}
#判断这个路径,为了区别哪个库的备份文件
for tablename in `$MYSQL -u$DB_USER -p$DB_PWD -e "show tables from ${name};"|sed '1d'`
#for循环语句取表名
do
$MYSQL_DUMP -u$DB_USER -p$DB_PWD ${name} ${tablename} |gzip >$BAKDIR/${ip}/${name}/${tablename}_$DATA.sql.gz
#分表备份
done
done
backup.sh
#vi /backup/backup.sh
#!bin/bash
cd /backup
echo "You are in backup dir"mv backup* /oldbackup
echo "Old dbs are moved to oldbackup folder"
File = backup-$Now.sql
mysqldump -u user -p password database-name > $File
echo "Your database backup successfully completed"
上面脚本文件保存为backup.sh,并且系统中已经创建两个目录/olcbackup和/backup。每次执行backup.sh时都会先将/backup目录下所有名称为backup开头的文件移到/oldbackup目录。
为上述脚本制定执行计划如下:
#crontab -e
30 1 * * * /backup.sh
结合Linux的cron命令实现定时备份
比如需要在每天凌晨1:30备份某个主机上的所有数据库并压缩dump文件为gz格式,那么可在/etc/crontab配置文件中加入下面代码行:
30 1 * * * root mysqldump -u root -pPASSWORD --all-databases | gzip > /mnt/disk2/database_`date '+%m-%d-%Y'`.sql.gz
还原
还原部分分(1)mysql命令行source方法 和 (2)系统命令行方法
1.还原全部数据库:
(1) mysql命令行:mysql>source f:\all.sql
(2) 系统命令行: mysql -uroot -p123456 <f:\all.sql
2.还原单个数据库(需指定数据库)
(1) mysql>use mydb
mysql>source f:\mydb.sql
(2) mysql -uroot -p123456 mydb <f:\mydb.sql
3.还原单个数据库的多个表(需指定数据库)
(1) mysql>use mydb
mysql>source f:\multables.sql
(2) mysql -uroot -p123456 mydb<f:\multables.sql
4.还原多个数据库,(一个备份文件里有多个数据库的备份,此时不需要指定数据库)
(1) mysql命令行:mysql>source f:\muldbs.sql
(2) 系统命令行: mysql -uroot -p123456<f:\muldbs.sql