一:percona-xtrabackup 物理备份
1.简介
它是开源免费的支持MySQL 数据库热备份的软件,它能对InnoDB和XtraDB存储引擎的数据库非阻塞地备份。它不暂停服务创建Innodb热备份;为mysql做增量备份;在mysql服务器之间做在线表迁移;使创建replication更加容易;备份mysql而不增加服务器的负载。
percona是一家老牌的mysql技术咨询公司。它不仅提供mysql的技术支持、培训、咨询,还发布了mysql的分支版本–percona Server。并围绕percona Server还发布了一系列的mysql工具。
2.备份方式
完全备份:全部数据进行备份
增量备份:每次备份上一次备份到现在产生的新数据
比如我在周一进行了一次全备,周二的时候就不需要全备了,如果还全备,会浪费我们的磁盘空间,这个时候,周二我们就可以适用增量备份.周三四五六日都可以逐天进行一个增量备份.就是比如周一做了一个全备,然后到周二你现在准备做备份了,就是周一全备之后到周二备份之前的新数据可以做一个增量备份.
差异备份:只备份跟完整备份不一样的
3.软件安装
它是一个第三方软件,需要自行安装.
# wget http://www.percona.com/downloads/percona-release/redhat/0.1-4/percona-release-0.1- 4.noarch.rpm
# rpm -ivh percona-release-0.1-4.noarch.rpm
关掉签名机制
# yum -y install percona-xtrabackup-24.x86_64
注意:
如果依赖包perl-DBD-MySQL安装不上,需先把percona源拿掉用centos的源单独安装,然后再安装percona- xtrabackup-24.x86_64
[root@e9fcf0f73504 yum.repos.d]# mv percona-release.repo percona-release.repo.bak [root@e9fcf0f73504 yum.repos.d]# yum -y install perl-DBD-MySQL
[root@e9fcf0f73504 yum.repos.d]# mv percona-release.repo.bak percona-release.repo [root@e9fcf0f73504 yum.repos.d]# yum -y install percona-xtrabackup-24.x86_64
注意:
Percona-Server-shared与mysql-community-server冲突。
解决方案:
原来是需要安装mysql-community-libs-compat
[root@localhost ~]# wget http://www.percona.com/downloads/percona-release/redhat/0.1-4/percona-release-0.1-4.noarch.rpm
--2020-05-09 00:32:16-- http://www.percona.com/downloads/percona-release/redhat/0.1-4/percona-release-0.1-4.noarch.rpm
正在解析主机 www.percona.com (www.percona.com)... 74.121.199.234
正在连接 www.percona.com (www.percona.com)|74.121.199.234|:80... 已连接。
已发出 HTTP 请求,正在等待回应... 301 Moved Permanently
位置:https://www.percona.com/downloads/percona-release/redhat/0.1-4/percona-release-0.1-4.noarch.rpm [跟随至新的 URL]
--2020-05-09 00:32:17-- https://www.percona.com/downloads/percona-release/redhat/0.1-4/percona-release-0.1-4.noarch.rpm
正在连接 www.percona.com (www.percona.com)|74.121.199.234|:443... 已连接。
已发出 HTTP 请求,正在等待回应... 200 OK
长度:6555 (6.4K) [application/x-redhat-package-manager]
正在保存至: “percona-release-0.1-4.noarch.rpm”
100%[===================================================================================================>] 6,555 --.-K/s 用时 0s
2020-05-09 00:32:18 (1.36 GB/s) - 已保存 “percona-release-0.1-4.noarch.rpm” [6555/6555])
[root@localhost ~]# rpm -ivh percona-release-0.1-4.noarch.rpm
准备中... ################################# [100%]
正在升级/安装...
1:percona-release-0.1-4 ################################# [100%]
[root@localhost ~]# cd /etc/yum.repos.d/
[root@localhost yum.repos.d]# vi percona-release.repo
#进入这个软件的yum仓库把gpgcheck的1改为0关闭签名机制
[root@localhost yum.repos.d]# yum -y install percona-xtrabackup-24.x86_64
#然后安装.这个软件安装时候容易出问题,如果出现问题安装不上,上面有常见的问题和解决方法.
4.完整备份
完全备份流程
创建备份目录.
mkdir -p /xtrabackup/full
备份
innobackupex --user=root --password=‘QianFeng@123’ /xtrabackup/full
完全备份恢复流程
- 停止数据库
- 清理环境
- 重演回滚--> 恢复数据
- 修改权限
- 启动数据库
关闭数据库:
# systemctl stop mysqld
# rm -rf /var/lib/mysql/*
# rm -rf /var/log/mysqld.log
# rm -rf /var/log/mysql-slow/slow.log (有则删除,无则不需要操作)
恢复之前的验证恢复:
# innobackupex --apply-log /xtrabackup/full/2020-05-11_15-20-18/
确认数据库目录: 恢复之前需要确认配置文件内有数据库目录指定,不然xtrabackup不知道恢复到哪里 # cat /etc/my.cnf
[mysqld] datadir=/var/lib/mysql
恢复数据:
[root@xingdian mysql]# innobackupex --copy-back /xtrabackup/full/2020-05-11_15-20-18/
修改权限:
[root@xingdian mysql]# chown mysql.mysql /var/lib/mysql -R
启动数据库:
[root@xingdian mysql]# systemctl start mysqld
验证数据:
[root@xingdian mysql]# mysql -u root -pxxxx
mysql> show databases;
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
4 rows in set (0.00 sec)
mysql> create database TNT;
Query OK, 1 row affected (0.00 sec)
#先准备一个干净环境的数据库,然后新建一个库.准备进行备份.
[root@localhost ~]# mkdir -p /xtarbackup/full
#先创建一个备份的目录,然后进行完整备份.
[root@localhost ~]# innobackupex --user=root --password=TNTnb@123 /xtarbackup/full/
200511 15:20:20 completed OK!
#因为xtarbackup是支持热备份的,所以我们不需要停止数据库.
[root@localhost ~]# ls /xtarbackup/full/
2020-05-11_15-20-18
#然后之前创建的目录里多了一个以时间命名的文件,里面的就是数据.
#这上面两步就已经完成了完全备份的操作.
#
#下面开始完全备份恢复.
[root@localhost ~]# systemctl stop mysqld
#关闭数据库.
[root@localhost ~]# rm -rf /var/log/mysqld.log
[root@localhost ~]# rm -rf /var/lib/mysql/*
#模拟数据丢失,把数据库清理.
[root@localhost ~]# innobackupex --apply-log /xtarbackup/full/2020-05-11_15-20-18/
200511 15:24:10 completed OK!
#恢复之前的验证恢复,等于是在恢复数据之前的重演回滚操作.
[root@localhost ~]# cat /etc/my.cnf
[mysqld]
datadir=/var/lib/mysql
#确认数据库目录
#恢复之前需要确认配置文件内有数据库目录指定,不然xtrabackup不知道恢复到哪里
[root@localhost ~]# innobackupex --copy-back /xtarbackup/full/2020-05-11_15-20-18/
200511 15:27:13 completed OK!
#恢复数据
[root@localhost ~]# chown mysql.mysql /var/lib/mysql -R
#修改权限
[root@localhost ~]# systemctl start mysqld
#启动数据库
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| TNT |
| mysql |
| performance_schema |
| sys |
+--------------------+
5 rows in set (0.00 sec)
#最后查看备份是否成功.
5.增量备份
增量备份流程
原理:每次备份上一次备份到现在产生的新数据
创建备份目录:
[root@xingdian ~]# mkdir -p /xtrabackup/full
[root@xingdian ~]# mkdir -p /xtrabackup/zeng
1、完整备份:周一
[root@xingdian ~]# innobackupex --user=root --password=‘QianFeng@123’ /xtrabackup/full
2、增量备份:周二 —— 周六
需要创建数据
[root@xingdian ~]# innobackupex --user=root --password=‘QianFeng@123’ --incremental /xtrabackup/zeng/ --incremental-basedir=/xtrabackup/full/2019-08-20_15-57-31/
[root@xingdian zeng]# ls
2019-08-21_00-00-08
需要创建数据
[root@xingdian ~]# innobackupex --user=root --password=QianFeng@123 --incremental /xtrabackup/zeng/ --incremental-basedir=/xtrabackup/zeng/2019-08-21_00-00-08/
[root@xingdian zeng]# ls
2019-08-21_00-00-08 2019-08-22_00-04-11
增量备份恢复流程
- 停止数据库
- 清理环境
- 依次重演回滚redo log--> 恢复数据
- 修改权限
- 启动数据库
[root@localhost ~]# systemctl stop mysqld
[root@localhost ~]# rm -rf /var/lib/mysql/*
依次重演回滚redo log
周一:full
[root@localhost ~]# innobackupex --apply-log --redo-only /xtrabackup/full/2019-08-20_15-57- 31/anzhuang
周二 — 周四
[root@localhost ~]# innobackupex --apply-log --redo-only /xtrabackup/full/2019-08-20_15-57-31/ – incremental-dir=/xtrabackup/zeng/2019-08-21_00-00-08/
[root@localhost ~]# innobackupex --apply-log --redo-only /xtrabackup/full/2019-08-20_15-57-31/ – incremental-dir=/xtrabackup/zeng/2019-08-22_00-04-11/
恢复数据
[root@localhost ~]# innobackupex --copy-back /xtrabackup/full/2019-08-20_15-57-31/ (datadir)
修改权限
[root@localhost ~]# chown -R mysql.mysql /var/lib/mysql [root@xingdian ~]# systemctl start mysqld
验证恢复:
mysql> show databases;
[root@localhost ~]# mkdir /xtarbackup/zeng
[root@localhost ~]# mkdir /xtarbackup/full
#先创建一个增量备份的备份目录,以及完全备份的备份目录.
[root@localhost ~]# rm -rf /xtarbackup/full/*
#完全备份我们刚才就已经有了,所以可以把他删除一下里面的内容.
[root@localhost ~]# innobackupex --user=root --password=TNTnb@123 /xtarbackup/full/
200511 16:26:10 completed OK!
#然后进行第一次的完全备份.
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| TNT |
| mysql |
| performance_schema |
| sys |
+--------------------+
5 rows in set (0.00 sec)
mysql> create database TNT2;
#先进数据库看看库,然后创建第二个库用来实验.然后退出.
#这个操作等于是在第一次完全备份之后增加了数据,如果我们想备份这一块数据怎么办呢.
[root@localhost ~]# innobackupex --user=root --password='TNTnb@123' --incremental /xtarbackup/zeng/ --incremental-basedir=/xtarbackup/full/2020-05-11_16-26-09/
200511 16:33:39 completed OK!
#进行增量备份
[root@localhost ~]# ls /xtarbackup/full/
2020-05-11_16-26-09
[root@localhost ~]# ls /xtarbackup/zeng/
2020-05-11_16-33-37
#完全备份和增量备份的备份目录都有数据.
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| TNT |
| TNT2 |
| mysql |
| performance_schema |
| sys |
+--------------------+
6 rows in set (0.00 sec)
mysql> create database TNT3;
Query OK, 1 row affected (0.00 sec)
#然后进入数据库,再创建一个库3,等于是数据库里面的内容再次有了修改.然后退出.
[root@localhost ~]# innobackupex --user=root --password='TNTnb@123' --incremental /xtarbackup/zeng/ --incremental-basedir=/xtarbackup/zeng/2020-05-11_16-33-37/
200511 16:39:16 completed OK!
#然后再进行一次增量备份,这里注意要把刚才那次增量备份时候写的备份路径
#--incremental-basedir=/xtarbackup/full/2020-05-11_16-26-09/
#换成
#--incremental-basedir=/xtarbackup/zeng/2020-05-11_16-33-37/
#因为增量备份的原理就是只备份上一次备份之后到现在的内容.
[root@localhost ~]# ls /xtarbackup/zeng/
2020-05-11_16-33-37 2020-05-11_16-39-15
#然后增量备份里面就有两份数据了.
#上面这就是增量备份.
然后进行增量备份恢复
[root@localhost ~]# systemctl stop mysqld
#先停止数据库
[root@localhost ~]# rm -rf /var/lib/mysql/*
#再清理环境.
[root@localhost ~]# innobackupex --apply-log --redo-only /xtarbackup/full/2020-05-11_16-26-09/
200511 16:46:19 completed OK!
#然后需要先把之前的备份包括完整备份和增量备份都先重演回滚.这里是完整备份的回滚.redo.
[root@localhost ~]# innobackupex --apply-log --redo-only /xtarbackup/full/2020-05-11_16-26-09/ --incremental-dir=/xtarbackup/zeng/2020-05-11_16-3
2020-05-11_16-33-37/ 2020-05-11_16-39-15/
#进行增量回滚的时候先写完全备份回滚,然后再写增量回滚,然后切记要按时间顺序依次回滚.
#里面看到有两份数据,这里是先需要回滚2020-05-11_16-33-37/
[root@localhost ~]# innobackupex --apply-log --redo-only /xtarbackup/full/2020-05-11_16-26-09/ --incremental-dir=/xtarbackup/zeng/2020-05-11_16-33-37/
200511 16:49:51 completed OK!
#进行第一次的增量回滚.
[root@localhost ~]# innobackupex --apply-log --redo-only /xtarbackup/full/2020-05-11_16-26-09/ --incremental-dir=/xtarbackup/zeng/2020-05-11_16-39-15/
200511 16:50:46 completed OK
#然后进行第二次增量回滚.(/xtarbackup/zeng/目录下的另外一份文件)
#这里相当于把两次增量都回滚到我们的完全备份目录下,所以我们恢复的时候可以直接恢复完整备份就可以.
[root@localhost ~]# innobackupex --copy-back /xtarbackup/full/2020-05-11_16-26-09/
200511 16:54:39 completed OK!
#直接进行完整备份的恢复.
[root@localhost ~]# chown mysql.mysql /var/lib/mysql -R
#然后给权限
[root@localhost ~]# systemctl start mysqld
#启动数据库
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| TNT |
| TNT2 |
| TNT3 |
| mysql |
| performance_schema |
| sys |
+--------------------+
7 rows in set (0.00 sec)
#恢复成功.
6.差异备份
特点:只备份跟完整备份不一样的
差异备份流程
创建备份目录:
[root@localhost ~]# mkdir -p /xtrabackup/full
1、完整备份:
周一
[root@localhost ~]# innobackupex --user=root --password=888 /xtrabackup/full
2、差异备份:
周二 —— 周六
创建备份目录:
[root@localhost ~]# mkdir -p /xtrabackup/jian
insert into testdb.test2 values(2);
[root@localhost ~]# innobackupex --user=root --password=888 --incremental /xtrabackup/jian – incremental-basedir=/xtrabackup/完全备份目录(周一)
insert into testdb.test2 values(3);
[root@localhost ~]# innobackupex --user=root --password=888 --incremental /xtrabackup/jian – incremental-basedir=/xtrabackup/完全备份目录(周一)
insert into testdb.test values(4);
[root@localhost ~]# innobackupex --user=root --password=888 --incremental /xtrabackup/jian – incremental-basedir=/xtrabackup/完全备份目录(周一)
差异备份恢复流程
- 停止数据库
- 清理环境
- 重演回滚redo log(周一,某次差异)--> 恢复数据
- 修改权限
- 启动数据库
一. 停止数据库
[root@localhost ~]# systemctl stop mysqld
二. 清理环境
[root@localhost ~]# rm -rf /var/lib/mysql/*
三. 重演回滚redo log(周一,某次差异)--> 恢复数据
1).恢复全量的redo log
[root@localhost ~]# innobackupex --apply-log --redo-only /xtrabackup/完全备份目录(周一)
2).恢复差异的redo log
[root@localhost ~]# innobackupex --apply-log --redo-only /xtrabackup/完全备份目录(周一)-- incremental-dir=/xtrabacku/某个差异备份
四.复制数据文件(cp,rsync),修改权限
[root@localhost ~]# innobackupex --copy-back /xtrabackup/完全备份目录(周一)
设置权限
[root@localhost ~]# chown mysql.mysql /var/lib/mysql -R
五.启动mysqld
[root@localhost ~]# systemctl start mysqld
六.验证恢复:
[root@localhost ~]# mysql -u root -pQianFeng@123
[root@localhost ~]# rm -rf /xtarbackup/*
#清理一下,把之前的备份目录删了.
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| TNT3 |
| mysql |
| performance_schema |
| sys |
+--------------------+
5 rows in set (0.00 sec)
#这里有我们之前创建的库,以TNT3为基准进行完整备份.然后退出.
[root@localhost ~]# innobackupex --user=root --password='TNTnb@123' /xtarbackup/full
200512 01:37:40 completed OK!
#首先进行一个完整备份,和之前一样.
[root@localhost ~]# ls /xtarbackup/full/
2020-05-12_01-37-38
#这个full文件夹虽然在做备份之前没去先创建出来,但是还是会自动给我们创建.最好还是自己创建一下.
#这里就完成了完整备份.
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| TNT3 |
| TNTNB |
| mysql |
| performance_schema |
| sys |
+--------------------+
6 rows in set (0.00 sec)
#进行差异备份之前先去库里面修改下内容,随便创建个库.
[root@localhost ~]# mkdir /xtarbackup/jian
#接着进行差异备份,创建一个备份目录,放差异备份的内容.
[root@localhost ~]# innobackupex --user=root --password='TNTnb@123' --incremental /xtarbackup/jian/ --incremental-basedir=/xtarbackup/full/2020-05-12_01-37-38/
200512 01:44:01 completed OK!
#然后进行第一次差异备份的操作.
+--------------------+
| Database |
+--------------------+
| information_schema |
| TNT3 |
| TNTNB |
| mysql |
| performance_schema |
| sys |
+--------------------+
6 rows in set (0.00 sec)
mysql> create database TNTNBNB;
Query OK, 1 row affected (0.00 sec)
#然后我们进库里面再创建一个库,准备做第二次差异备份.
[root@localhost ~]# innobackupex --user=root --password='TNTnb@123' --incremental /xtarbackup/jian/ --incremental-basedir=/xtarbackup/full/2020-05-12_01-37-38/
200512 01:46:53 completed OK!
#然后进行第二次差异备份.
#因为差异备份它只备份跟完整备份不一样的,所以命令目录不用修改.
[root@localhost ~]# ls /xtarbackup/full/
2020-05-12_01-37-38
[root@localhost ~]# ls /xtarbackup/jian/
2020-05-12_01-44-00 2020-05-12_01-46-51
#一个是完整备份,另外两个是差异备份.
#full文件里的完整备份数据,里面有1个库.
#jian文件里面第一次差异备份的数据里面是增加了1个库,所以这个文件里面共有2个库.
#jian文件里面第二次差异备份的数据里面是增加了1个库,所以这个文件里面就有3个库了.
#如果full的比作A,jian的两个比作BC,那么如果用B去进行恢复,那么就会有2个库,如果用C去恢复就会有3个库.
#它备份是用完整备份来做参照,只备份和完整备份不一样的东西.
下面进行差异备份的回滚和恢复.
[root@localhost ~]# systemctl stop mysqld
#停止服务
[root@localhost ~]# rm -rf /var/lib/mysql/*
#清理环境
[root@localhost ~]# innobackupex --apply-log --redo-only /xtarbackup/full/2020-05-12_01-37-38/
200512 01:57:41 completed OK!
#同样先进行完整备份的回滚.
[root@localhost ~]# innobackupex --apply-log --redo-only /xtarbackup/full/2020-05-12_01-37-38/ --incremental-dir=/xtarbackup/jian/2020-05-12_01-44-00/
200512 02:04:56 completed OK!
#jian文件夹里面有两个文件,我们这个例子是想恢复第一次差异备份时候的数据,所以我们要用第一个文件来先进行回滚.
#想备份哪个就选哪个.第一次差异备份的时候库里应该是有2个库.
[root@localhost ~]# innobackupex --copy-back /xtarbackup/full/2020-05-12_01-37-38/
200512 02:25:04 completed OK!
#因为已经进行了第一次差异备份的回滚给到了完整备份.然后只恢复完整备份的数据即可.
#如果等下恢复出来2个库就是成功.
[root@localhost ~]# chown mysql.mysql /var/lib/mysql -R
[root@localhost ~]# systemctl start mysqld
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| TNT3 |
| TNTNB |
| mysql |
| performance_schema |
| sys |
+--------------------+
6 rows in set (0.00 sec)
#恢复成功
二:数据库日志管理
1.日志分类
错误日志 :启动,停止,关闭失败报错。rpm安装日志位置 /var/log/mysqld.log 排错
通用查询日志:所有的查询都记下来。
二进制日志:实现备份,增量备份。只记录改变数据,除了select都记。 备份 binlog
中继日志:读取主服务器的binlog,在本地回放。保持一致。 复制
slow log:慢查询日志,指导调优,定义某一个查询语句,超时时间,通过日志提供调优建议给开发人员。 调优
DDL log: 定义语句的日志。
Error Log
log-error=/var/log/mysqld.log
Binary Log:前提需要开启
log-bin=/var/log/mysql-bin/slave2
server-id=2
[root@localhost ~]# mkdir /var/log/mysql-bin
[root@localhost ~]# chown mysql.mysql /var/log/mysql-bin/
[root@localhost ~]# systemctl restart mysqld
查看binlog日志
# mysqlbinlog slave2-bin.000001 -v --base64-output=decode-rows
时间点 : 141126 14:04:49
位置点 : at 106
注:
- 重启mysqld 会截断
- flush logs 会截断
- reset master 删除所有binlog
- 删除部分
PURGE BINARY LOGS TO ‘mysql-bin.010’;
PURGE BINARY LOGS BEFORE ‘2019-04-02 22:46:26’;
截取binlog
all:
# mysqlbinlog mysql.000002
datetime:
# mysqlbinlog mysql.000002 --start-datetime=“2018-12-05 10:02:56”
# mysqlbinlog mysql.000002 --stop-datetime=“2018-12-05 11:02:54”
# mysqlbinlog mysql.000002 --start-datetime=“2018-12-05 10:02:56” --stop-datetime=“2018-12-05 11:02:54”
position:
# mysqlbinlog mysql.000002 --start-position=260
# mysqlbinlog mysql.000002 --stop-position=260
# mysqlbinlog mysql.000002 --start-position=260 --stop-position=930
Slow Query Log
slow_query_log=1
slow_query_log_file=/var/log/mysql-slow/slow.log
long_query_time=3 设置慢查询超时时间 单位是:秒
验证:
# mysql -u root -p2
> select sleep(6); #执行一个超过6秒的查询操作
# cat /var/lib/mysql/slow-log
[root@localhost ~]# vi /etc/my.cnf
#增加下面3行参数
slow_query_log=1
slow_query_log_file=/var/lib/mysql/slow.log
long_query_time=3
[root@localhost ~]# systemctl restart mysqld
#然后重启数据库.
mysql> select sleep(6);
+----------+
| sleep(6) |
+----------+
| 0 |
+----------+
1 row in set (6.00 sec)
#然后进库执行一个查询语句.我们设置的是超过3秒就会记录在我们的慢日志.
[root@localhost ~]# ls /var/lib/mysql/
auto.cnf client-cert.pem ibdata1 ibtmp1 mysql.sock.lock public_key.pem slow.log
ca-key.pem client-key.pem ib_logfile0 mysql/ performance_schema/ server-cert.pem sys/
ca.pem ib_buffer_pool ib_logfile1 mysql.sock private_key.pem server-key.pem
#然后var/lib/mysql里面就会有一个slow.log的慢日志.
[root@localhost ~]# cat /var/lib/mysql/slow.log
/usr/sbin/mysqld, Version: 5.7.30-log (MySQL Community Server (GPL)). started with:
Tcp port: 0 Unix socket: /var/lib/mysql/mysql.sock
Time Id Command Argument
# Time: 2020-05-12T15:09:08.324971Z
# User@Host: root[root] @ localhost [] Id: 2
# Query_time: 6.000678 Lock_time: 0.000000 Rows_sent: 1 Rows_examined: 0
SET timestamp=1589296148;
select sleep(6);
#然后查看这个记录,把这些超时的语句记录交给开发人员,他们就可以对这些查询时间超时过长的语句进行优化.
#这个目录可以设置到其他目录,但是要保证这个目录有权限,设置一下权限.mysql.mysql属主和属组.让数据库有操作权限,不然日志会生成不了.