Backup/Restore
备份方式
温 服务在线,仅支持读请求,效率一般,存在数据刷新问题。
冷 需关闭mysql服务,读写请求均不允许,效率高,适应初期或完整备份
热 备份的同时,业务不受影响, 效率低,存在数据冗余和一致性问题。
备份工具 mysqldump
MyISAM不支持热备,InnoDB支持热备
完全+增量+二进制日志
完全+差异+二进制日志
— 锁定读写 添加参数
–lock-all-tables; — 所有表
–lock-tables;
— 刷新 表只读锁
flush tables with read lock;
— 刷新 innodb 引擎
show engine innodb status;
— 数据库离线
— 完全备份
mysqldump -uroot –single-transaction –master-data=2 –databases hellodb > /backup/hellodb_`date +%F`.sql;
–single-transaction: 基于此选项能实现热备InnoDB表;因此,不需要同时使用–lock-all-tables;
–master-data=2 记录备份那一时刻的二进制日志的位置,并且注释掉,1是不注释的
–databases hellodb 指定备份的数据库
create table tb1(id int); 创建表
insert into tb1 values (1),(2),(3); 插入数据,这里只做演示
cat hellodb_2013-09-08.sql | less
— CHANGE MASTER TO MASTER_LOG_FILE=’mysql-bin.000013′, MASTER_LOG_POS=15684; 记录了二进制日志的位置
show master status;
显示此时的二进制日志的位置,从备份文件里边记录的位置到我们此时的位置,即为增量的部分
+——————+———-+————–+——————+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+——————+———-+————–+——————+
| mysql-bin.000004 | 15982 | | |
+——————+———-+————–+——————+
做增量备份
mysqlbinlog –start-position=15694 –stop-position=15982
/mydata/data/mysql-bin.000013 > /backup/hellodb_`date +$F_%H`.sql
insert into tb1 values (4),(5); 在插入一些数值
mysql> drop database hellodb; 删除hellodb库
导出二进制日志:
mysqlbinlog –start-position=15982 /mydata/data/mysql-bin.000013
查看删除操作时二进制日志的位置
# mysqlbinlog –start-position=15982 –stop-position=16176 /mydata/data/mysql-bin.000013 > /tmp/hellodb.sql
//导出二进制日志
2.10先让mysql离线
set sql_log_bin=0; — 关闭二进制日志
flush logs; — 滚动下日志
— 日志开启和二进制日志文件状态
SET sql_log_bin=0; — 0 关闭 1 开启
SHOW MASTER STATUS ; — 状态
— 还原顺序
1 完整
2 增量/差异
3 二进制日志
import/Output
1.导出整个数据库 mysqldump -u 用户名 -p 数据库名 > 导出的文件名 mysqldump -u root -p dataname >dataname.sql 这个时候会提示要你输入root用户名的密码,输入密码后dataname数据库就成功备份在mysql/bin/目录中. 2.导出一个表 mysqldump -u 用户名 -p 数据库名 表名> 导出的文件名 mysqldump -u root -p dataname users> dataname_users.sql 3.导出一个数据库结构 mysqldump -u wcnc -p -d –add-drop-table smgp_apps_wcnc >d:\wcnc_db.sql -d 没有数据 –add-drop-table 在每个create语句之前增加一个drop table 4.导入数据库 常用source 命令 source d:\wcnc_db.sql 5. 选择(编辑)导入文件 delete from students where Age > 30; load data infile '/tmp/stud.txt' into table students;