mysql数据库常规备份还原 (常用增量备份)2018_lcf

数据库的资料对于一个企业来说,是一个极其重要的资源, 所以做好数据备份是至关重要的.

下面是主要讲常规备份还原方式, 至于保用第三方专用备份工具会单独写个篇幅.

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。


--启用增量备份

[root@pc66~]# vim /etc/my.cnf

[mysqld] //这里下面加下面字句

server_id=50

#log-bin

//不自定义logbin目录时,只需上面那条语句就行

log-bin=/logdir/plj

#//自定义存入logbin目录, 一这要有/logdir这个目录,plj为自定义文件名

binlog_format="mixed"

[root@pc66]# systemctl restart mysqld


--查看日志文件的内容

mysql> show master status; 查看当前使用的binlog文件名和偏移量位置

[root@pc66 ]# cd /logdir

[root@pc66 ]# mysqlbinlog host50-bin.000001

# at 4

#180529 16:49:19 server id 50  end_log_pos 123 CRC32 0x497f47c5 Start: binlog v 4, server v 5.7.17-log created 180529 16:49:19 at startup

........

//主要由偏移位 # at 偏移号(起始号) , # 日期时间 id号 ....end 偏移号(结束号)

//logbin增量文件要通过mysqlbinlog命令来查看

[root@host50 mysql]# mysqlbinlog host50-bin.000001 | grep "insert"


--还原增量备份

[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命令行内刷新产生新的日志





猜你喜欢

转载自blog.csdn.net/cbuy888/article/details/80497561