mysqldump备份

MySQL数据库的备份和恢复


运维的意义: 公司的数据和7*24时的网站服务

数据中数据库一般是核心



mysqldump 逻辑备份单个(多个)数据库练习多种参数使用


mysqldump是mysql自带的一个命令

mysqldump -u username -p 数据库名 > 备份的文件名.sql


mysqldump的备份原理


过程就是把数据从库里面以逻辑sql语句的形式直接导出会加入一些锁表写入的语句!


mysql恢复的原理


把备份的sql语句在数据库中重新执行一遍



举例1: 备份oldboy库

mysqldump -uroot -p12qwaszx -S /data/3307/mysql.sock  oldboy > /tmp/oldboy.sql


参看具体内容

[root@log_server ~]# egrep -v "#|\*|--|^$" /tmp/oldboy.sql 
DROP TABLE IF EXISTS `student`;
CREATE TABLE `student` (
  `id` int(4) NOT NULL AUTO_INCREMENT,
  `name` char(20) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=latin1;
LOCK TABLES `student` WRITE;
INSERT INTO `student` VALUES (1,'jack'),(2,'????'),(3,'盲赂颅忙∶ヂヂ



根据查看结果可知备份的数据库都是一些DDL和DML sql语句


mysql -uroot -p12qwaszx -S /data/3307/mysql.sock -e "drop table oldboy.student"

恢复:

mysql -uroot -p12qwaszx -S /data/3307/mysql.sock  oldboy < /tmp/oldboy.sql




举例2:备份时加-B 参数

mysqldump -uroot -p12qwaszx -B -S /data/3307/mysql.sock  oldboy > /tmp/oldboy_bak_B.sql

比较和前面的备份差异

[root@log_server ~]# diff /tmp/oldboy*

19,26d18
< -- Current Database: `oldboy`
< --
< 
< CREATE DATABASE /*!32312 IF NOT EXISTS*/ `oldboy` /*!40100 DEFAULT CHARACTER SET latin1 */;
< 
< USE `oldboy`;
< 
< --
59c51
< -- Dump completed on 2016-04-10  9:15:44
---
> -- Dump completed on 2016-04-10  8:58:52




提示:直观看加-B备份库 会在备份的时候会加上创建库和切换库的语句

[root@log_server ~]# mysqldump -uroot -p12qwaszx -B -S /data/3307/mysql.sock  oldboy > /tmp/oldboy_bak_B.sql
[root@log_server ~]# mysql -uroot -p12qwaszx -S /data/3307/mysql.sock -e "drop database oldboy";

恢复:        

[root@log_server ~]# mysql -uroot -p12qwaszx -S /data/3307/mysql.sock  < /tmp/oldboy_bak_B.sql              
[root@log_server ~]#




举例3:gzip压缩 mysql数据都是文本所以压缩效率高

mysqldump -uroot -p12qwaszx -B -S /data/3307/mysql.sock  oldboy | gzip > /tmp/oldboy_bak_B.sql.gz


比较

[root@log_server ~]# ls -l /tmp/oldboy_bak_B.sql*
-rw-r--r-- 1 root root 2123 Apr 10 09:28 /tmp/oldboy_bak_B.sql
-rw-r--r-- 1 root root  859 Apr 10 09:28 /tmp/oldboy_bak_B.sql.gz
[root@log_server ~]#



举例4:-B 备份多个库

mysqldump -uroot -p12qwaszx -B -S /data/3307/mysql.sock  oldboy mysql > /tmp/mult_B.sql



举例5: 分库备份

方法1

 mysql -uroot -p12qwaszx -S /data/3307/mysql.sock  -e 'show databases' | egrep -v "info|per|tes|Data" | sed -r 's#^([a-Z].*$)#mysqldump -uroot -p12qwaszx --events -S /data/3307/mysql.sock -B \1 | gzip > /tmp/\1.sql.gz#g ' | bash


方法2:

for 循环


举例6: 单表 多表进行备份(思考如何进行分库分表进行备份 命令为表名_bak.sql)


mysql -uroot -p密码 库名 表名1 表名2 


查看简要内容:

mysqldump -uroot -p12qwaszx -S /data/3307/mysql.sock --compact mysql user


备份语句

mysqldump -uroot -p12qwaszx -S /data/3307/mysql.sock mysql user > /tmp/user.sql


恢复

mysql -uroot -p12qwaszx -S /data/3307/mysql.sock oldboy < /tmp/user.sql


举例7: 只备份表结构或者表数据

-d 备份表结构

mysqldump -uroot -p密码 -d 库名 表名 

-t 备份表数据

mysqldump -uroot -p密码 -t 库名 表名 

[root@log_server ~]# mysqldump -uroot -p12qwaszx -S /data/3307/mysql.sock oldboy student --compact -t
INSERT INTO `student` VALUES (1,'jack'),(2,'????'),(3,'盲赂颅忙);


举例8: 备份的同时刷新binlog

-F

--master-data=1 增加binlog日志文件名和对应的位置点

mysqldump -uroot -p12qwaszx -S /data/3307/mysql.sock -F oldboy

 


结论:

1 备份加上-B 参数

2 用gzip对备份的数据压缩 效率更高

3 -B 参数 连接多个数据库备份语句中加入create 数据库和use 数据库

4 一般是分库备份一个库一条备份语句  备份的文件名为:库名_bak.sql

5 一般都是单表备份但缺点是量大一般用途是导入其他人那将单个表

6 备份--compact参数一般不用是个鸡肋参数,适合调试的输出形式,生产场景不用

Use of --compact is the same as specifying --skip-add-drop-table, --skip-add-locks, --skip-comments, --skip-disable-keys, and --skip-set-charset options.

7 -A 备份所有库 

8 -x 锁定所有的表 --lock-all-tables

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

innodb表在备份时,通常启用选项 --single-transaction 来保证备份的一致性,实际工作原理是设定本次会话的隔离级别为: REPEATABLE READ, 已确定本次会话dump时,不会看到其他会话已经提交了的数据


生产环境运维DBA的备份命令:

myisam备份命令

mysql

mysqldump -uroot -p12qwaszx -S /data/3307/mysql.sock  oldboy  -B--events -F --master-data=1 -x

innodb

mysqldump -uroot -p12qwaszx -S /data/3307/mysql.sock oldboy -B  --events -F --master-data=1 --single-transaction


你可能感兴趣的:(MysqlDump)