diff --git a/mariadb/0002-MDEV-31443-FATAL-InnoDB-Unable-to-find-charset-colla.patch b/mariadb/0002-MDEV-31443-FATAL-InnoDB-Unable-to-find-charset-colla.patch new file mode 100644 index 0000000000..c827e5a6d4 --- /dev/null +++ b/mariadb/0002-MDEV-31443-FATAL-InnoDB-Unable-to-find-charset-colla.patch @@ -0,0 +1,113 @@ +From 313c5a1dfb744aaef10586526dda89d2b4a50651 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Marko=20M=C3=A4kel=C3=A4?= +Date: Wed, 5 Jul 2023 12:37:05 +0300 +Subject: [PATCH 1/1] MDEV-31443 [FATAL] InnoDB: Unable to find + charset-collation in ibuf_upgrade() + +dtype_new_read_for_order_and_null_size(): Correctly assign type->prtype. +This caused the fatal error and crash. + +ibuf_merge(): Relax a too strict condition that would result in +[ERROR] InnoDB: Unable to upgrade the change buffer +when there exist buffered changes to redundant secondary indexes, such as +PRIMARY KEY(x), INDEX(x). + +ibuf_upgrade(): Modify at most one user tablespace per mini-transaction, +to be crash-safe. + +page_cur_insert_rec_zip(), page_cur_delete_rec(): Relax debug assertions +for ibuf_upgrade(). + +ibuf_log_rebuild_if_needed(): Invoke recv_sys.debug_free() only after +srv_log_rebuild_if_needed() to avoid an assertion failure. This code +is executed when the innodb_log_file_size is changed when upgrading +from 10.x to 11.0. + +Tested by: Matthias Leich, Christian Hesse +--- + storage/innobase/ibuf/ibuf0ibuf.cc | 14 ++++++++++++-- + storage/innobase/page/page0cur.cc | 5 +++-- + storage/innobase/srv/srv0start.cc | 3 ++- + 3 files changed, 17 insertions(+), 5 deletions(-) + +diff --git a/storage/innobase/ibuf/ibuf0ibuf.cc b/storage/innobase/ibuf/ibuf0ibuf.cc +index 5303b592c71..a13af290d8d 100644 +--- a/storage/innobase/ibuf/ibuf0ibuf.cc ++++ b/storage/innobase/ibuf/ibuf0ibuf.cc +@@ -156,7 +156,7 @@ dtype_new_read_for_order_and_null_size( + << 16; + + if (dtype_is_string_type(type->mtype)) { +- type->prtype |= charset_coll << 16; ++ type->prtype |= charset_coll; + + if (charset_coll == 0) { + /* This insert buffer record was inserted before +@@ -709,7 +709,7 @@ static dberr_t ibuf_merge(fil_space_t *space, btr_cur_t *cur, mtr_t *mtr) + rec_t *rec= cur->page_cur.rec; + ulint n_fields= rec_get_n_fields_old(rec); + +- if (n_fields <= IBUF_REC_FIELD_USER + 1 || rec[4]) ++ if (n_fields < IBUF_REC_FIELD_USER + 1 || rec[4]) + return DB_CORRUPTION; + + n_fields-= IBUF_REC_FIELD_USER; +@@ -910,7 +910,17 @@ ATTRIBUTE_COLD dberr_t ibuf_upgrade() + prev_space_id= space_id; + space= fil_space_t::get(space_id); + if (space) ++ { ++ /* Move to the next user tablespace. We buffer-fix the current ++ change buffer leaf page to prevent it from being evicted ++ before we have started a new mini-transaction. */ ++ cur.page_cur.block->fix(); ++ mtr.commit(); ++ log_free_check(); ++ mtr.start(); ++ mtr.page_lock(cur.page_cur.block, RW_X_LATCH); + mtr.set_named_space(space); ++ } + spaces++; + } + pages++; +diff --git a/storage/innobase/page/page0cur.cc b/storage/innobase/page/page0cur.cc +index 8d3a44d630d..2562ae1d0e4 100644 +--- a/storage/innobase/page/page0cur.cc ++++ b/storage/innobase/page/page0cur.cc +@@ -1791,7 +1791,8 @@ page_cur_insert_rec_zip( + ut_ad(rec_offs_comp(offsets)); + ut_ad(fil_page_get_type(page) == FIL_PAGE_INDEX || + fil_page_get_type(page) == FIL_PAGE_RTREE); +- ut_ad(mach_read_from_8(PAGE_HEADER + PAGE_INDEX_ID + page) == index->id); ++ ut_ad(mach_read_from_8(PAGE_HEADER + PAGE_INDEX_ID + page) == index->id || ++ index->is_dummy); + ut_ad(!page_get_instant(page)); + ut_ad(!page_cur_is_after_last(cursor)); + #ifdef UNIV_ZIP_DEBUG +@@ -2258,7 +2259,7 @@ page_cur_delete_rec( + == index->table->not_redundant()); + ut_ad(fil_page_index_page_check(block->page.frame)); + ut_ad(mach_read_from_8(PAGE_HEADER + PAGE_INDEX_ID + block->page.frame) +- == index->id); ++ == index->id || index->is_dummy); + ut_ad(mtr->is_named_space(index->table->space)); + + /* The record must not be the supremum or infimum record. */ +diff --git a/storage/innobase/srv/srv0start.cc b/storage/innobase/srv/srv0start.cc +index 33545f42d05..9e1efa3c85d 100644 +--- a/storage/innobase/srv/srv0start.cc ++++ b/storage/innobase/srv/srv0start.cc +@@ -1165,8 +1165,9 @@ ATTRIBUTE_COLD static dberr_t ibuf_log_rebuild_if_needed() + if (recv_sys.is_corrupt_log() || recv_sys.is_corrupt_fs()) + return DB_CORRUPTION; + ++ dberr_t err= srv_log_rebuild_if_needed(); + recv_sys.debug_free(); +- return srv_log_rebuild_if_needed(); ++ return err; + } + + static tpool::task_group rollback_all_recovered_group(1); +-- +2.41.0 + diff --git a/mariadb/PKGBUILD b/mariadb/PKGBUILD index aea0ec4c65..c48af1004f 100644 --- a/mariadb/PKGBUILD +++ b/mariadb/PKGBUILD @@ -1,26 +1,27 @@ -# POWER Maintainer: Alexander Baldeck # Maintainer: Bartłomiej Piotrowski # Maintainer: Christian Hesse pkgbase=mariadb pkgname=('mariadb-libs' 'mariadb-clients' 'mariadb' 'mytop') pkgdesc='Fast SQL database server, derived from MySQL' -pkgver=10.11.2 +pkgver=11.0.2 pkgrel=2 arch=(x86_64 powerpc64le powerpc64 powerpc riscv64) license=('GPL') url='https://mariadb.org/' makedepends=('boost' 'bzip2' 'cmake' 'cracklib' 'curl' 'jemalloc' 'judy' 'krb5' 'liburing' - 'libxcrypt' 'libxml2' 'lz4' 'openssl' 'systemd' 'zlib' 'zstd' 'xz') + 'libxcrypt' 'libxml2' 'lz4' 'openssl' 'pcre2' 'systemd' 'zlib' 'zstd' 'xz') validpgpkeys=('177F4010FE56CA3336300305F1656F24C74CD1D8') # MariaDB Signing Key # The default links with mirror redirection fail for signatures, specific # mirrors may be out of date every now and then. Let's use the upstream # rsync source via https and hope it does not hurt them too much. # https://mariadb.com/kb/en/library/mirror-sites-for-mariadb/ source=("https://rsync.osuosl.org/pub/mariadb/mariadb-${pkgver}/source/mariadb-${pkgver}.tar.gz"{,.asc} + '0002-MDEV-31443-FATAL-InnoDB-Unable-to-find-charset-colla.patch' '0001-arch-specific.patch') -sha256sums=('1c89dee0caed0f68bc2a1d203eb98a123150e6a179f6ee0f1fc0ba3f08dc71dc' +sha256sums=('3c71576cad0ea416882270e383f94cc89693b7fbcce1fa4f306fe3e931e464ae' 'SKIP' + 'e4ea86c72fe0258e442cc8a2dc6cf040696535e22d70be4cb63007130e39d222' '3289efb3452d199aec872115f35da3f1d6fd4ce774615076690e9bc8afae1460') prepare() { @@ -31,6 +32,10 @@ prepare() { # * force preloading jemalloc for memory management # * make systemd-tmpfiles create MYSQL_DATADIR patch -Np1 < ../0001-arch-specific.patch + + # MDEV-31443 assert [FATAL] InnoDB: Unable to find charset-collation for 254 after upgrade from 10.11.4 to 11.0 + # https://jira.mariadb.org/browse/MDEV-31443 + patch -Np1 < ../0002-MDEV-31443-FATAL-InnoDB-Unable-to-find-charset-colla.patch } build() { @@ -38,6 +43,8 @@ build() { # build options -DCOMPILATION_COMMENT="Arch POWER" -DCMAKE_BUILD_TYPE=RelWithDebInfo + #-DCMAKE_BUILD_TYPE=Debug + #-DMYSQL_MAINTAINER_MODE=WARN -Wno-dev # file paths @@ -79,7 +86,7 @@ build() { -DWITH_EXTRA_CHARSETS=complex -DWITH_JEMALLOC=ON -DWITH_LIBWRAP=OFF - -DWITH_PCRE=bundled + -DWITH_PCRE2=system -DWITH_READLINE=ON -DWITH_SSL=system -DWITH_SYSTEMD=yes @@ -108,7 +115,7 @@ check() { package_mariadb-libs() { pkgdesc='MariaDB libraries' - depends=('liburing' 'libxcrypt' 'libcrypt.so' 'openssl' 'zlib' 'zstd') + depends=('liburing' 'libxcrypt' 'libcrypt.so' 'openssl' 'pcre2' 'zlib' 'zstd') optdepends=('krb5: for gssapi authentication') conflicts=('libmysqlclient' 'libmariadbclient' 'mariadb-connector-c') provides=('libmariadbclient' 'mariadb-connector-c' 'libmariadb.so' 'libmariadbd.so') @@ -128,9 +135,9 @@ package_mariadb-libs() { ln -s mariadb_config "$pkgdir"/usr/bin/mariadb-config ln -s mariadb_config "$pkgdir"/usr/bin/mysql_config - install -D -m0644 "$srcdir"/"$pkgbase-$pkgver"/man/mysql_config.1 "$pkgdir"/usr/share/man/man1/mysql_config.1 - ln -s mysql_config.1 "$pkgdir"/usr/share/man/man1/mariadb_config.1 - ln -s mysql_config.1 "$pkgdir"/usr/share/man/man1/mariadb-config.1 + install -D -m0644 "$srcdir"/"$pkgbase-$pkgver"/man/mariadb_config.1 "$pkgdir"/usr/share/man/man1/mariadb_config.1 + ln -s mariadb_config.1 "$pkgdir"/usr/share/man/man1/mariadb-config.1 + ln -s mariadb_config.1 "$pkgdir"/usr/share/man/man1/mysql_config.1 install -D -m0644 support-files/mariadb.pc "$pkgdir"/usr/share/pkgconfig/mariadb.pc install -D -m0644 "$srcdir"/"$pkgbase-$pkgver"/support-files/mysql.m4 "$pkgdir"/usr/share/aclocal/mysql.m4 diff --git a/mariadb/keys/pgp/177F4010FE56CA3336300305F1656F24C74CD1D8.asc b/mariadb/keys/pgp/177F4010FE56CA3336300305F1656F24C74CD1D8.asc new file mode 100644 index 0000000000..708d2063ad --- /dev/null +++ b/mariadb/keys/pgp/177F4010FE56CA3336300305F1656F24C74CD1D8.asc @@ -0,0 +1,51 @@ +-----BEGIN PGP PUBLIC KEY BLOCK----- + +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 +ukhXRwJXH8RVVEUS +=ihRo +-----END PGP PUBLIC KEY BLOCK----- diff --git a/mariadb/keys/pgp/199369E5404BD5FC7D2FE43BCBCB082A1BB943DB.asc b/mariadb/keys/pgp/199369E5404BD5FC7D2FE43BCBCB082A1BB943DB.asc new file mode 100644 index 0000000000..b21f4d05cb --- /dev/null +++ b/mariadb/keys/pgp/199369E5404BD5FC7D2FE43BCBCB082A1BB943DB.asc @@ -0,0 +1,43 @@ +-----BEGIN PGP PUBLIC KEY BLOCK----- + +mQGiBEtohJARBACxvZpWSIMTp/e7BUzSW+WDL7Pl0JDg6v7ZJFGJk9qo+5JXIiis +497Ul0FmVJ6EoyVzfpqe5FyUvqtLCkM6UP5adyvXTHi1KMiYacu2q5yRhDpMKbpM +LkAg23Yyz1yK/d0TsAkerLJ6K1Bh8NIm44Op+qFrDxeYZDIR5Q8WaCdK8wCg/jc8 +p/4XaKq74ghUHEX+35qk63UD/0YEsgHrsRQZ42wKNeO8ZUJKqCVHXYJrCq7DhRhn +U5aYnuK3op0JusPN5fdIGkKwJy24dWRoRfNIIg0WvM8qUNrC2NvhomnZNudsI0Jb +XapRemrIwbvrZToD6ei1awdVqa5fT6XIxV4MSQEwn47qmUNSz/0TkUmB3VZ2EL/j +zfHUA/91ZfAdWCmRemTLWRrzIYYJKyEInZ0qwZVrkyMY8+T7b2/6RGR0f2oV1dOx +cjbd0+N3vKrUkjuzkcVu/oB8wq9UBfuSHwsxYqub4gvIh0/LW+CsWa955sQ/Hj9H +48j3nUHaXqM9uJyMMgMlCdo3rLpnYCJH8w2kFfLHIDksMs1YtLQ9TWFyaWFEQiBQ +YWNrYWdlIFNpZ25pbmcgS2V5IDxwYWNrYWdlLXNpZ25pbmcta2V5QG1hcmlhZGIu +b3JnPohiBBMRAgAiBQJREUepAhsDBgsJCAcDAgYVCAIJCgsEFgIDAQIeAQIXgAAK +CRDLywgqG7lD28y4AJ0aByfYvJWqBm5PZjusZiG0vo9SRwCeM0izj/oryMu0fJi3 +kRbTlojzCd20Q0RhbmllbCBCYXJ0aG9sb21ldyAoTW9udHkgUHJvZ3JhbSBzaWdu +aW5nIGtleSkgPGRiYXJ0QGFza21vbnR5Lm9yZz6IYAQTEQIAIAUCS2iEkAIbAwYL +CQgHAwIEFQIIAwQWAgMBAh4BAheAAAoJEMvLCCobuUPboDgAoNQVrK4i5LXTgwnW +ke2MxsXCoHDnAJ93j733YuNkV64aHEUwWxNCkkwUkbkEDQRLaIS4EBAApZ0wvxpQ +VlZ6OEFa9SBQ5eclRIOjXjKqkYGkvIx+jUmqCYfOgfPixOGYS5Q2KwHNz4XEOIOA +1kyClAoAAgOEGUxj8CxnbBk10IVo/JBONjdqKYPZ2YNdeIIrKXEmai4i5hK5AfZH +oyqsV5aqxGkGeVUju/coyRJY6La8iL+RBuxiRuUPWymGjtISAR6fSiN8f/kRly/y +9LmMO8JcOpeieqLUFPK6KuzhI4F0nFkHJpZPDNOHHl+GmAZ+SqZxmIrpkGymd36h +TKxW4nlnN6kqc1gMwdn1L/u/D+C/jhMbTTssqiMZeyP9uFmnMB3ls1NV8OxvbxcT +BG0M7g4AlffUQKpUrNhIBoC3R7UbYQ3CTZX1Qp/TBzbfRAgGhdWBQDQEd3/Ll9G4 +QaCs9I+4W68rkAr7e7IylHyfEi9oYQkXFIEeaAhiENmJBpcLpas/yNJoLayqzPsQ ++lRNg3omFntPtZolkMi6orRNixrgXV64m/01YNjmBFTqsp5wOq2j0cmTkbOWqdnl +mGPg2El1ufebJc6YWS1nFm6YRpN/B3QbtAnar1Cb+IHlr0haTOYhQp+XFN+k1brq +s+Sufa8/rz6N5tsm+W5GjHKvHr24FTa02u3H4lIqNlNBkzZZKhzAhxEWiJzwc/f2 +upG5vdplrM/YCU+XTotYPb5ZEXQe2mD/rXMAAwUP/0f1DOJIfnMrh1o/3RKqDq8k +7tlv2GEEv0VEnh8ty4dMb8Dos2M1Oc4Kv9QLB3DXcS4/L4JW5vF0QgSAzq1r5oBT +1zaMcqDS6OUlHrWUi8aDNt5EPQuEGdP2/iTDeAq4r8eCYrHRC7egldyRZrmWNfcZ +N6/G9K+JSjhWfSWWSBRIqb+UxcQNCp6i6tvVSxCfLK1R4P4kA/Z4Co2vywIfVfPh +Hd5nIWNl1yl9O3r04GCNTjzwsv/dhUGDFIVsghgehZuL0Bb7hDuyvZ2ShALumZ5t +7mU/SJ2hOk3klO+2bIJB0gquUkWn/4g1h2Tp9XVWrI1x6GUBxRYkwC4tWajzWeVC +5hcDVAdqYN0H0HVj/CEgrEWlCVv1hJ0JYAsjX8Cj1QuZB1i34fjEkgybMjo3oCU5 +GCSiNmvtTeUpexyY/7iHAdyoZHFT+fQS84VMYKFT4tTYH+5jTa62yfPhn63TYPor +rRyTqG8aJQLnczm0NN5R5mriYJQjr4Pj8PSSwWck/Gt8R5vb+C69+uXINB6OKqhG +6xU0bqnCIxt3OhVS7v0SfHjn0+il/JOc/ev9wm6G5FxmEWOoYwibmaDzHfc9N1HM +RzjTENI7fyJPNFj9IDkpwk4E3ylrkuVl2KEmYDJ9T9ny4UMnQ7Sb6w59UhxMIFtR +TPNpQJWCWXfhWUAo4WfCiEkEGBECAAkFAktohLgCGwwACgkQy8sIKhu5Q9vThgCg +7R7ImT+21phcbxVYBQZjiJVY/2YAnRKPeNKPNIviaUUV7kxMXt949GQX +=zBws +-----END PGP PUBLIC KEY BLOCK-----