Mysql 的完全备份有2种方式
1 使用系统命令直接将Mysql数据拷贝进行备份
例如
/etc/init.d/mysqld stop
tar cvfz /var/lib/mysql/mydb_backup.tar.gz /tmp
/etc/init.d/mysqld start
此种方法必须要先关闭Mysql服务,这也是一大弊端,而且此备份出的数据不支持不同版本的Mysql进行恢复!
所以此法生产环境中很少用
2 使用mysqldump 进行备份
mysqldump 备份的原理是,将对数据库中的内容修改所生成的sql 语句保存指定位置;恢复时只要将该sql 语句文件导出交给新mysql 重新执行一次,实现恢复数据。
例如
mysqldump -u root -p 123 > /var/test/123.sql
如果需要备份mysql 中的所有数据库,使用 -all-databases
mysqldump -u root -p --all-databases > /var/test/123.sql
恢复数据的命令如下:
mysql -u root -p 123 < /var/test/123.sql
mysql 的增量备份
增量备份是比完全备份作的频率高的多的操作;
mysql 的增量备份使用的方法的是用过mysql 的二进制日志来实现的;
mysql 的二进制日志中保存了对mysql 的所有操作sql 语句;
mysql 的二进制日志功能默认是关闭着的,我们需要自己手动去打开;
vim /etc/my.cnf 编辑添加
log-bin=noah(台头) 如果不加台头则默认为binlog;
重新启动服务后就会在/var/lib/mysql 中发现binlog 二进制文件;
二进制的日志文件我们需要使用命令mysqlbinlog 来查看;
那么,如何使用二进制文件来恢复数据呢;
1 使用时间来恢复
例如
mysqlbinlog --start-date="2009-05-20 10:51:01" --stop-date="2009-05-20 11:52:12" /var/lib/mysql/binlog.000001 | mysql -uroot -p123456
将这2段时间之间对mysql 进行操作的sql 语句输出给mysql 执行;这样就恢复这段时间内的数据;
但是这里的时间只精确到秒,那么在同一秒内有许多sql 语句的话,就会出现问题了;因此,我们引入了更加精确的恢复的方法,如下;
2 使用位置号来恢复
例如
mysqlbinlog --start-position="457" --stop-position="1009" /var/lib/mysql/binlog.000001 | mysql -uroot -p123456
在mysql 二进制日志中会设定一个唯一的log_pos;我们就利用这个唯一的position 进行恢复数据的操作;这种方法不会忽略掉任何的数据;