备份/还远
冷备:需要停止当前正在运行mysqld,然后直接拷贝或打包数据文件
半热备:mysqldump+binlog -----适合数据量比较小的应用
在线热备份:AB复制
第一种冷备(物理备份)
1. 停掉mysql服务器
2.拷贝数据
cd /data
tar cjvf /tmp/mysql_bak.tar.gz ./
第二种逻辑备份mysqldump(mysqld必须是运行着,不需要停掉mysql服务,但需要锁表):
逻辑备份=表结构+数据插入
mysqldump
1.备份一张或多张表
2.备份一个或多个库
3.备份所有库
Usage: mysqldump [OPTIONS] database [tables]
OR mysqldump [OPTIONS] --databases [OPTIONS] DB1 [DB2 DB3....]
OR mysqldump [options] --all-databases [OPTIONS]
# mysqldump -uroot -p132 test t1 t2 > /tmp/t1.sql --备份单个或多个表
# mysql -uroot -p123 test > /tmp/t1.sql ---还远test库的t1,t2表
# mysqldump -uroot -p132 --databases db01 db02 db03 > /tmp/t1.sql ---备份多个库
# mysqldump -uroot -p123 --all-databases > /tmp/all.sql ---备份所有库
还原就用 mysql -uroot -p123 [database] < /tmp/1.sql
第三种增量数据:
需要打开了二进制日志记录
binlog --记录mysql服务器增删的操作记录。
mysqlbinlog
--start-datetime 开始的时间
--stop-datetime 结束时间
--start-position=# 开始位置(POS)
--stop-position=#结束的位置
备份方案1:
完成备份(mysqldump)+增量备份(binlog)
1、数据总量不大,一般在几百M的数据可以使用这种方法
2、如果数据量太大,每次备份锁表时间会比较长,这样会影响上层应用的使用。
进行备份
mysqldump -uroot -p123 --flush-logs --master-data=2 --all-databases > /mysql/all.sql
--flush-logs ------备份时先将内存的日志写回磁盘,并刷新二进制日志。
--master-data=2 在备份时进行全库锁表,并将锁对应的二进制日志名字写入到文件里。
还原
mysql -uroot -p123 < /mysql/all.sql
mysqldump --start-postion=106 --stop-datetime="xxxx-xx-xx xx:xx:xx" mysqld.000001 | mysql -uroot -p123
使用脚本备份
vim mysql_backup.sh
#!/bin/sh
name=`date +%Y%m%d-%T`
/usr/bin/mysqldump -uroot -p132 --flush-logs --master-data=2 -A > /mysql/$name.sql
crontab -e
00 05 * * 7 /bin/sh/var/ftp/notes/scripts/mysql_backup.sh &> /dev/null && echo "$name 备份已成功" >> /mysql/bk_status
备份方案2:
完成备份(LVM快照)+物理备份+增量备份(binlog)
1.确认你当前数据文件是否放在LVM卷上
2.确认卷组有空闲空间
3.全库锁 -->同步缓存都磁盘-->并截断日志并记录日志名称,然后新建快照并挂载快照
4.全库解锁
5.做完整的数据备份
6.删除快照
mysql> dilimiter //
mysql> flush tables with read lock//
mysql>flush logs//
mysql>system lvcreate -n data_snap -L 200M -s /dev/vol0/data
mysql>system mysql -uroot -p132 -e "show master status" > `date +%y%m%d-%T`.txt
mysql>unlock tables//
shell> mount /dev/vol0/data_snap /mnt
shell>cd /mnt
shell> tar cjf /mysql_bk.tar.gz ./
shell>cd .. && umount /mnt && lvremove /dev/vol0/data_snap