study-24: Mysql数据库的备份与恢复

一,备份单个数据库练习多种参数使用

1,mysql数据库自带一个很好用的备份命令,就是mysqldump,他的基本使用如下:

1)语法:mysqldump -u 用户名  -p 数据库名 >  备份的文件名

备份:mysqldump -uroot -p123456 -S /data/3306/mysql.sock www> /opt/mysql_bak.sql

恢复:mysql -uroot -p123456 -S /data/3306/mysql.sock www< /opt/mysql_bak.sql


2)加-B参数进行备份,可以添加创建数据库的SQL语句(加-B还可以后面跟多个数据库名,进行多数据库的备份):

> CREATE DATABASE /*!32312 IF NOT EXISTS*/ `www` /*!40100 DEFAULT CHARACTER SET utf8 */;

> USE `www`;

例如:

备份:mysqldump -uroot -p123456 -S /data/3306/mysql.sock -B www> /opt/mysql_bak_B.sql

恢复:mysql -uroot -p123456 -S /data/3306/mysql.sock < /opt/mysql_bak_B.sql


3)指定gzip压缩命令 (通过gunzip解压)

mysqldump -uroot -p123456 -S /data/3306/mysql.sock -B www | gzip > /opt/mysql_bak_B.sql.gz


2,mysqldump原理

1)通过生成SQL语句,进行数据的逻辑备份


2)指定-B参数,备份多个库

mysqldump -uroot -p123456 -S /data/3306/mysql.sock -B www  bbs  blog> /opt/mysql_bak_B.sql


3,如何做分库备份(如果多个库备份在一个文件中,且其中一个库坏了,会比较麻烦,所以最好一个库备份一个文件)

实际是一个语句备份一个库;多写几 个语句;

# 一条命令行对多个库进行备份

 mysql -uroot -p123456 -S /data/3306/mysql.sock -e "show databases"|grep -Evi "information|mysql|perform|database"|sed -r 's#([a-z].*)#mysqldump -uroot -p123456 -S /data/3306/mysql.sock -B \1 | gzip> /opt/\1.sql.gz#g' | bash

#通过shell脚本编程实现

http://edu.51cto.com/course/course_id-808.html


4,备份多个表(数据库 表1 表2 表3 。。。。)

备份:mysqldump -uroot -p123456 -S /data/3306/mysql.sock www student test  #www为库  student为表   test为表


5,如果做分表备份(如果多个表备份在一个文件中,且其中一个表坏了,会比较麻烦,所以最好一个表备份一个文件)

解决:所有库一次循环、每个库中二次循环备份单个表


6,只备份表结构

加参数:-d


7,只备份表数据

加参数:-t


8,不指定数据名,备份所有:

mysqldump -uroot -p123456    -A    -B    --events | gzip > /opt/sss.sql.gz


9,刷新blnlog(mysql开启log-bin开关):

mysqldump -uroot -p123456    -A    -B   -F  --events | gzip > /opt/sss.sql.gz


10,增加binlog日志文件名及对应的位置点(--master-data=1 ):

mysqldump -uroot -p123456 --master-data=1  -S /data/3306/mysql.sock oldboy


#将来做增量恢复时,可以不做日志切割,不刷新binlog;因为文件中会显示:CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=107;

#已经告诉了日志文件在mysql-bin.000001;增量恢复从 107这个位置点开始,往下恢复就行了


11,锁表:-x

12,只读锁表:-l

13,--single-transaction   适合innodb事务数据库备份

innoDB表在备份时,通常启用选项 --single-transaction来保证备份的一致性,实际上他的工作原理是设定本次会话的隔离级别为:

REPEATABLE READ,以确保本次会话(dump)时,不会看到其他会话已经提交了的数据(http://imysql.cn/2008_10_24_deep_into_mysqldump_options)


14,工作中使用总结:

1)只有表库的情况

MyISAM表 备份命令:

mysqldump -uroot -p123456  -A   -B   --master-data=1   --events   -x | gzip   >  /opt/all.sql.gz      #--master-data=2的区别


InnoDB表 备份命令:工作中推荐使用的表引擎

mysqldump -uroot -p123456  -A   -B   --master-data=1    --events  --single-transaction | gzip   >  /opt/all.sql.gz


2)有库有表,还有触发器、存储过程、视图等

MyISAM表:

mysqldump   --user=root   --all-databases   --flush-privileges   --lock-all-tables   --master-data=1   --flush-logs   --triggers   --routines   --events   --hex-blob > xxx.sql

InnoDB表:

mysqldump   --user=root   --all-databases   --flush-privileges   --single-transaction  --master-data=1   --flush-logs   --triggers   --routines   --events   --hex-blob > xxx.sql


15,使用source命令恢复数据库

通常需要进入到myql命令行进行操作;也可以通过 -e 在linux命令行进行操作


16,mysqlbinlog 恢复

# 按照位置截取

mysqlbinlog  mysqlbin.000020  -d www  --start-position=365  --stop-position=456  -r  pos.sql    #   -d   www:指定只恢复 www 数据库的数据

# 按照时间截取

mysqlbinlog  mysql-bin.000020  --start-datetime='2014-10-16 17:14:15'  --stop-datetime='2014-10-16 17:15:15'   -r   time.sql





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值