mysql 日志访问

1:开启binlog日志记录
修改mysql配置文件mysql.ini,在[mysqld]节点下添加
复制代码 代码如下:

# log-bin
log-bin = E:/log/logbin.log

路径中不要包含中文和空格。重启mysql服务。通过命令行停止和启动mysql服务
复制代码 代码如下:

c:\>net stop mysql;
c:\>net start mysql;

进入命令行进入mysql并查看二进制日志是否已经启动
Sql代码
复制代码 代码如下:

mysql>show variables like 'log_%';

日志成功开启后,会在E:/log/目录下创建logbin.index和logbin.000001两个文件。logbin.000001就是数据库的备份文件,以后就可以通过此文件对数据库进行恢复操作。

2:查看备份的二进制文件
Sql代码
复制代码 代码如下:

c:\mysql\bin\>mysqlbinlog e:/log/logbin.000001

日后记录的操作多了,命令行方式基本就用不上了。可以使用将日志导出文件的方式来查看日志内容
2.1 导出
Xml代码
复制代码 代码如下:

c:\mysql\bin\>mysqlbinlog e:/log/logbin.000001 > e:/log/log.txt

">": 导入到文件中; ">>": 追加到文件中
如果有多个日志文件
Sql代码
复制代码 代码如下:

c:\mysql\bin\> mysqlbinlog e:/log/logbin.000001 > e:/log/log.sql
c:\mysql\bin\> mysqlbinlog e:/log/logbin.000002 >> e:/log/log.sq

2.2 按指定位置导出:
Sql代码
复制代码 代码如下:

c:\mysql\bin\>mysqlbinlog --start-position=185 --stop-position=338 e:/log/logbin.000001 > e:/log/log3.txt

2.3 按指定时间导出:
Xml代码
复制代码 代码如下:

c:\mysql\bin\>mysqlbinlog --start-datetime="2010-01-07 11:25:56" --stop-datetime="2010-01-07 13:23:50" e:/log/logbin.000001 > e:/log/log_by_date22.txt

3:从备份恢复数据库
做了一次更新操作,之后日志的内容如下:
Sql代码
复制代码 代码如下:

/*!40019 SET @@session.max_insert_delayed_threads=0*/;
/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
DELIMITER /*!*/;
# at 4
#110107 13:23:50 server id 1 end_log_pos 106 Start: binlog v 4, server v 5.1.53-community-log created 110107 13:23:50 at startup
# Warning: this binlog is either in use or was not closed properly.
ROLLBACK/*!*/;
BINLOG '
ZqMmTQ8BAAAAZgAAAGoAAAABAAQANS4xLjUzLWNvbW11bml0eS1sb2cAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAABmoyZNEzgNAAgAEgAEBAQEEgAAUwAEGggAAAAICAgC
'/*!*/;
# at 106
#110107 13:26:58 server id 1 end_log_pos 185 Query thread_id=44 exec_time=1 error_code=0
SET TIMESTAMP=1294378018/*!*/;
SET @@session.pseudo_thread_id=44/*!*/;
SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=1, @@session.unique_checks=1, @@session.autocommit=1/*!*/;
SET @@session.sql_mode=1344274432/*!*/;
SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/;
/*!\C utf8 *//*!*/;
SET @@session.character_set_client=33,@@session.collation_connection=33,@@session.collation_server=33/*!*/;
SET @@session.lc_time_names=0/*!*/;
SET @@session.collation_database=DEFAULT/*!*/;
BEGIN
/*!*/;
# at 185
#110107 13:26:58 server id 1 end_log_pos 338 Query thread_id=44 exec_time=1 error_code=0
use ncl-interactive/*!*/;
SET TIMESTAMP=1294378018/*!*/;
UPDATE `t_system_id` SET `id_value`='3000' WHERE (`table_name`='t_working_day')
/*!*/;
# at 338
#110107 13:26:58 server id 1 end_log_pos 365 Xid = 8016
COMMIT/*!*/;
DELIMITER ;
DELIMITER /*!*/;
DELIMITER ;
# End of log file
ROLLBACK /* added by mysqlbinlog */;
/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;
/*!40019 SET @@session.max_insert_delayed_threads=0*/;
/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
DELIMITER /*!*/;
# at 4
#110107 13:23:50 server id 1 end_log_pos 106 Start: binlog v 4, server v 5.1.53-community-log created 110107 13:23:50 at startup
# Warning: this binlog is either in use or was not closed properly.
ROLLBACK/*!*/;
BINLOG '
ZqMmTQ8BAAAAZgAAAGoAAAABAAQANS4xLjUzLWNvbW11bml0eS1sb2cAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAABmoyZNEzgNAAgAEgAEBAQEEgAAUwAEGggAAAAICAgC
'/*!*/;
# at 106
#110107 13:26:58 server id 1 end_log_pos 185 Query thread_id=44 exec_time=1 error_code=0
SET TIMESTAMP=1294378018/*!*/;
SET @@session.pseudo_thread_id=44/*!*/;
SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=1, @@session.unique_checks=1, @@session.autocommit=1/*!*/;
SET @@session.sql_mode=1344274432/*!*/;
SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/;
/*!\C utf8 *//*!*/;
SET @@session.character_set_client=33,@@session.collation_connection=33,@@session.collation_server=33/*!*/;
SET @@session.lc_time_names=0/*!*/;
SET @@session.collation_database=DEFAULT/*!*/;
BEGIN
/*!*/;
# at 185
#110107 13:26:58 server id 1 end_log_pos 338 Query thread_id=44 exec_time=1 error_code=0
use ncl-interactive/*!*/;
SET TIMESTAMP=1294378018/*!*/;
UPDATE `t_system_id` SET `id_value`='3000' WHERE (`table_name`='t_working_day')
/*!*/;
# at 338
#110107 13:26:58 server id 1 end_log_pos 365 Xid = 8016
COMMIT/*!*/;
DELIMITER ;
DELIMITER /*!*/;
DELIMITER ;
# End of log file
ROLLBACK /* added by mysqlbinlog */;
/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;

