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