mysql记录用户操作_Mysql 记录用户操作

Mysql 连接通过init_connect来初始化,官网说明:

服务器为每个连接的客户端执行的字符串。该字符串由一个或多个SQL语句组成,用分号字符分隔。

例如,默认情况下每个客户端会话都启用自动提交模式。对于较旧的服务器(在MySQL 5.5.8之前),

没有全局自动提交系统变量来指定默认情况下应禁用自动提交,但作为解决方法,init_connect可用于实现相同的效果:

SET GLOBAL init_connect ='SET autocommit = 0';

1.创建数据库及表

创建数据库:

create database dba;

创建表:

create table accesslog(`thread_id` int primary key auto_increment, `time` timestamp, `localname` varchar(40), `machine_name` varchar(40));

thread_id : 记录mysql 线程ID

time:记录操作时间

localname:记录操作远程IP

machine_name:记录用户

2.变量配置

查看init_connect

+---------------+-------+

| Variable_name | Value |                                                                                                               |

+---------------+-------+

| init_connect  |       |

| init_file     |       |

| init_slave    |       |

+---------------+-------+

3 rows in set (0.00 sec)

配置变量

set global init_connect='insert into dba.accesslog(thread_id,time,localname,machine_name) values(connection_id(),now(),user(),current_user());';

再次查看init_connect

+---------------+-----------------------------------------------------------------------------------------------------------------------+

| Variable_name | Value                                                                                                                 |

+---------------+-----------------------------------------------------------------------------------------------------------------------+

| init_connect  | insert into dba.accesslog(thread_id,time,localname,machine_name) values(connection_id(),now(),user(),current_user()); |

| init_file     |                                                                                                                       |

| init_slave    |                                                                                                                       |

+---------------+-----------------------------------------------------------------------------------------------------------------------+

3 rows in set (0.00 sec)

3.为用户赋记录日志权限

grant select,insert,update on dba.accesslog to 'zhaohongming'@'%';

4.模拟用户操作添加删除

[email protected]:(none) 11:34:49 >use sdlcqw;

[email protected]:(none) 11:34:49 >crate table haha(cc int);

[email protected]:(none) 11:34:49 >drop table haha;

5.查看binlog记录

导出binlog内容:

# mysqlbinlog mysql-bin.000079 > /root/9.txt

查询log表:

[email protected]:(none) 11:39:41 >use dba;

Reading table information for completion of table and column names

You can turn off this feature to get a quicker startup with -A

Database changed

[email protected]:dba 11:39:50 >select * from accesslog limit 1;

+-----------+---------------------+------------------------+----------------+

| thread_id | time                | localname              | machine_name   |

+-----------+---------------------+------------------------+----------------+

|    279950 | 2018-05-24 08:51:37 | [email protected] | [email protected]% |

+-----------+---------------------+------------------------+----------------+

1 row in set (0.00 sec)

6.查看binlog内容

上面的线程是279950

# cat 9.txt | grep -B 10  haha

# at 267289752

#180524  8:52:35 server id 1  end_log_pos 267289794 CRC32 0x542b2211    GTID 0-1-2743823 ddl

/*!100001 SET @@session.gtid_seq_no=2743823*//*!*/;

# at 267289794

#180524  8:52:35 server id 1  end_log_pos 267289888 CRC32 0x6d9ec74d    Query   thread_id=279950        exec_time=0     error_code=0

use `sdlcqw`/*!*/;

SET TIMESTAMP=1527123155/*!*/;

SET @@session.sql_auto_is_null=0, @@session.check_constraint_checks=1/*!*/;

/*!\C utf8 *//*!*/;

SET @@session.character_set_client=33,@@session.collation_connection=33,@@session.collation_server=33/*!*/;

create table haha(cc int)

--

#180524  8:52:42 server id 1  end_log_pos 267296661 CRC32 0x4552d77e    Xid = 105731850

COMMIT/*!*/;

# at 267296661

#180524  8:52:42 server id 1  end_log_pos 267296703 CRC32 0x42549f0e    GTID 0-1-2743846 ddl

/*!100001 SET @@session.gtid_seq_no=2743846*//*!*/;

# at 267296703

#180524  8:52:42 server id 1  end_log_pos 267296815 CRC32 0x8b715e13    Query   thread_id=279950        exec_time=0     error_code=0

use `sdlcqw`/*!*/;

SET TIMESTAMP=1527123162/*!*/;

SET @@session.sql_mode=1342177280/*!*/;

DROP TABLE `haha` /* generated by server */

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
记录所有的用户历史记录,可以使用MySQL来创建一个用户历史记录表。这个表可以包含以下几个字段:用户ID、动作、操作时间等。 首先,创建一个用户历史记录表,可以使用以下SQL语句: CREATE TABLE user_history ( id INT AUTO_INCREMENT PRIMARY KEY, user_id INT, action VARCHAR(255), action_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); 在这个表中,id字段是用作唯一标识每条历史记录的主键。user_id字段用来记录用户的ID。action字段用来记录用户的动作,可以是任意的文本。action_time字段用来记录动作发生的时间,默认值为当前时间戳。 当用户进行了一个动作后,通过INSERT INTO语句将相关信息插入到用户历史记录表中。例如,当用户ID为1的用户进行了登录操作时,可以使用以下SQL语句将登录历史记录插入到用户历史记录表中: INSERT INTO user_history (user_id, action) VALUES (1, '登录'); 通过这种方式,可以记录用户的登录、注册、修改信息等历史记录。要查看用户的历史记录,可以使用SELECT语句来查询用户历史记录表。例如,要查看用户ID为1的用户的所有历史记录,可以使用以下SQL语句: SELECT * FROM user_history WHERE user_id = 1; 通过这种方式,可以获得用户ID为1的用户的所有历史记录。可以根据需要进行进一步的数据处理和展示。 总之,通过使用MySQL创建一个用户历史记录表,并使用INSERT和SELECT语句来记录和查询历史记录,可以方便地追踪和维护用户的历史操作

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值