3.1 恢复:
Sql代码
复制代码 代码如下:

c:\mysql\bin\>mysqlbinlog e:/log/logbin.000001 | mysql -u root -p

3.2 按指定位置恢复:
Sql代码
复制代码 代码如下:

c:\mysql\bin\>mysqlbinlog --start-position=185 --stop-position=338 e:/log/logbin.000001 | mysql -u root -p

3.3 按指定时间恢复:
Xml代码
复制代码 代码如下:

c:\mysql\bin\>mysqlbinlog --start-datetime="2010-01-07 11:25:56" --stop-datetime="2010-01-07 13:23:50" e:/log/logbin.000001 | mysql -u root -p

3.4 通过导出的脚本文件恢复
Sql代码
复制代码 代码如下:

c:\mysql\bin\>mysql -e "source e:/log/log.sql"

4.其他常用操作
4.1 查看所有日志文件

Sql代码
复制代码 代码如下:

mysql>show master logs;

4.2 当前使用的binlog文件
Sql代码
复制代码 代码如下:

mysql>show binlog events \g;

4.3 产生一个新的binlog日志文件
Sql代码
复制代码 代码如下:

mysql>flush logs;

4.4 删除所有二进制日志,并从新开始记录(注意:reset master命令会删除所有的二进制日志)
Sql代码
复制代码 代码如下:

mysql > flush logs;
mysql > reset master;

4.5 快速备份数据到sql文件

Sql代码
复制代码 代码如下:

c:\mysql\bin>mysqldump -u root -p --opt --quick interactive > e:/log/mysqldump.sql

为了方便查看,把从脚本恢复的命令在写一次
Sql代码
复制代码 代码如下:

