Added variable eventslog_buffer_max_query_length

In MySQL_Event copy constructor, queries are copied up to
eventslog_buffer_max_query_length bytes.
v2.x-logging_mem
René Cannaò 2 years ago
parent 8e768f4e2d
commit 56eb2115d0

@ -535,6 +535,7 @@ class MySQL_Threads_Handler
char *eventslog_filename;
int eventslog_filesize;
int eventslog_buffer_history_size;
int eventslog_buffer_max_query_length;
int eventslog_default_log;
int eventslog_format;
char *auditlog_filename;

@ -893,6 +893,7 @@ __thread char * mysql_thread___ssl_p2s_crlpath;
__thread char * mysql_thread___eventslog_filename;
__thread int mysql_thread___eventslog_filesize;
__thread int mysql_thread___eventslog_buffer_history_size;
__thread int mysql_thread___eventslog_buffer_max_query_length;
__thread int mysql_thread___eventslog_default_log;
__thread int mysql_thread___eventslog_format;
@ -1066,6 +1067,7 @@ extern __thread char * mysql_thread___ssl_p2s_crlpath;
extern __thread char * mysql_thread___eventslog_filename;
extern __thread int mysql_thread___eventslog_filesize;
extern __thread int mysql_thread___eventslog_buffer_history_size;
extern __thread int mysql_thread___eventslog_buffer_max_query_length;
extern __thread int mysql_thread___eventslog_default_log;
extern __thread int mysql_thread___eventslog_format;

@ -80,9 +80,12 @@ MySQL_Event::MySQL_Event(const MySQL_Event &other) {
}
// query_ptr is NOT null terminated
if (other.query_ptr != nullptr) {
query_ptr = (char *)malloc(query_len+1);
memcpy(query_ptr, other.query_ptr, query_len);
query_ptr[query_len] = '\0';
size_t maxQueryLen = mysql_thread___eventslog_buffer_max_query_length;
size_t lenToCopy = std::min(other.query_len, maxQueryLen);
query_ptr = (char*)malloc(lenToCopy + 1); // +1 for null terminator
memcpy(query_ptr, other.query_ptr, lenToCopy);
query_ptr[lenToCopy] = '\0'; // Null-terminate the copied string
query_len = lenToCopy;
}
// server is NOT null terminated
if (other.server != nullptr) {
@ -1217,7 +1220,7 @@ void MySQL_Logger::insertMysqlEventsIntoDb(SQLite3DB * db, const std::string& ta
rc = (*proxy_sqlite3_bind_int64)(statement32, (idx*numcols)+5, event->end_time); ASSERT_SQLITE_OK(rc, db);
sprintf(digest_hex_str, "0x%016llX", (long long unsigned int)event->query_digest);
rc = (*proxy_sqlite3_bind_text)(statement32, (idx*numcols)+6, digest_hex_str, -1, SQLITE_TRANSIENT); ASSERT_SQLITE_OK(rc, db);
rc = (*proxy_sqlite3_bind_text)(statement32, (idx*numcols)+7, event->query_ptr, event->query_len, SQLITE_TRANSIENT); ASSERT_SQLITE_OK(rc, db);
rc = (*proxy_sqlite3_bind_text)(statement32, (idx*numcols)+7, event->query_ptr, -1, SQLITE_TRANSIENT); ASSERT_SQLITE_OK(rc, db); // MySQL_Events from circular-buffer are all null-terminated
rc = (*proxy_sqlite3_bind_text)(statement32, (idx*numcols)+8, event->server, -1, SQLITE_TRANSIENT); ASSERT_SQLITE_OK(rc, db);
rc = (*proxy_sqlite3_bind_text)(statement32, (idx*numcols)+9, event->client, -1, SQLITE_TRANSIENT); ASSERT_SQLITE_OK(rc, db);
rc = (*proxy_sqlite3_bind_int)(statement32, (idx*numcols)+10, (int)event->et); ASSERT_SQLITE_OK(rc, db); // Assuming event_type is an enum mapped to integers
@ -1242,7 +1245,7 @@ void MySQL_Logger::insertMysqlEventsIntoDb(SQLite3DB * db, const std::string& ta
rc = (*proxy_sqlite3_bind_int64)(statement1, 5, event->end_time); ASSERT_SQLITE_OK(rc, db);
sprintf(digest_hex_str, "0x%016llX", (long long unsigned int)event->query_digest);
rc = (*proxy_sqlite3_bind_text)(statement1, 6, digest_hex_str, -1, SQLITE_TRANSIENT); ASSERT_SQLITE_OK(rc, db);
rc = (*proxy_sqlite3_bind_text)(statement1, 7, event->query_ptr, event->query_len, SQLITE_TRANSIENT); ASSERT_SQLITE_OK(rc, db);
rc = (*proxy_sqlite3_bind_text)(statement1, 7, event->query_ptr, -1, SQLITE_TRANSIENT); ASSERT_SQLITE_OK(rc, db); // MySQL_Events from circular-buffer are all null-terminated
rc = (*proxy_sqlite3_bind_text)(statement1, 8, event->server, -1, SQLITE_TRANSIENT); ASSERT_SQLITE_OK(rc, db);
rc = (*proxy_sqlite3_bind_text)(statement1, 9, event->client, -1, SQLITE_TRANSIENT); ASSERT_SQLITE_OK(rc, db);
rc = (*proxy_sqlite3_bind_int)(statement1, 10, (int)event->et); ASSERT_SQLITE_OK(rc, db); // Assuming event_type is an enum mapped to integers

@ -350,6 +350,7 @@ static char * mysql_thread_variables_names[]= {
(char *)"eventslog_filename",
(char *)"eventslog_filesize",
(char *)"eventslog_buffer_history_size",
(char *)"eventslog_buffer_max_query_length",
(char *)"eventslog_default_log",
(char *)"eventslog_format",
(char *)"auditlog_filename",
@ -1071,6 +1072,7 @@ MySQL_Threads_Handler::MySQL_Threads_Handler() {
variables.eventslog_filename=strdup((char *)""); // proxysql-mysql-eventslog is recommended
variables.eventslog_filesize=100*1024*1024;
variables.eventslog_buffer_history_size=0;
variables.eventslog_buffer_max_query_length = 32*1024;
variables.eventslog_default_log=0;
variables.eventslog_format=1;
variables.auditlog_filename=strdup((char *)"");
@ -2242,7 +2244,8 @@ char ** MySQL_Threads_Handler::get_variables_list() {
// logs
VariablesPointers_int["auditlog_filesize"] = make_tuple(&variables.auditlog_filesize, 1024*1024, 1*1024*1024*1024, false);
VariablesPointers_int["eventslog_filesize"] = make_tuple(&variables.eventslog_filesize, 1024*1024, 1*1024*1024*1024, false);
VariablesPointers_int["eventslog_buffer_history_size"] = make_tuple(&variables.eventslog_buffer_history_size, 0, 8*1024*1024, false);
VariablesPointers_int["eventslog_buffer_history_size"] = make_tuple(&variables.eventslog_buffer_history_size, 0, 8*1024*1024, false);
VariablesPointers_int["eventslog_buffer_max_query_length"] = make_tuple(&variables.eventslog_buffer_max_query_length, 128, 32*1024*1024, false);
VariablesPointers_int["eventslog_default_log"] = make_tuple(&variables.eventslog_default_log, 0, 1, false);
// various
VariablesPointers_int["long_query_time"] = make_tuple(&variables.long_query_time, 0, 20*24*3600*1000, false);
@ -4378,6 +4381,7 @@ void MySQL_Thread::refresh_variables() {
GloMyLogger->MyLogCB->setBufferSize(elmhs);
}
}
REFRESH_VARIABLE_INT(eventslog_buffer_max_query_length);
REFRESH_VARIABLE_INT(eventslog_default_log);
REFRESH_VARIABLE_INT(eventslog_format);
REFRESH_VARIABLE_CHAR(eventslog_filename);

Loading…
Cancel
Save