您好,登录后才能下订单哦!
菜鸟学Linux 第079篇笔记 mysql备份lvm
内容总览
上节知识点补充
单表的导出导入
LVM创建快照实现数据库备份
上节少了一点知识点
使用mysqldump备份还原时 要临时将sql_log_bin关闭(临时性的关闭二进制日志记录)
因为还原时所生成的二进制日志对于下一次备份时是没有用的,所以在还原时要关闭二进制
日志记录 切记切记
SET sql_log_bin=0; 关闭
导入使用
mysql> \. /path/backup.sql
SET sql_log_bin=1; 开启
mysqldump
--databases DB1,DB2
--all-databases
--flush-logs
--routines
--triggers
--master-data={0|1|2}
MyISAM 温备份
--lock-all-tables
--lock-table
InnoDB 热备份
--single-transaction
逻辑备份
1. 浮点数据丢失精度;
2. 备份的数据更点用存储空间,压缩后可大大节省空间
3. 不适合对大数据库做完全备份
INNODB
SHOW ENGINES INNODB STATUS;
mvcc, REPEATABLE-READ
--single-transaction
直接将表导出不添加任何信息
mysql> SELECT * INTO OUTFILE '/path/file_name.txt' FROM tb_name [WHERE]
mysql> SELECT * INTO OUTFILE '/tmp/tutor.txt' FROM tutors;
(注意所给的系统路径 必须mysql用户可以访问的目录 )
还原导出的表
导入之前需要重新建立表,和对应的列名称及其属性
mysql> CREATE TABLE tutor LIKE tutors;
mysql> LOAD DATA INFILE '/tmp/tutor.txt' INTO TABLE tutor;
此种方式仅做单张表备份,速度快 (且不会写进二进制日志文件里)
几乎热备 LVM
snapshot
前提
1. 数据文件要在逻辑卷上
2. 此逻辑卷所在卷组必须有足够空间使用快照卷
3. 使用快照热备 数据文件和事务日志必须在一个逻辑卷里
1. 锁表
mysql> FLUSH TABLES WITH READ LOCK;
mysql> FLUSH LOGS;
mysql> SHOW MASTER STATUS;
此时切记不要退出会话, 要新建立一个会话执行如下命令
# mkdir /backup
# mysql -e "SHOW MASTER STATUS\G;" > /backup/master-`date +%F`.info
2. 创建快照并备份数据
# lvcreate -L 50M -s -p r -n mydata-snap /dev/myvg/mydata
释放表锁
mysql> UNLOCK TABLES;
# mount /dev/myvg/mydata-snap /mnt/ -o ro
# mkdir /backup/full-backup-`date +%F`
# cp -a /mnt/data/* /backup/full-backup-2017-01-13/
# rm -rf /backup/full-backup-2017-01-13/mysql-bin.*
(我这里是模拟的,其实二进制日志不应该也在数据文件里的所以删除掉)
# cd
# umount /mnt
# lvremove --force /dev/myvg/mydata-snap
3. 备份二进制日志文件
# cat /backup/master-2017-01-13.info
会在此里边查找到位置我的是107
二进制日志文件是mysql-bin.000005
# mysqlbinlog --start-position=107 /mydata/data/mysql-bin.000003
此句在于找出其开始时间,下一句是备份
# mysqlbinlog --start-datetime='2017-01-13' mysql-bin.000003
mysql-bin.000004 mysql-bin.000005... > /backup/binary/binary-`date %F`.sql
4. 模拟数据库损坏并还原
将数据库里所有信息删除
# service mysqld stop
# rm -rf /mydata/data/*
# killall mysqld
实现还原
# cp -a /backup/full-backup-2017-01-13/* /mydata/data/
# ls /mydata/data
# service mysqld start
5. 即时点还原(导入二进制日志文件)
mysql> SET sql_log_bin=0;
mysql> SOURCE /backup/binary-2017-01-13.sql
mysql> SET sql_log_bin=1;
总结步骤
1.打开会话,施加读锁,锁定所有表
mysql> FLUSH TABLES WITH READ LOCK;
mysql> FLUSH LOGS;
2.通过另一个终端,保存二进制日志文件及相关位置信息
# mysql -uroot -p -e "SHOW MASTER STATUS\g" > /path/master-`date +%F`.info
3.创建快照
# lvcreate -L # -s -p r -n LV_name /dev/path/source-lv
4.释放锁
mysql> UNLOCK TABLES;
5.挂载快照卷,备份
mount
cp
6.删除快照卷
7.增量备份二进制日志
8.还原时一定要记得将二进制日志给临时性的关闭掉
InnoDB 数据库一定要记得使用了
innodb_file_per_table | ON
要不然备份单个数据库使用快照这种方式就比较麻烦了
创建快照来备份数据库比较适合进行所有库备份
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。