MySQL数据库入门——备份数据库

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

简单的备份脚本

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

猜你喜欢

转载自www.cnblogs.com/alter888/p/11130403.html