679
674
mtr_commit(&mtr);
677
/*****************************************************************//**
678
Updates the offset information about the end of the MySQL binlog entry
679
which corresponds to the transaction just being committed. In a MySQL
680
replication slave updates the latest master binlog position up to which
681
replication has proceeded. */
684
trx_sys_flush_commit_id(uint64_t commit_id, ulint field, mtr_t* mtr)
684
trx_sys_update_mysql_binlog_offset(
685
/*===============================*/
686
const char* file_name,/*!< in: MySQL log file name */
687
ib_int64_t offset, /*!< in: position in that log file */
688
ulint field, /*!< in: offset of the MySQL log info field in
689
the trx sys header */
690
mtr_t* mtr) /*!< in: mtr */
686
trx_sysf_t* sys_header;
692
trx_sysf_t* sys_header;
694
if (ut_strlen(file_name) >= TRX_SYS_MYSQL_LOG_NAME_LEN) {
696
/* We cannot fit the name to the 512 bytes we have reserved */
688
701
sys_header = trx_sysf_get(mtr);
690
mlog_write_ull(sys_header + field + TRX_SYS_DRIZZLE_MAX_COMMIT_ID,
703
if (mach_read_from_4(sys_header + field
704
+ TRX_SYS_MYSQL_LOG_MAGIC_N_FLD)
705
!= TRX_SYS_MYSQL_LOG_MAGIC_N) {
707
mlog_write_ulint(sys_header + field
708
+ TRX_SYS_MYSQL_LOG_MAGIC_N_FLD,
709
TRX_SYS_MYSQL_LOG_MAGIC_N,
713
if (0 != strcmp((char*) (sys_header + field + TRX_SYS_MYSQL_LOG_NAME),
716
mlog_write_string(sys_header + field
717
+ TRX_SYS_MYSQL_LOG_NAME,
718
(byte*) file_name, 1 + ut_strlen(file_name),
722
if (mach_read_from_4(sys_header + field
723
+ TRX_SYS_MYSQL_LOG_OFFSET_HIGH) > 0
724
|| (offset >> 32) > 0) {
726
mlog_write_ulint(sys_header + field
727
+ TRX_SYS_MYSQL_LOG_OFFSET_HIGH,
728
(ulint)(offset >> 32),
732
mlog_write_ulint(sys_header + field
733
+ TRX_SYS_MYSQL_LOG_OFFSET_LOW,
734
(ulint)(offset & 0xFFFFFFFFUL),
738
/*****************************************************************//**
739
Stores the MySQL binlog offset info in the trx system header if
740
the magic number shows it valid, and print the info to stderr */
697
trx_sys_read_commit_id(void)
743
trx_sys_print_mysql_binlog_offset(void)
698
744
/*===================================*/
700
trx_sysf_t* sys_header;
705
sys_header = trx_sysf_get(&mtr);
707
trx_sys_commit_id = mach_read_from_8(sys_header + TRX_SYS_DRIZZLE_LOG_INFO
708
+ TRX_SYS_DRIZZLE_MAX_COMMIT_ID);
746
trx_sysf_t* sys_header;
748
ulint trx_sys_mysql_bin_log_pos_high;
749
ulint trx_sys_mysql_bin_log_pos_low;
753
sys_header = trx_sysf_get(&mtr);
755
if (mach_read_from_4(sys_header + TRX_SYS_MYSQL_LOG_INFO
756
+ TRX_SYS_MYSQL_LOG_MAGIC_N_FLD)
757
!= TRX_SYS_MYSQL_LOG_MAGIC_N) {
764
trx_sys_mysql_bin_log_pos_high = mach_read_from_4(
765
sys_header + TRX_SYS_MYSQL_LOG_INFO
766
+ TRX_SYS_MYSQL_LOG_OFFSET_HIGH);
767
trx_sys_mysql_bin_log_pos_low = mach_read_from_4(
768
sys_header + TRX_SYS_MYSQL_LOG_INFO
769
+ TRX_SYS_MYSQL_LOG_OFFSET_LOW);
771
trx_sys_mysql_bin_log_pos
772
= (((ib_int64_t)trx_sys_mysql_bin_log_pos_high) << 32)
773
+ (ib_int64_t)trx_sys_mysql_bin_log_pos_low;
775
ut_memcpy(trx_sys_mysql_bin_log_name,
776
sys_header + TRX_SYS_MYSQL_LOG_INFO
777
+ TRX_SYS_MYSQL_LOG_NAME, TRX_SYS_MYSQL_LOG_NAME_LEN);
780
"InnoDB: Last MySQL binlog file position %lu %lu,"
782
trx_sys_mysql_bin_log_pos_high, trx_sys_mysql_bin_log_pos_low,
783
trx_sys_mysql_bin_log_name);
788
/*****************************************************************//**
789
Prints to stderr the MySQL master log offset info in the trx system header if
790
the magic number shows it valid. */
793
trx_sys_print_mysql_master_log_pos(void)
794
/*====================================*/
796
trx_sysf_t* sys_header;
801
sys_header = trx_sysf_get(&mtr);
803
if (mach_read_from_4(sys_header + TRX_SYS_MYSQL_MASTER_LOG_INFO
804
+ TRX_SYS_MYSQL_LOG_MAGIC_N_FLD)
805
!= TRX_SYS_MYSQL_LOG_MAGIC_N) {
813
"InnoDB: In a MySQL replication slave the last"
814
" master binlog file\n"
815
"InnoDB: position %lu %lu, file name %s\n",
816
(ulong) mach_read_from_4(sys_header
817
+ TRX_SYS_MYSQL_MASTER_LOG_INFO
818
+ TRX_SYS_MYSQL_LOG_OFFSET_HIGH),
819
(ulong) mach_read_from_4(sys_header
820
+ TRX_SYS_MYSQL_MASTER_LOG_INFO
821
+ TRX_SYS_MYSQL_LOG_OFFSET_LOW),
822
sys_header + TRX_SYS_MYSQL_MASTER_LOG_INFO
823
+ TRX_SYS_MYSQL_LOG_NAME);
824
/* Copy the master log position info to global variables we can
825
use in ha_innobase.cc to initialize glob_mi to right values */
827
ut_memcpy(trx_sys_mysql_master_log_name,
828
sys_header + TRX_SYS_MYSQL_MASTER_LOG_INFO
829
+ TRX_SYS_MYSQL_LOG_NAME,
830
TRX_SYS_MYSQL_LOG_NAME_LEN);
832
trx_sys_mysql_master_log_pos
833
= (((ib_int64_t) mach_read_from_4(
834
sys_header + TRX_SYS_MYSQL_MASTER_LOG_INFO
835
+ TRX_SYS_MYSQL_LOG_OFFSET_HIGH)) << 32)
836
+ ((ib_int64_t) mach_read_from_4(
837
sys_header + TRX_SYS_MYSQL_MASTER_LOG_INFO
838
+ TRX_SYS_MYSQL_LOG_OFFSET_LOW));
710
839
mtr_commit(&mtr);
1029
1158
format_id = DICT_TF_FORMAT_MIN;
1032
drizzled::errmsg_printf(drizzled::error::INFO, "InnoDB: highest supported file format is %s",
1033
trx_sys_file_format_id_to_name(DICT_TF_FORMAT_MAX));
1161
ut_print_timestamp(stderr);
1163
" InnoDB: highest supported file format is %s.\n",
1164
trx_sys_file_format_id_to_name(DICT_TF_FORMAT_MAX));
1035
1166
if (format_id > DICT_TF_FORMAT_MAX) {
1037
1168
ut_a(format_id < FILE_FORMAT_NAME_N);
1039
drizzled::errmsg_printf(drizzled::error::ERROR,
1040
"InnoDB: %s: the system tablespace is in a file "
1041
"format that this version doesn't support - %s",
1170
ut_print_timestamp(stderr);
1172
" InnoDB: %s: the system tablespace is in a file "
1173
"format that this version doesn't support - %s\n",
1042
1174
((max_format_id <= DICT_TF_FORMAT_MAX)
1043
1175
? "Error" : "Warning"),
1044
1176
trx_sys_file_format_id_to_name(format_id));
1211
1343
#else /* !UNIV_HOTBACKUP */
1344
/*****************************************************************//**
1345
Prints to stderr the MySQL binlog info in the system header if the
1346
magic number shows it valid. */
1349
trx_sys_print_mysql_binlog_offset_from_page(
1350
/*========================================*/
1351
const byte* page) /*!< in: buffer containing the trx
1352
system header page, i.e., page number
1353
TRX_SYS_PAGE_NO in the tablespace */
1355
const trx_sysf_t* sys_header;
1357
sys_header = page + TRX_SYS;
1359
if (mach_read_from_4(sys_header + TRX_SYS_MYSQL_LOG_INFO
1360
+ TRX_SYS_MYSQL_LOG_MAGIC_N_FLD)
1361
== TRX_SYS_MYSQL_LOG_MAGIC_N) {
1364
"ibbackup: Last MySQL binlog file position %lu %lu,"
1366
(ulong) mach_read_from_4(
1367
sys_header + TRX_SYS_MYSQL_LOG_INFO
1368
+ TRX_SYS_MYSQL_LOG_OFFSET_HIGH),
1369
(ulong) mach_read_from_4(
1370
sys_header + TRX_SYS_MYSQL_LOG_INFO
1371
+ TRX_SYS_MYSQL_LOG_OFFSET_LOW),
1372
sys_header + TRX_SYS_MYSQL_LOG_INFO
1373
+ TRX_SYS_MYSQL_LOG_NAME);
1213
1378
/* THESE ARE COPIED FROM NON-HOTBACKUP PART OF THE INNODB SOURCE TREE
1214
1379
(This code duplicaton should be fixed at some point!)