MySQL数据库的备份与恢复

2018-11-15 11:39:29 7925

一、使用binlog日志

1,binlog日志(二进制日志

记录在数据库服务器上执行的且使数据发生改变的sql语句。


2,启用binlog日志

vim /etc/my.cnf文件的mysqld订一块中添加log-bin字段

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

[root@localhost  ~]# grep -vE "^#|^$" /etc/my.cnf

[mysqld]

log-bin                    //添加该字段启动binlog日志

datadir=/var/lib/mysql

socket=/var/lib/mysql/mysql.sock

user=mysql

symbolic-links=0

character_set_server=utf8

[mysqld_safe]

log-error=/var/log/mysqld.log

pid-file=/var/run/mysqld/mysqld.pid

[root@localhost  ~]# ls /var/lib/mysql/localhost-bin*

ls:  无法访问/var/lib/mysql/localhost-bin*:  没有那个文件或目录

[root@localhost  ~]# service mysql restart

Shutting  down MySQL....                                    [确定]

Starting  MySQL...                                          [确定]

[root@localhost  ~]# ll /var/lib/mysql/localhost-bin*

-rw-rw----  1 mysql mysql 120 3月  19 14:32 /var/lib/mysql/localhost-bin.000001

-rw-rw----  1 mysql mysql  23 3月  19 14:32  /var/lib/mysql/localhost-bin.index

[root@localhost  ~]#


注:重新启动mysql服务之后,会生成两个binlog文件(默认存放在/var/lib/mysql目录下);

localhost-bin.000001:这个文件查看使用mysqlbinlog命令;当该文件大于500M的时候,会自动生成新的,并且自动编号。

该文件只记录在数据库服务器上执行的且使数据发生改变的sql语句。

localhost-bin.index :记录备份的文件名,如localhost-bin.000001


3,binlog记录的方式

偏移量

时间点


根据binlog记录的方式来读localhost-bin.000001文件:

mysqlbinlog [选项] localhost-bin.000001

选项为偏移量或时间点;

指定偏移量的格式:

--start-position=起始位置

--stop-position=结束为止

指定时间点的格式:

--start-datetime="YYYY-mm-ddHH:MM:SS"

--stop-datetime="YYYY-mm-ddHH:MM:SS"


4,使用binlog日志恢复数据

[root@localhost~]#mysqlbinlog --start-position="306" --stop-position="873"/mysqllog/gbw-bin.000002 | mysql -uroot -p123456 -hlocalhost



5,更改binlog文件的目录

默认放在/var/lib/mysql目录下;

示例:

选择将binlog文件放在/var/lib/mysql/binlog下;

名字显示为zsp-bin.xxx格式

具体步骤如下:

[root@localhost  mysql]# pwd

/var/lib/mysql

[root@localhost  mysql]# mkdir binlog

[root@localhost  mysql]# chown mysql:mysql binlog

[root@localhost  mysql]# ll -d binlog

drwxr-xr-x 2  mysql mysql 4096 3月   19 19:18 binlog

[root@localhost  mysql]# vim /etc/my.cnf

[root@localhost  mysql]# grep -vE "^#|^$" /etc/my.cnf

[mysqld]

log-bin=/var/lib/mysql/binlog/zsp-bin.log

datadir=/var/lib/mysql

socket=/var/lib/mysql/mysql.sock

user=mysql

symbolic-links=0

character_set_server=utf8

[mysqld_safe]

log-error=/var/log/mysqld.log

pid-file=/var/run/mysqld/mysqld.pid

[root@localhost  mysql]# service mysql restart

Shutting  down MySQL..                                      [确定]

Starting  MySQL.                                            [确定]

[root@localhost  mysql]# ll binlog

总用量 12

-rw-rw---- 1  mysql mysql 143 3月   19 19:18 zsp-bin.000001

-rw-rw---- 1  mysql mysql  74 3月  19 19:18 zsp-bin.index

[root@localhost  mysql]#


6,手动生成新的binlog日志的方式

重新启动mysql服务器:service mysql restart(生产环境中很少用)

在linux命令行执行:mysql -hlocalhost -uroot -p123456 -e "flush logs"

注:-e选项,在命令行下执行sql语句


登录mysql执行:flush logs      //刷新日志

在完整备份的时候执行:mysqldump-hlocalhost -uroot -p123456 --flush-logs test88 > /root/88.sql


7,删除binlog日志

第一种:删除早于指定版本的binlog日志

登录mysql状态下执行: purge master logs to "binlog文件";

示例:删除000008之前的全删掉

mysql >  purge master logs to "binlog";


第二种:删除当前所有的binlog日志文件

登录mysql状态下执行:reset master;

第三种:命令行rm删除对应文件



二、mysql的binlog日志能够增量备份的功能


1,mysql日志类型:(不同的日志记录不同的信息)

注:不同的日志记录不同的信息,功能也不相同;

如果开启的话,可以在/etc/my.cnf文件里开启;

默认存储的位置都在/var/lib/mysql目录下


错误日志:数据库服务在启动和运行时,产生的错误信息,默认是开启的;

查询日志:在数据库服务器上执行的所有的sql操作,默认不开启;

开启可以在配置文件/etc/my.cnf中添加选项:

general-log                 //开启查询日志(默认文件在数据库根目录下)

general-log-file=              //指定查询日志的位置(没必要指定)

注:如果使用指定位置的话,需要跟完整的路径和文件名,如果指定位置,则就已经开启了,所以,两个设置语句只存在一个即可!


默认文件位置和文件名:

重新启动mysql服务,会在/var/lib/mysql目录下产生localhost.log文件


慢查询日志:超出指定时间,显示查询结果的sql语句,默认不开启;

[mysqld]

slow-query-log           //开启慢查询日志(默认存放在数据库根目录下)

slow-query-log-file=     //指定存放的路径(和开启设置语句存在一个)

long-query-time=         //指定超时时间,默认为10秒


默认文件位置和文件名:

配置完成,重启mysql服务之后在/var/lib/mysql生成文件localhost.slow.log


提交成功!非常感谢您的反馈,我们会继续努力做到更好!

这条文档是否有帮助解决问题?

非常抱歉未能帮助到您。为了给您提供更好的服务,我们很需要您进一步的反馈信息:

在文档使用中是否遇到以下问题: