首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何做MySQL用户计费

如何做MySQL用户计费
EN

Database Administration用户
提问于 2011-12-27 18:29:06
回答 1查看 1.9K关注 0票数 3

我似乎在任何地方都找不到这方面的任何信息。我在这里发现了一个叫做监控每个数据库的MySQL活动?的问题,但这也不是完全正确的答案。

我希望能够将以下内容记录到某个地方的系统日志,最好是通过syslog:

  • 用户(不是主/从)登录
  • 用户注销
  • 用户连接时间
  • 用户IP

类似于lastlastb的MySQL。这能办到吗?是否已经在Ubuntu和存储库中编写了什么?MaatKit能做到这一点吗?

谢谢!

EN

回答 1

Database Administration用户

发布于 2011-12-27 19:20:44

唯一的办法是激活慢速日志并将其用作MyISAM表。默认情况下,慢速日志通常是一个文本文件。但是,general_log表是在较新版本的MySQL中作为CSV表提供的。

代码语言:javascript
复制
mysql> use mysql
Database changed
mysql> show create table slow_log\G
*************************** 1. row ***************************
       Table: slow_log
Create Table: CREATE TABLE `slow_log` (
  `start_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `user_host` mediumtext NOT NULL,
  `query_time` time NOT NULL,
  `lock_time` time NOT NULL,
  `rows_sent` int(11) NOT NULL,
  `rows_examined` int(11) NOT NULL,
  `db` varchar(512) NOT NULL,
  `last_insert_id` int(11) NOT NULL,
  `insert_id` int(11) NOT NULL,
  `server_id` int(10) unsigned NOT NULL,
  `sql_text` mediumtext NOT NULL,
  KEY `start_time` (`start_time`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='Slow log'
1 row in set (0.03 sec)

mysql>

如果必须添加以下内容,请确保my.cnf中有此内容,然后重新启动mysql:

代码语言:javascript
复制
[mysqld]
log-output=TABLE
log-slow-queries
long-query-time=0.00001

接下来,将表转换为MyISAM并在所需列上索引:

代码语言:javascript
复制
SET @old_log_state = @@global.slow_query_log;
SET GLOBAL slow_query_log = 'OFF';
ALTER TABLE mysql.slow_log ENGINE = MyISAM;
ALTER TABLE mysql.slow_log ADD INDEX starttime_index (start_time);
ALTER TABLE mysql.slow_log ADD INDEX db_starttime_index (db,start_time);
SET GLOBAL slow_query_log = @old_log_state;
SHOW CREATE TABLE mysql.slow_log\G

您可以查询表,并从mysql.slow_log列user_host检索用户和主机。

您可以在需要的地方从mysql.slow_log复制数据的一些任务,可以是一个单独的数据库。

代码语言:javascript
复制
CREATE DATABASE IF NOT EXISTS mystatus;

也许,您可以像这样运行查询:

代码语言:javascript
复制
SET @old_log_state = @@global.slow_query_log;
SET GLOBAL slow_query_log = 'OFF';
ALTER TABLE mysql.slow_log RENAME mystats.slow_log;
CREATE TABLE mysql.slow_log LIKE mystats.slow_log;
SET GLOBAL slow_query_log = @old_log_state;

这将将缓慢的日志移到别处,并从一个空日志开始。

这可能不是一个完整的答案,但我希望这对你们有一定的帮助。

票数 3
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/9772

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档