我正在尝试记录我的 MySQL 服务器中的所有连接尝试(不用担心,这是一个低流量的服务器)。这是我的 my.cnf 文件:
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
general_log=1
general_log_file=/var/log/mysqld.log
但是,重新启动后,它不起作用。当连接到数据库时,我在日志中看到的只是:
[ERROR] Invalid (old?) table or database name '.pki'
服务器版本是 5.1.73。我做错了什么?(此外,尽管这是一个流量较低的服务器,但启用记录到 SQL 表而不是文件是否有任何性能优势?)
答案1
我之前也有这个需求,并按照以下步骤记录连接。希望这对你有帮助。
创建表来存储连接信息。如果您不想,则不必包含唯一键。
创建表 admin.connections(id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,connect_time DATETIME NOT NULL,user_host VARCHAR(50)NOT NULL,connection_id INT UNSIGNED NOT NULL);
设置 init-connect 变量。这是每个连接客户端都要执行的字符串。详情请见此处。
设置全局 init_connect = "插入admin.connections(connect_time, user, connection_id) 值(NOW(), CURRENT_USER(), CONNECTION_ID());";
检查所有用户的权限,以确保他们可以将记录插入 admin.connections 表中。
以不具有全局权限的用户身份登录,应在 admin.connections 表中插入一行。请注意,init-connect 系统变量对具有全局权限的用户不起作用。无论好坏,我们所有 DBA 都知道这意味着什么。
观察你的连接表的成长和繁荣。你刚刚开始了一个新的宠物(项目)。