数据库的资料对于一个企业来说,是一个极其重要的资源, 所以做好数据备份是至关重要的.
下面是主要讲常规备份还原方式, 至于保用第三方专用备份工具会单独写个篇幅.
1-->常见数据备份方式
• 物理备份
-冷备: cp 、 tar 、 .. ..等命令备份
例如:cp -r /var/lib/mysql /mysql_bak //整个数据存放目录的拷贝
tar -zcpf mysql_bak.tar.gz /var/lib/mysql/* //整个数据存放目录下的文件压缩备份成一个文档文件
• 逻辑备份– mysqldump
– mysql
2->生产环境中常用的备份策略(更多的是使用增量备份)
• 完全备份– 备份所有数据(一台服务器、一个库、一张表)
• 增量备份– 备份自上一次备份(包含完全备份、差异备份、增量备份)之后有变化的数据
10 2 1 2 (不累加)
– 备份自上一次完全备份之后有变化的数据
10 2 1-3 2-5 (累加备份)
3->逻辑备份及恢复
• 备份操作
– mysqldump -u用户名 -p密码 源库名 > 路径 /备份名.sql
-*.sql文件 是sql命令集文件
• 恢复操作– mysql -u用户名 -p密码 目标库名 < 路径 /备份名.sql
---单表备份
[root@pc66]# mysqldump -uroot -p123456 lcf us > /databaks/lcf_us.sql
//单表备份, lcf为库表, us为库lcf里的表名 和mysql命令里表示不一样, 这里是用空格代替lcf.us中的点
root@pc66]# mysql -uroot -p123456 lcf < /databaks/lcf_us.sql
//单表还原, 只需写库名即可,
//lcf.sql里不包括创建lcf库的命令行, 所以还原时要么先创建lcf库, 要么把lcf.sql的所有表还原到某个库下也可以.
---单库备份
[root@pc66]# mysql -uroot -p123456 lcf -e "create database lcf"
[root@pc66]# mysql -uroot -p123456 lcf < /databaks/lcf_us.sql
//先创建lcf库再还原, 只需写库名即可, 假如lcf库名已经存在,还原后只覆盖lcf.sql里存在的表(包括结构和记录)
//假如lcf库里多出有lcf.sql里没有的表, 则不会对其它表有影响.
//其作用就是: 添加lcf.sql里表到某个库里, 如果这个库里有和lcf.sql里的表同名就执行覆盖操作,没有就相当于添加进去.
---备份全部(整个数据库文件备份)
[root@pc66]# mysql -uroot -p123456 -A> /databaks/lcf_us.sql
//备份所有数据库资料
[root@pc66]#mysql -uroot -p123456 < /databaks/all.sql//还原所有数据库资料
---只备份表结构
[root@host50 /]# mysqldump -uroot -p123456 --opt -d lll us > /databaks/lcfjg.sql
//要加上-opt -d选项 , 再加上库 表名
[root@host50 /]# mysqldump -uroot -p123456 --opt -d lll > /databaks/lcfjg.sql
//备份整个库的所有结构
4-->增量备份
– 格式: mysqlbinlog [ 选项 ] binlog 日志文件名
• 常用选项
– --start-datetime="yyyy-mm-dd hh:mm:ss"
– --stop-datetime="yyyy-mm-dd hh:mm:ss"
– --start-position= 数字
– --stop-position= 数字
开启后会产生备份文件和一个记录文件序号的文件, 文件名.编号 文件名.index
相当于记录了除查看查询记录外其它所有有效操作.
mysqld在每个二进制日志名后面添加一个数字扩展名。每次你启动服务器或刷新日志时该数字则增加。如果当前的日志大小达到max_binlog_size,还会自动创建新的二进制日志。如果你正使用大的事务,二进制日志还会超过max_binlog_size:事务全写入一个二进制日志中,绝对不要写入不同的二进制日志中。
可以在/etc/my.ini中有两个设置:
#expire_logs_days = 10
#max_binlog_size = 100M
expire_logs_days :定义了mysql清除过期日志的时间。
二进制日志自动删除的天数。默认值为0,表示“没有自动删除”。启动时和二进制日志循环时可能删除。
max_binlog_size
如果二进制日志写入的内容超出给定值,日志就会发生滚动。你不能将该变量设置为大于1GB或小于4096字节。 默认值是1GB。
--启用增量备份
[mysqld] //这里下面加下面字句
server_id=50
log-bin=/logdir/plj
#//自定义存入logbin目录, 一这要有/logdir这个目录,plj为自定义文件名
binlog_format="mixed"
--查看日志文件的内容
mysql> show master status; 查看当前使用的binlog文件名和偏移量位置
[root@pc66 ]# cd /logdir
--还原增量备份
[root@pc66 ~]# mysqlbinlog --start-datetme="2014-01-02 15:30" /logdir/mysql-bin.000001 | mysql -uroot -p123456
//通过指定时间起始来还原相关操作
[root@pc66 ~]# mysqlbinlog --start-position=230 --stop-position=800 /logdir/mysql-bin.000001 | mysql -uroot -p123456
//通过指定偏移号起始来还原相关操作
[root@pc66 ~]# mysqlbinlog /logdir/mysql-bin.000001 | mysql -uroot -p123456
//通过完整单个logbin进行还原相关操作
--刷新增量备份日志
[root@pc66]# systemctl restart mysqld
//重启mysql服务会产生新的日志
[root@pc66]# mysqladmin flush-logs
//命令行刷新产生新的日志
mysql> flush logs;
//mysql命令行内刷新产生新的日志