c:\mysql\bin\>mysql -e "source e:/log/mysqldump.sql"
<think> 我们正在讨论MySQL日志文件访问权限的相关内容。根据用户的问题,需要关注如何设置和管理MySQL日志文件的访问权限,包括系统文件权限和数据库用户权限。 首先,结合之前的回答和引用内容,我们可以从以下几个方面展开: 1. MySQL日志类型及其默认存储位置(引用[1]提到慢日志路径,引用[3]和引用[5]提到错误日志路径) 2. 系统级文件权限设置(日志文件属主、权限位设置) 3. 数据库用户权限管理(引用[2]展示了用户创建和授权,但需结合日志管理权限) 4. 日志分析工具可能涉及的权限(如使用mysqlbinlog等工具,引用[4]提到了一些选项) 同时,注意引用[1]中关于慢日志配置的参数,我们可以将其与权限关联。 具体回答结构: 一、MySQL日志文件类型与默认路径 - 错误日志(/var/log/mysqld.log,引用[3][5]) - 慢查询日志(引用[1]中的slow_query_log_file) - 二进制日志(通常位于数据目录,如/var/lib/mysql) - 通用查询日志(一般也在数据目录或日志目录) 二、系统文件权限设置 - 日志文件应仅允许mysql用户和特定管理员访问 - 示例命令:设置慢查询日志权限 ```bash chown mysql:mysql /var/log/mysql/slow.log chmod 640 /var/log/mysql/slow.log # 用户读写,组用户读,其他无权限 ``` 三、数据库用户权限管理 - 查看日志的数据库权限(如SHOW BINARY LOGS需要REPLICATION SLAVE权限) - 修改日志配置的权限(如SET GLOBAL slow_query_log=1需要SYSTEM_VARIABLES_ADMIN权限) - 创建专用日志管理用户(类似引用[2]的方式,但授权不同) 四、安全注意事项 - 日志中可能包含敏感信息(如SQL语句中的密码) - 定期清理日志并设置合适权限 最后,生成相关问题。 注意:引用标记要自然,例如在提到错误日志路径时引用[3][5],慢日志配置引用[1]。 </think> ### MySQL日志文件访问权限详解 #### 一、日志类型与文件路径 1. **错误日志** - 默认路径:`/var/log/mysqld.log`(记录服务启动、运行错误等信息)[^3][^5] - 关键权限:需`mysql`用户读写权限 ```bash chown mysql:mysql /var/log/mysqld.log chmod 640 /var/log/mysqld.log # 用户读写,组读,其他无权限 ``` 2. **慢查询日志** - 配置参数(`my.cnf`): ```ini slow_query_log = ON slow_query_log_file = /var/log/mysql/slow.log # 自定义路径[^1] long_query_time = 2 # 超过2秒的查询被记录 ``` - 文件权限: ```bash chown mysql:mysql /var/log/mysql/slow.log chmod 640 /var/log/mysql/slow.log ``` 3. **二进制日志** - 默认路径:`/var/lib/mysql/binlog.XXXXXX` - 关键权限: ```bash chown mysql:mysql /var/lib/mysql/binlog.* chmod 600 /var/lib/mysql/binlog.* # 仅mysql用户可读写 ``` #### 二、数据库用户权限控制 1. **日志查看权限** ```sql -- 查看慢日志(需PROCESS权限) SHOW VARIABLES LIKE 'slow_query_log%'; -- 查看二进制日志(需REPLICATION SLAVE权限) SHOW BINARY LOGS; ``` 2. **专用日志管理用户创建** ```sql CREATE USER 'log_auditor'@'localhost' IDENTIFIED BY 'SecurePass!'; GRANT REPLICATION SLAVE, PROCESS, BINLOG_ADMIN ON *.* TO 'log_auditor'@'localhost' WITH MAX_QUERIES_PER_HOUR 100; -- 限制查询频率[^2] ``` #### 三、访问工具与权限要求 1. **mysqlbinlog工具** - 解析二进制日志需要文件读取权限[^4]: ```bash mysqlbinlog --start-position=1234 /var/lib/mysql/binlog.00001 ``` - 安全建议:通过`sudo`限制特定用户访问 ```bash sudo setfacl -m u:audit_user:r /var/lib/mysql/binlog.* ``` 2. **日志分析权限** - 使用`mysqldumpslow`分析慢日志需文件读取权限: ```bash mysqldumpslow -s t /var/log/mysql/slow.log ``` #### 四、安全最佳实践 1. **权限隔离原则** - 应用账户禁止授予`FILE`权限(防止读取日志文件) - 审计账户仅授予`SELECT`和`SHOW`权限 2. **日志加密存储** ```ini [mysqld] binlog_encryption = ON # MySQL 8.0+支持二进制日志加密 ``` 3. **自动化清理配置** ```sql SET GLOBAL expire_logs_days = 7; # 自动清理7天前的二进制日志[^1] ``` #### 五、访问故障排查 1. **权限拒绝错误处理** ```bash # 检查文件权限 ls -l /var/log/mysql/slow.log # 检查SELinux上下文 chcon -t mysqld_log_t /var/log/mysql/slow.log ``` 2. **密码恢复场景** 临时密码在错误日志中存储(需root权限访问)[^3][^5]: ```bash sudo grep 'temporary password' /var/log/mysqld.log ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值