Fix a problem in crash recovery of .ibd files on Windows if the user used lower_case_table_names=0 or 2; the directory scan in crash recovery forgot to put all paths to lower case, so that the tablespace name would be consistent with the internal data dictionary of InnoDB; remember that InnoDB puts internally all database names and table names to lower case on Windows, regardless of the value of lower_case_table_names
Add fault tolerance in the scan of .ibd files at a crash recovery; formerly a single failure of readdir_get_next caused the rest of the directory to be skipped
At the shutdown, write the latest lsn only to the first pages of the ibdata files of the system tablespace, NOT to the .ibd files; writing to tens of thousands .ibd files can take minutes
Do not test the value of err if the lock operation was skipped because innodb_logs_unsafe_for_binlog was TRUE; though this did not cause any bugs visible to the user, because err is inited to DB_SUCCESS at the start of the function row_search_for_mysql()
between two server instances at server shutdown/startup.
This conflict on advisory locks appears to be the result of a bug
in the operating system; these locks should be released when the
files are closed, but somehow that does not always happen
immediately in Linux. (Bug #9381)
Add diagnostic code to track assertion failure in ut_a(cursor->old_stored == BTR_PCUR_OLD_STORED); the failure happened in OPTIMIZE TABLE, and in 4.0.24 in some other context
If MySQL wrote to its binlog, but for some reason trx->update_undo and trx->insert_undo were NULL in InnoDB, then trx->commit_lsn was garbage, and InnoDB could assert in the log flush of trx_commit_complete_for_mysql() (Bug #9277)
If MySQL wrote to its binlog, but for some reason trx->update_undo and trx->insert_undo were NULL in InnoDB, then trx->commit_lsn was garbage, and InnoDB could assert in the log flush of trx_commit_complete_for_mysql() (Bug #9277)
dict_load_table(): Remove the check for row_format=compact for now,
because the flag bit we used (high-order bit of mix_len)
has not been zero for at least two customers.
AIX 5.1 after security patch ML7 seems to contain a bug that instead of EEXIST it sets errno to 0 if a file creation fails because the file already exists. Work around that bug by interpreting errno 0 in AIX as EEXIST.
Fix bug #8677: if one used LOCK TABLES, created an InnoDB temp table, and did a multi-table update where a MyISAM table was the update table and the temp table was a read table, then InnoDB aserted in row0sel.c because n_mysql_tables_in_use was 0. Also, we remove the assertion altogether and just print an error to the .err log if this important consistency check fails. Then it is up to the user to read the .err log and notice the problem if there still are errors in MySQL's table locking.
Use a 32-bit right-shift implementation through a 64-bit integer that should work ok for both gcc and Visual C++; the code depended on defining SIZEOF_LONG, and that is not set when compiling ibbackup
Fix Windows porting bugs that broke ibbackup: 1) wrong error check in for CreateDirectory(), 2) wrong error check if the file did not exist in DeleteFile(), 3) too strict sharing restrictions in os_file_create_simple(): when ibbackup called that function, it would not allow mysqld to write to the file
We accidentally checked if the DIRECTORY is of type OS_FILE_TYPE_UNKNOWN; our intention was to check if the FILE is that; best to remove the check altogether, as in crash recovery it is safest to try to open also files whose type is unknown
os0file.c:
Fix a bug: in Windows, os_file_readdir_next_file() returned OS_FILE_TYPE_UNKNOWN as the type of a regular file; this did not break mysqld, but did break ibbackup on Windows