Commit 572891bf authored by monty@mashka.mysql.fi's avatar monty@mashka.mysql.fi

Merge work:/my/mysql-3.23 into mashka.mysql.fi:/home/my/mysql-3.23

parents 1ea4690b d686ef72
...@@ -46928,6 +46928,8 @@ not yet 100% confident in this code. ...@@ -46928,6 +46928,8 @@ not yet 100% confident in this code.
@appendixsubsec Changes in release 3.23.52 @appendixsubsec Changes in release 3.23.52
@itemize @bullet @itemize @bullet
@item @item
Added name of 'administrator command' logs.
@item
Fixed bug with creating an auto-increment value on second part of a Fixed bug with creating an auto-increment value on second part of a
@code{UNIQUE()} key where first part could contain NULL values. @code{UNIQUE()} key where first part could contain NULL values.
@item @item
...@@ -481,7 +481,7 @@ int main(int argc,char **argv) ...@@ -481,7 +481,7 @@ int main(int argc,char **argv)
int error; int error;
MY_INIT(argv[0]); MY_INIT(argv[0]);
start_value=6130115L; best_t1=3632784L; best_t2=86437L; best_type=3; /* mode=4229 add=2 type: 0 */ start_value=7740512L; best_t1=7953583L; best_t2=6918639L; best_type=1; /* mode=5449 add=1 type: 0 */
if (get_options(argc,(char **) argv)) if (get_options(argc,(char **) argv))
exit(1); exit(1);
......
/* Copyright (C) 2000 MySQL AB & MySQL Finland AB & InnoDB Oy /* Copyright (C) 2000 MySQL AB & InnoDB Oy
This program is free software; you can redistribute it and/or modify This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by it under the terms of the GNU General Public License as published by
...@@ -93,8 +93,8 @@ are determined in innobase_init below: */ ...@@ -93,8 +93,8 @@ are determined in innobase_init below: */
/* innobase_data_file_path=ibdata:15,idata2:1,... */ /* innobase_data_file_path=ibdata:15,idata2:1,... */
char* innobase_data_home_dir = NULL;
char* innobase_data_file_path = NULL; char* innobase_data_file_path = NULL;
char* innobase_data_home_dir = NULL;
char* innobase_log_group_home_dir = NULL; char* innobase_log_group_home_dir = NULL;
char* innobase_log_arch_dir = NULL; char* innobase_log_arch_dir = NULL;
char* innobase_unix_file_flush_method = NULL; char* innobase_unix_file_flush_method = NULL;
...@@ -254,8 +254,6 @@ convert_error_code_to_mysql( ...@@ -254,8 +254,6 @@ convert_error_code_to_mysql(
return(HA_ERR_TO_BIG_ROW); return(HA_ERR_TO_BIG_ROW);
} else { } else {
dbug_assert(0);
return(-1); // Unknown error return(-1); // Unknown error
} }
} }
...@@ -277,29 +275,40 @@ innobase_mysql_print_thd( ...@@ -277,29 +275,40 @@ innobase_mysql_print_thd(
thd = (THD*) input_thd; thd = (THD*) input_thd;
buf += sprintf(buf, "MySQL thread id %lu, query id %lu", /* We can't use value of sprintf() as this is not portable */
thd->thread_id, thd->query_id); buf=my_sprintf(buf,
if (thd->host) { (buf, "MySQL thread id %lu, query id %lu",
buf += sprintf(buf, " %.30s", thd->host); thd->thread_id, thd->query_id));
if (thd->host)
{
*buf++=' ';
buf=strnmov(buf, thd->host, 30);
} }
if (thd->ip) { if (thd->ip)
buf += sprintf(buf, " %.20s", thd->ip); {
*buf++=' ';
buf=strnmov(buf, thd->ip, 20);
} }
if (thd->user) { if (thd->user)
buf += sprintf(buf, " %.20s", thd->user); {
*buf++=' ';
buf=strnmov(buf, thd->user, 20);
} }
if (thd->proc_info) { if (thd->proc_info)
buf += sprintf(buf, " %.50s", thd->proc_info); {
*buf++=' ';
buf=strnmov(buf, thd->procinfo, 50);
} }
if (thd->query) { if (thd->query)
buf += sprintf(buf, "\n%.150s", thd->query); {
*buf++=' ';
buf=strnmov(buf, thd->query, 150);
} }
*buf='\n';
buf += sprintf(buf, "\n");
} }
} }
...@@ -401,6 +410,11 @@ innobase_init(void) ...@@ -401,6 +410,11 @@ innobase_init(void)
os_innodb_umask = (ulint)my_umask; os_innodb_umask = (ulint)my_umask;
/* Use current_dir if no paths are set */
current_dir[0] = FN_CURLIB;
current_dir[1] = FN_LIBCHAR;
current_dir[2] = 0;
if (specialflag & SPECIAL_NO_PRIOR) { if (specialflag & SPECIAL_NO_PRIOR) {
srv_set_thread_priorities = FALSE; srv_set_thread_priorities = FALSE;
} else { } else {
...@@ -408,11 +422,6 @@ innobase_init(void) ...@@ -408,11 +422,6 @@ innobase_init(void)
srv_query_thread_priority = QUERY_PRIOR; srv_query_thread_priority = QUERY_PRIOR;
} }
/* Use current_dir if no paths are set */
current_dir[0] = FN_CURLIB;
current_dir[1] = FN_LIBCHAR;
current_dir[2] = 0;
/* Set InnoDB initialization parameters according to the values /* Set InnoDB initialization parameters according to the values
read from MySQL .cnf file */ read from MySQL .cnf file */
...@@ -452,9 +461,8 @@ innobase_init(void) ...@@ -452,9 +461,8 @@ innobase_init(void)
DBUG_RETURN(TRUE); DBUG_RETURN(TRUE);
} }
if (!innobase_log_group_home_dir) { if (!innobase_log_group_home_dir)
innobase_log_group_home_dir = current_dir; innobase_log_group_home_dir = current_dir;
}
ret = (bool) ret = (bool)
srv_parse_log_group_home_dirs(innobase_log_group_home_dir, srv_parse_log_group_home_dirs(innobase_log_group_home_dir,
...@@ -797,7 +805,7 @@ normalize_table_name( ...@@ -797,7 +805,7 @@ normalize_table_name(
name_ptr = ptr + 1; name_ptr = ptr + 1;
dbug_assert(ptr > name); DBUG_ASSERT(ptr > name);
ptr--; ptr--;
...@@ -824,7 +832,7 @@ normalize_table_name( ...@@ -824,7 +832,7 @@ normalize_table_name(
} }
/********************************************************************* /*********************************************************************
Creates and opens a handle to a table which already exists in an Innnobase Creates and opens a handle to a table which already exists in an Innobase
database. */ database. */
int int
...@@ -909,20 +917,22 @@ ha_innobase::open( ...@@ -909,20 +917,22 @@ ha_innobase::open(
primary_key = 0; primary_key = 0;
key_used_on_scan = 0; key_used_on_scan = 0;
/* MySQL allocates the buffer for ref */ /*
MySQL allocates the buffer for ref.
This includes all keys + one byte for each column
that may be NULL.
The ref_length must be exact as possible as
all reference buffers are allocated based on this.
*/
ref_length = table->key_info->key_length ref_length = table->key_info->key_length;
+ table->key_info->key_parts + 10;
/* One byte per key field is consumed to the SQL NULL
info of the field; we add also 10 bytes of safety margin */
} else { } else {
((row_prebuilt_t*)innobase_prebuilt) ((row_prebuilt_t*)innobase_prebuilt)
->clust_index_was_generated = TRUE; ->clust_index_was_generated = TRUE;
ref_length = DATA_ROW_ID_LEN + 10; ref_length = DATA_ROW_ID_LEN;
dbug_assert(key_used_on_scan == MAX_KEY); DBUG_ASSERT(key_used_on_scan == MAX_KEY);
} }
auto_inc_counter_for_this_stat = 0; auto_inc_counter_for_this_stat = 0;
...@@ -1069,8 +1079,8 @@ innobase_mysql_cmp( ...@@ -1069,8 +1079,8 @@ innobase_mysql_cmp(
enum_field_types mysql_tp; enum_field_types mysql_tp;
int ret; int ret;
dbug_assert(a_length != UNIV_SQL_NULL); DBUG_ASSERT(a_length != UNIV_SQL_NULL);
dbug_assert(b_length != UNIV_SQL_NULL); DBUG_ASSERT(b_length != UNIV_SQL_NULL);
mysql_tp = (enum_field_types) mysql_type; mysql_tp = (enum_field_types) mysql_type;
...@@ -1108,11 +1118,11 @@ get_innobase_type_from_mysql_type( ...@@ -1108,11 +1118,11 @@ get_innobase_type_from_mysql_type(
8 bits: this is used in ibuf and also when DATA_NOT_NULL is 8 bits: this is used in ibuf and also when DATA_NOT_NULL is
ORed to the type */ ORed to the type */
dbug_assert((ulint)FIELD_TYPE_STRING < 256); DBUG_ASSERT((ulint)FIELD_TYPE_STRING < 256);
dbug_assert((ulint)FIELD_TYPE_VAR_STRING < 256); DBUG_ASSERT((ulint)FIELD_TYPE_VAR_STRING < 256);
dbug_assert((ulint)FIELD_TYPE_DOUBLE < 256); DBUG_ASSERT((ulint)FIELD_TYPE_DOUBLE < 256);
dbug_assert((ulint)FIELD_TYPE_FLOAT < 256); DBUG_ASSERT((ulint)FIELD_TYPE_FLOAT < 256);
dbug_assert((ulint)FIELD_TYPE_DECIMAL < 256); DBUG_ASSERT((ulint)FIELD_TYPE_DECIMAL < 256);
switch (field->type()) { switch (field->type()) {
case FIELD_TYPE_VAR_STRING: if (field->flags & BINARY_FLAG) { case FIELD_TYPE_VAR_STRING: if (field->flags & BINARY_FLAG) {
...@@ -1204,7 +1214,12 @@ ha_innobase::store_key_val_for_row( ...@@ -1204,7 +1214,12 @@ ha_innobase::store_key_val_for_row(
buff += key_part->length; buff += key_part->length;
} }
DBUG_RETURN(buff - buff_start); /*
We have to zero-fill the buffer to be able to compare two
keys to see if they are equal
*/
bzero(buff, (ref_length- (uint) (buff - buff_start)));
DBUG_RETURN(ref_length);
} }
/****************************************************************** /******************************************************************
...@@ -1994,7 +2009,7 @@ ha_innobase::change_active_index( ...@@ -1994,7 +2009,7 @@ ha_innobase::change_active_index(
statistic_increment(ha_read_key_count, &LOCK_status); statistic_increment(ha_read_key_count, &LOCK_status);
DBUG_ENTER("index_read_idx"); DBUG_ENTER("change_active_index");
active_index = keynr; active_index = keynr;
...@@ -2013,10 +2028,10 @@ ha_innobase::change_active_index( ...@@ -2013,10 +2028,10 @@ ha_innobase::change_active_index(
"InnoDB: Could not find key n:o %u with name %s from dict cache\n" "InnoDB: Could not find key n:o %u with name %s from dict cache\n"
"InnoDB: for table %s\n", keynr, key ? key->name : "NULL", prebuilt->table->name); "InnoDB: for table %s\n", keynr, key ? key->name : "NULL", prebuilt->table->name);
return(1); DBUG_RETURN(1);
} }
assert(prebuilt->search_tuple); assert(prebuilt->search_tuple != 0);
dtuple_set_n_fields(prebuilt->search_tuple, prebuilt->index->n_fields); dtuple_set_n_fields(prebuilt->search_tuple, prebuilt->index->n_fields);
...@@ -2029,7 +2044,7 @@ ha_innobase::change_active_index( ...@@ -2029,7 +2044,7 @@ ha_innobase::change_active_index(
build_template(prebuilt, user_thd, table, ROW_MYSQL_WHOLE_ROW); build_template(prebuilt, user_thd, table, ROW_MYSQL_WHOLE_ROW);
return(0); DBUG_RETURN(0);
} }
/************************************************************************** /**************************************************************************
...@@ -2349,7 +2364,7 @@ ha_innobase::position( ...@@ -2349,7 +2364,7 @@ ha_innobase::position(
len = store_key_val_for_row(primary_key, (char*) ref, record); len = store_key_val_for_row(primary_key, (char*) ref, record);
} }
dbug_assert(len <= ref_length); DBUG_ASSERT(len == ref_length);
ref_stored_len = len; ref_stored_len = len;
} }
...@@ -2441,7 +2456,8 @@ create_index( ...@@ -2441,7 +2456,8 @@ create_index(
ind_type = 0; ind_type = 0;
if (strcmp(key->name, "PRIMARY") == 0) { if (key_num == form->primary_key)
{
ind_type = ind_type | DICT_CLUSTERED; ind_type = ind_type | DICT_CLUSTERED;
} }
...@@ -2513,23 +2529,23 @@ ha_innobase::create( ...@@ -2513,23 +2529,23 @@ ha_innobase::create(
int error; int error;
dict_table_t* innobase_table; dict_table_t* innobase_table;
trx_t* trx; trx_t* trx;
int primary_key_no = -1; int primary_key_no;
KEY* key;
uint i; uint i;
char name2[FN_REFLEN]; char name2[FN_REFLEN];
char norm_name[FN_REFLEN]; char norm_name[FN_REFLEN];
THD *thd= current_thd;
DBUG_ENTER("ha_innobase::create"); DBUG_ENTER("ha_innobase::create");
assert(current_thd != NULL); DBUG_ASSERT(thd != NULL);
trx = trx_allocate_for_mysql(); trx = trx_allocate_for_mysql();
if (current_thd->options & OPTION_NO_FOREIGN_KEY_CHECKS) { if (thd->options & OPTION_NO_FOREIGN_KEY_CHECKS) {
trx->check_foreigns = FALSE; trx->check_foreigns = FALSE;
} }
if (current_thd->options & OPTION_RELAXED_UNIQUE_CHECKS) { if (thd->options & OPTION_RELAXED_UNIQUE_CHECKS) {
trx->check_unique_secondary = FALSE; trx->check_unique_secondary = FALSE;
} }
...@@ -2559,13 +2575,9 @@ ha_innobase::create( ...@@ -2559,13 +2575,9 @@ ha_innobase::create(
/* Look for a primary key */ /* Look for a primary key */
for (i = 0; i < form->keys; i++) { primary_key_no= (table->primary_key != MAX_KEY ?
key = form->key_info + i; (int) table->primary_key :
-1);
if (strcmp(key->name, "PRIMARY") == 0) {
primary_key_no = (int) i;
}
}
/* Our function row_get_mysql_key_number_for_index assumes /* Our function row_get_mysql_key_number_for_index assumes
the primary key is always number 0, if it exists */ the primary key is always number 0, if it exists */
...@@ -2651,7 +2663,7 @@ ha_innobase::create( ...@@ -2651,7 +2663,7 @@ ha_innobase::create(
innobase_table = dict_table_get(norm_name, NULL); innobase_table = dict_table_get(norm_name, NULL);
assert(innobase_table); assert(innobase_table != 0);
/* Tell the InnoDB server that there might be work for /* Tell the InnoDB server that there might be work for
utility threads: */ utility threads: */
...@@ -2750,14 +2762,7 @@ innobase_drop_database( ...@@ -2750,14 +2762,7 @@ innobase_drop_database(
namebuf[len + 1] = '\0'; namebuf[len + 1] = '\0';
#ifdef __WIN__ #ifdef __WIN__
/* Put to lower case */ casedn_str(namebuf);
ptr = namebuf;
while (*ptr != '\0') {
*ptr = tolower(*ptr);
ptr++;
}
#endif #endif
trx = trx_allocate_for_mysql(); trx = trx_allocate_for_mysql();
...@@ -2948,7 +2953,7 @@ ha_innobase::estimate_number_of_rows(void) ...@@ -2948,7 +2953,7 @@ ha_innobase::estimate_number_of_rows(void)
estimate = 2 * data_file_length / dict_index_calc_min_rec_len(index); estimate = 2 * data_file_length / dict_index_calc_min_rec_len(index);
return((ha_rows) estimate); DBUG_RETURN((ha_rows) estimate);
} }
/************************************************************************* /*************************************************************************
...@@ -3144,8 +3149,9 @@ ha_innobase::update_table_comment( ...@@ -3144,8 +3149,9 @@ ha_innobase::update_table_comment(
*pos++=' '; *pos++=' ';
} }
pos += sprintf(pos, "InnoDB free: %lu kB", pos += my_sprintf(pos,
(ulong) innobase_get_free_space()); (pos,"InnoDB free: %lu kB",
(ulong) innobase_get_free_space()));
/* We assume 450 - length bytes of space to print info */ /* We assume 450 - length bytes of space to print info */
...@@ -3322,6 +3328,7 @@ ha_innobase::external_lock( ...@@ -3322,6 +3328,7 @@ ha_innobase::external_lock(
& (OPTION_NOT_AUTO_COMMIT | OPTION_BEGIN))) { & (OPTION_NOT_AUTO_COMMIT | OPTION_BEGIN))) {
innobase_commit(thd, trx); innobase_commit(thd, trx);
thd->transaction.all.innodb_active_trans=0;
} }
} }
} }
......
...@@ -232,7 +232,7 @@ static SYMBOL symbols[] = { ...@@ -232,7 +232,7 @@ static SYMBOL symbols[] = {
{ "NCHAR", SYM(NCHAR_SYM),0,0}, { "NCHAR", SYM(NCHAR_SYM),0,0},
{ "NUMERIC", SYM(NUMERIC_SYM),0,0}, { "NUMERIC", SYM(NUMERIC_SYM),0,0},
{ "NO", SYM(NO_SYM),0,0}, { "NO", SYM(NO_SYM),0,0},
{ "NO_FOREIGN_KEY_CHECKS", SYM(NO_FOREIGN_KEY_CHECKS), 0, 0}, { "FOREIGN_KEY_CHECKS", SYM(FOREIGN_KEY_CHECKS), 0, 0},
{ "NOT", SYM(NOT),0,0}, { "NOT", SYM(NOT),0,0},
{ "NULL", SYM(NULL_SYM),0,0}, { "NULL", SYM(NULL_SYM),0,0},
{ "ON", SYM(ON),0,0}, { "ON", SYM(ON),0,0},
...@@ -261,7 +261,7 @@ static SYMBOL symbols[] = { ...@@ -261,7 +261,7 @@ static SYMBOL symbols[] = {
{ "REFERENCES", SYM(REFERENCES),0,0}, { "REFERENCES", SYM(REFERENCES),0,0},
{ "RELOAD", SYM(RELOAD),0,0}, { "RELOAD", SYM(RELOAD),0,0},
{ "REGEXP", SYM(REGEXP),0,0}, { "REGEXP", SYM(REGEXP),0,0},
{ "RELAXED_UNIQUE_CHECKS", SYM(RELAXED_UNIQUE_CHECKS), 0, 0}, { "UNIQUE_CHECKS", SYM(UNIQUE_CHECKS), 0, 0},
{ "RENAME", SYM(RENAME),0,0}, { "RENAME", SYM(RENAME),0,0},
{ "REPAIR", SYM(REPAIR),0,0}, { "REPAIR", SYM(REPAIR),0,0},
{ "REPLACE", SYM(REPLACE),0,0}, { "REPLACE", SYM(REPLACE),0,0},
......
...@@ -948,16 +948,16 @@ bool MYSQL_LOG::write(THD *thd,const char *query, uint query_length, ...@@ -948,16 +948,16 @@ bool MYSQL_LOG::write(THD *thd,const char *query, uint query_length,
if (end != buff) if (end != buff)
{ {
*end++=';'; *end++=';';
*end++='\n'; *end='\n';
*end=0;
if (my_b_write(&log_file, (byte*) "SET ",4) || if (my_b_write(&log_file, (byte*) "SET ",4) ||
my_b_write(&log_file, (byte*) buff+1,(uint) (end-buff)-1)) my_b_write(&log_file, (byte*) buff+1,(uint) (end-buff)))
tmp_errno=errno; tmp_errno=errno;
} }
if (!query) if (!query)
{ {
query="#adminstrator command"; end=strxmov(buff, "# administrator command: ",
query_length=21; command_name[thd->command], NullS);
query_length=(ulong) (end-buff);
} }
if (my_b_write(&log_file, (byte*) query,query_length) || if (my_b_write(&log_file, (byte*) query,query_length) ||
my_b_write(&log_file, (byte*) ";\n",2) || my_b_write(&log_file, (byte*) ";\n",2) ||
......
...@@ -224,7 +224,7 @@ bool my_yyoverflow(short **a, YYSTYPE **b,int *yystacksize); ...@@ -224,7 +224,7 @@ bool my_yyoverflow(short **a, YYSTYPE **b,int *yystacksize);
%token NATURAL %token NATURAL
%token NCHAR_SYM %token NCHAR_SYM
%token NOT %token NOT
%token NO_FOREIGN_KEY_CHECKS %token FOREIGN_KEY_CHECKS
%token NO_SYM %token NO_SYM
%token NULL_SYM %token NULL_SYM
%token NUM %token NUM
...@@ -253,7 +253,6 @@ bool my_yyoverflow(short **a, YYSTYPE **b,int *yystacksize); ...@@ -253,7 +253,6 @@ bool my_yyoverflow(short **a, YYSTYPE **b,int *yystacksize);
%token REAL_NUM %token REAL_NUM
%token REFERENCES %token REFERENCES
%token REGEXP %token REGEXP
%token RELAXED_UNIQUE_CHECKS
%token RELOAD %token RELOAD
%token RENAME %token RENAME
%token REPEATABLE_SYM %token REPEATABLE_SYM
...@@ -289,6 +288,7 @@ bool my_yyoverflow(short **a, YYSTYPE **b,int *yystacksize); ...@@ -289,6 +288,7 @@ bool my_yyoverflow(short **a, YYSTYPE **b,int *yystacksize);
%token UNCOMMITTED_SYM %token UNCOMMITTED_SYM
%token UNION_SYM %token UNION_SYM
%token UNIQUE_SYM %token UNIQUE_SYM
%token UNIQUE_CHECKS
%token USAGE %token USAGE
%token USE_SYM %token USE_SYM
%token USING %token USING
...@@ -2606,7 +2606,7 @@ keyword: ...@@ -2606,7 +2606,7 @@ keyword:
| MYISAM_SYM {} | MYISAM_SYM {}
| NATIONAL_SYM {} | NATIONAL_SYM {}
| NCHAR_SYM {} | NCHAR_SYM {}
| NO_FOREIGN_KEY_CHECKS {} | FOREIGN_KEY_CHECKS {}
| NO_SYM {} | NO_SYM {}
| OPEN_SYM {} | OPEN_SYM {}
| PACK_KEYS_SYM {} | PACK_KEYS_SYM {}
...@@ -2619,7 +2619,7 @@ keyword: ...@@ -2619,7 +2619,7 @@ keyword:
| RAID_CHUNKSIZE {} | RAID_CHUNKSIZE {}
| RAID_STRIPED_SYM {} | RAID_STRIPED_SYM {}
| RAID_TYPE {} | RAID_TYPE {}
| RELAXED_UNIQUE_CHECKS {} | UNIQUE_CHECKS {}
| RELOAD {} | RELOAD {}
| REPAIR {} | REPAIR {}
| REPEATABLE_SYM {} | REPEATABLE_SYM {}
...@@ -2777,16 +2777,16 @@ option_value: ...@@ -2777,16 +2777,16 @@ option_value:
slave_skip_counter = $3; slave_skip_counter = $3;
pthread_mutex_unlock(&LOCK_slave); pthread_mutex_unlock(&LOCK_slave);
} }
| NO_FOREIGN_KEY_CHECKS equal NUM | FOREIGN_KEY_CHECKS equal NUM
{ {
if (atoi($3.str) != 0) if (atoi($3.str) == 0)
Lex->options|= OPTION_NO_FOREIGN_KEY_CHECKS; Lex->options|= OPTION_NO_FOREIGN_KEY_CHECKS;
else else
Lex->options&= ~(OPTION_NO_FOREIGN_KEY_CHECKS); Lex->options&= ~(OPTION_NO_FOREIGN_KEY_CHECKS);
} }
| RELAXED_UNIQUE_CHECKS equal NUM | UNIQUE_CHECKS equal NUM
{ {
if (atoi($3.str) != 0) if (atoi($3.str) == 0)
Lex->options|= OPTION_RELAXED_UNIQUE_CHECKS; Lex->options|= OPTION_RELAXED_UNIQUE_CHECKS;
else else
Lex->options&= ~(OPTION_RELAXED_UNIQUE_CHECKS); Lex->options&= ~(OPTION_RELAXED_UNIQUE_CHECKS);
......
...@@ -382,6 +382,7 @@ fi ...@@ -382,6 +382,7 @@ fi
%attr(755, root, root) /usr/bin/safe_mysqld %attr(755, root, root) /usr/bin/safe_mysqld
%attr(755, root, root) /usr/bin/mysqld_multi %attr(755, root, root) /usr/bin/mysqld_multi
%attr(755, root, root) /usr/bin/my_print_defaults %attr(755, root, root) /usr/bin/my_print_defaults
%attr(755, root, root) /usr/bin/mysqldumpslow
%attr(644, root, root) /usr/info/mysql.info* %attr(644, root, root) /usr/info/mysql.info*
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment