master mysql upgrade to 8.0.22

upgrade changelog
This commit is contained in:
writings-of-prince-huainan 2020-12-07 10:58:12 +08:00
parent 9573c1ace8
commit 2b21621b64
27 changed files with 1569 additions and 0 deletions

4
README.mysql-docs Normal file
View File

@ -0,0 +1,4 @@
The official MySQL documentation is not freely redistributable, so we cannot
include it in RHEL or Fedora. You can find it on-line at
http://dev.mysql.com/doc/

9
README.mysql-license Normal file
View File

@ -0,0 +1,9 @@
MySQL is distributed under GPL v2, but there are some licensing exceptions
that allow the client libraries to be linked with a non-GPL application,
so long as the application is under a license approved by Oracle.
For details see
http://www.mysql.com/about/legal/licensing/foss-exception/
Some innobase code from Percona and Google is under BSD license.
Some code related to test-suite is under LGPLv2.

View File

@ -0,0 +1,31 @@
diff -up boost_1_57_0/boost/mpl/print.hpp\~ boost_1_57_0/boost/mpl/print.hpp
--- boost_1_57_0/boost/mpl/print.hpp~ 2014-07-09 23:12:31.000000000 +0200
+++ boost_1_57_0/boost/mpl/print.hpp 2015-01-20 12:44:59.621400948 +0100
@@ -52,16 +52,15 @@ struct print
enum { n = sizeof(T) + -1 };
#elif defined(__MWERKS__)
void f(int);
-#else
- enum {
- n =
-# if defined(__EDG_VERSION__)
- aux::dependent_unsigned<T>::value > -1
-# else
- sizeof(T) > -1
-# endif
- };
-#endif
+#elif defined(__EDG_VERSION__)
+ enum { n = aux::dependent_unsigned<T>::value > -1 };
+#elif defined(BOOST_GCC)
+ enum { n1 };
+ enum { n2 };
+ enum { n = n1 != n2 };
+#else
+ enum { n = sizeof(T) > -1 };
+#endif
};
#if defined(BOOST_MSVC)
Diff finished. Tue Jan 20 12:45:03 2015

120
boost-1.58.0-pool.patch Normal file
View File

@ -0,0 +1,120 @@
Index: boost/pool/pool.hpp
===================================================================
--- boost/pool/pool.hpp (revision 78317)
+++ boost/pool/pool.hpp (revision 78326)
@@ -27,4 +27,6 @@
#include <boost/pool/poolfwd.hpp>
+// std::numeric_limits
+#include <boost/limits.hpp>
// boost::integer::static_lcm
#include <boost/integer/common_factor_ct.hpp>
@@ -358,4 +360,11 @@
}
+ size_type max_chunks() const
+ { //! Calculated maximum number of memory chunks that can be allocated in a single call by this Pool.
+ size_type partition_size = alloc_size();
+ size_type POD_size = integer::static_lcm<sizeof(size_type), sizeof(void *)>::value + sizeof(size_type);
+ return (std::numeric_limits<size_type>::max() - POD_size) / alloc_size();
+ }
+
static void * & nextof(void * const ptr)
{ //! \returns Pointer dereferenced.
@@ -377,5 +388,7 @@
//! the first time that object needs to allocate system memory.
//! The default is 32. This parameter may not be 0.
- //! \param nmax_size is the maximum number of chunks to allocate in one block.
+ //! \param nmax_size is the maximum number of chunks to allocate in one block.
+ set_next_size(nnext_size);
+ set_max_size(nmax_size);
}
@@ -400,7 +413,7 @@
}
void set_next_size(const size_type nnext_size)
- { //! Set number of chunks to request from the system the next time that object needs to allocate system memory. This value should never be set to 0.
- //! \returns nnext_size.
- next_size = start_size = nnext_size;
+ { //! Set number of chunks to request from the system the next time that object needs to allocate system memory. This value should never be set to 0.
+ BOOST_USING_STD_MIN();
+ next_size = start_size = min BOOST_PREVENT_MACRO_SUBSTITUTION(nnext_size, max_chunks());
}
size_type get_max_size() const
@@ -410,5 +423,6 @@
void set_max_size(const size_type nmax_size)
{ //! Set max_size.
- max_size = nmax_size;
+ BOOST_USING_STD_MIN();
+ max_size = min BOOST_PREVENT_MACRO_SUBSTITUTION(nmax_size, max_chunks());
}
size_type get_requested_size() const
@@ -713,7 +727,7 @@
BOOST_USING_STD_MIN();
if(!max_size)
- next_size <<= 1;
+ set_next_size(next_size << 1);
else if( next_size*partition_size/requested_size < max_size)
- next_size = min BOOST_PREVENT_MACRO_SUBSTITUTION(next_size << 1, max_size*requested_size/ partition_size);
+ set_next_size(min BOOST_PREVENT_MACRO_SUBSTITUTION(next_size << 1, max_size * requested_size / partition_size));
// initialize it,
@@ -753,7 +767,7 @@
BOOST_USING_STD_MIN();
if(!max_size)
- next_size <<= 1;
+ set_next_size(next_size << 1);
else if( next_size*partition_size/requested_size < max_size)
- next_size = min BOOST_PREVENT_MACRO_SUBSTITUTION(next_size << 1, max_size*requested_size/ partition_size);
+ set_next_size(min BOOST_PREVENT_MACRO_SUBSTITUTION(next_size << 1, max_size * requested_size / partition_size));
// initialize it,
@@ -797,4 +811,6 @@
//! \returns Address of chunk n if allocated ok.
//! \returns 0 if not enough memory for n chunks.
+ if (n > max_chunks())
+ return 0;
const size_type partition_size = alloc_size();
@@ -845,7 +861,7 @@
BOOST_USING_STD_MIN();
if(!max_size)
- next_size <<= 1;
+ set_next_size(next_size << 1);
else if( next_size*partition_size/requested_size < max_size)
- next_size = min BOOST_PREVENT_MACRO_SUBSTITUTION(next_size << 1, max_size*requested_size/ partition_size);
+ set_next_size(min BOOST_PREVENT_MACRO_SUBSTITUTION(next_size << 1, max_size * requested_size / partition_size));
// insert it into the list,
Index: libs/pool/test/test_bug_6701.cpp
===================================================================
--- libs/pool/test/test_bug_6701.cpp (revision 78326)
+++ libs/pool/test/test_bug_6701.cpp (revision 78326)
@@ -0,0 +1,27 @@
+/* Copyright (C) 2012 Étienne Dupuis
+*
+* Use, modification and distribution is subject to the
+* Boost Software License, Version 1.0. (See accompanying
+* file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
+*/
+
+// Test of bug #6701 (https://svn.boost.org/trac/boost/ticket/6701)
+
+#include <boost/pool/object_pool.hpp>
+#include <boost/limits.hpp>
+
+int main()
+{
+ boost::pool<> p(1024, std::numeric_limits<size_t>::max() / 768);
+
+ void *x = p.malloc();
+ BOOST_ASSERT(!x);
+
+ BOOST_ASSERT(std::numeric_limits<size_t>::max() / 1024 >= p.get_next_size());
+ BOOST_ASSERT(std::numeric_limits<size_t>::max() / 1024 >= p.get_max_size());
+
+ void *y = p.ordered_malloc(std::numeric_limits<size_t>::max() / 768);
+ BOOST_ASSERT(!y);
+
+ return 0;
+}

16
my.cnf.in Normal file
View File

@ -0,0 +1,16 @@
#
# This group is read both both by the client and the server
# use it for options that affect everything
#
[client-server]
#
# This group is read by the server
#
[mysqld]
#
# include all files from the config directory
#
!includedir @SYSCONF2DIR@

14
mysql-arm32-timer.patch Normal file
View File

@ -0,0 +1,14 @@
--- mysql-8.0.22/mysql-test/include/mtr_warnings.sql.old 2020-10-21 11:25:49.779775116 +0200
+++ mysql-8.0.22/mysql-test/include/mtr_warnings.sql 2020-10-21 11:26:29.507185307 +0200
@@ -299,6 +299,11 @@
("NOTIFY_SOCKET not set in environment. sd_notify messages will not be sent!"),
("Invalid systemd notify socket, cannot send: "),
+ /*
+ ARM32 don't support timers and get this warning in every test.
+ */
+ ("The CYCLE timer is not available. WAIT events in the performance_schema will not be timed."),
+
("THE_LAST_SUPPRESSION");

24
mysql-chain-certs.patch Normal file
View File

@ -0,0 +1,24 @@
Fix things so that chains of certificates work in the server and client
certificate files.
This only really works for OpenSSL-based builds, as yassl is unable to read
multiple certificates from a file. The patch below to yassl/src/ssl.cpp
doesn't fix that, but just arranges that the viosslfactories.c patch won't
have any ill effects in a yassl build. Since we don't use yassl in Red Hat/
Fedora builds, I'm not feeling motivated to try to fix yassl for this.
See RH bug #598656. Filed upstream at http://bugs.mysql.com/bug.php?id=54158
diff --git a/vio/viosslfactories.cc b/vio/viosslfactories.cc
index 5e881e3..2927e7f 100644
--- a/vio/viosslfactories.cc
+++ b/vio/viosslfactories.cc
@@ -198,7 +198,7 @@ static int vio_set_cert_stuff(SSL_CTX *ctx, const char *cert_file,
if (!key_file && cert_file) key_file = cert_file;
if (cert_file &&
- SSL_CTX_use_certificate_file(ctx, cert_file, SSL_FILETYPE_PEM) <= 0) {
+ SSL_CTX_use_certificate_chain_file(ctx, cert_file) <= 0) {
*error = SSL_INITERR_CERT;
DBUG_PRINT("error",
("%s from file '%s'", sslGetErrString(*error), cert_file));

39
mysql-check-socket.sh Normal file
View File

@ -0,0 +1,39 @@
#!/bin/sh
# We check if there is already a process using the socket file,
# since otherwise the systemd service file could report false
# positive result when starting and mysqld_safe could remove
# a socket file, which is actually being used by a different daemon.
source "`dirname ${BASH_SOURCE[0]}`/mysql-scripts-common"
if test -e "$socketfile" ; then
echo "Socket file $socketfile exists." >&2
# no write permissions
if ! test -w "$socketfile" ; then
echo "Not enough permission to write to the socket file $socketfile, which is suspicious." >&2
echo "Please, remove $socketfile manually to start the service." >&2
exit 1
fi
# not a socket file
if ! test -S "$socketfile" ; then
echo "The file $socketfile is not a socket file, which is suspicious." >&2
echo "Please, remove $socketfile manually to start the service." >&2
exit 1
fi
# some process uses the socket file
if fuser "$socketfile" &>/dev/null ; then
socketpid=$(fuser "$socketfile" 2>/dev/null)
echo "Is another MySQL daemon already running with the same unix socket?" >&2
echo "Please, stop the process $socketpid or remove $socketfile manually to start the service." >&2
exit 1
fi
# socket file is a garbage
echo "No process is using $socketfile, which means it is a garbage, so it will be removed automatically." >&2
fi
exit 0

45
mysql-file-contents.patch Normal file
View File

@ -0,0 +1,45 @@
Upstream chooses to install INFO_SRC and INFO_BIN into the docs dir, which
breaks at least two packaging commandments, so we put them into $libdir
instead. That means we have to hack the file_contents regression test
to know about this.
Recommendation they change is at http://bugs.mysql.com/bug.php?id=61425
diff --git a/mysql-test/t/file_contents.test b/mysql-test/t/file_contents.test
index 75f8c93..973291c 100644
--- a/mysql-test/t/file_contents.test
+++ b/mysql-test/t/file_contents.test
@@ -12,7 +12,7 @@
--perl
print "\nChecking 'INFO_SRC' and 'INFO_BIN'\n";
$dir_bin = $ENV{'MYSQL_BINDIR'};
-if ($dir_bin =~ m|^/usr/|) {
+if ($dir_bin =~ m|.*/usr/$|) {
# RPM package
$dir_docs = $dir_bin;
$dir_docs =~ s|/lib|/share/doc|;
@@ -35,7 +35,7 @@ if ($dir_bin =~ m|^/usr/|) {
}
}
}
-} elsif ($dir_bin =~ m|/usr$|) {
+} elsif ($dir_bin =~ m|.*/usr$|) {
# RPM build during development
$dir_docs = "$dir_bin/share/doc";
if(-d "$dir_docs/packages") {
@@ -55,6 +55,15 @@ if ($dir_bin =~ m|^/usr/|) {
$dir_docs = glob "$dir_bin/share/mysql-*/docs";
}
}
+
+ # All the above is entirely wacko, because these files are not docs;
+ # they should be kept in libdir instead. mtr does not provide a nice
+ # way to find libdir though, so we have to kluge it like this:
+ if (-d "$dir_bin/lib64/mysql") {
+ $dir_docs = "$dir_bin/lib64/mysql";
+ } else {
+ $dir_docs = "$dir_bin/lib/mysql";
+ }
}
} else {
# tar.gz package, Windows, or developer work (in git)

25
mysql-gcc11.patch Normal file
View File

@ -0,0 +1,25 @@
index a826a081..00000000
diff --git a/include/mysql/components/services/page_track_service.h b/include/mysql/components/services/page_track_service.h
index 103b5135..e6b3ba6f 100644
--- a/include/mysql/components/services/page_track_service.h
+++ b/include/mysql/components/services/page_track_service.h
@@ -26,6 +26,7 @@
#include <mysql/components/service.h>
#include <functional>
+#include <cstddef>
#include <stdint.h>
diff --git a/sql-common/sql_string.cc b/sql-common/sql_string.cc
index 40435729..8b6ee827 100644
--- a/sql-common/sql_string.cc
+++ b/sql-common/sql_string.cc
@@ -23,6 +23,7 @@
#include "sql_string.h"
#include <algorithm>
+#include <limits>
#include "my_dbug.h"
#include "my_macros.h"

52
mysql-install-test.patch Normal file
View File

@ -0,0 +1,52 @@
Improve the documentation that will be installed in the mysql-test RPM.
diff -Naur mysql-5.5.20.orig/mysql-test/README mysql-5.5.20/mysql-test/README
--- mysql-5.5.20.orig/mysql-test/README 2011-12-16 14:52:05.000000000 -0500
+++ mysql-5.5.20/mysql-test/README 2012-02-10 17:06:19.531082253 -0500
@@ -1,14 +1,26 @@
This directory contains a test suite for the MySQL daemon. To run
-the currently existing test cases, simply execute ./mysql-test-run in
-this directory. It will fire up the newly built mysqld and test it.
+the currently existing test cases, execute ./mysql-test-run in
+this directory.
-Note that you do not have to have to do "make install", and you could
-actually have a co-existing MySQL installation. The tests will not
-conflict with it.
-
-All tests must pass. If one or more of them fail on your system, please
-read the following manual section for instructions on how to report the
-problem:
+For use in Red Hat distributions, you should run the script as user mysql,
+so the best bet is something like
+ cd /usr/share/mysql-test
+ sudo -u mysql ./mysql-test-run --skip-test-list=platform-specific-tests.list
+This will use the installed mysql executables, but will run a private copy
+of the server process (using data files within /usr/share/mysql-test),
+so you need not start the mysqld service beforehand.
+
+The "--skip-test-list=platform-specific-tests.list" option excludes tests that are
+known to fail on one or more Red-Hat-supported platforms. You can omit it
+if you want to check whether such failures occur for you. Documentation
+about the reasons for omitting such tests can be found in the file
+platform-specific-tests.list.
+
+To clean up afterwards, remove the created "var" subdirectory, eg
+ sudo -u mysql rm -rf /usr/share/mysql-test/var
+
+If one or more tests fail on your system, please read the following manual
+section for instructions on how to report the problem:
http://dev.mysql.com/doc/mysql/en/mysql-test-suite.html
@@ -25,7 +37,8 @@
With no test cases named on the command line, mysql-test-run falls back
to the normal "non-extern" behavior. The reason for this is that some
-tests cannot run with an external server.
+tests cannot run with an external server (because they need to control the
+options with which the server is started).
You can create your own test cases. To create a test case, create a new

77
mysql-paths.patch Normal file
View File

@ -0,0 +1,77 @@
Some hard-coded paths make problems when package is built into chroot like
Software Collections. Removing these hard-coded paths should fix it.
Upstream report: https://mariadb.atlassian.net/browse/MDEV-6485
diff --git a/cmake/install_layout.cmake b/cmake/install_layout.cmake
index 9f7945d8..6734cdfd 100644
--- a/cmake/install_layout.cmake
+++ b/cmake/install_layout.cmake
@@ -105,7 +105,7 @@ IF(UNIX)
" Choose between ${VALID_INSTALL_LAYOUTS}" )
ENDIF()
- SET(SYSCONFDIR "${CMAKE_INSTALL_PREFIX}/etc"
+ SET(SYSCONFDIR "/etc"
CACHE PATH "config directory (for my.cnf)")
MARK_AS_ADVANCED(SYSCONFDIR)
ENDIF()
@@ -189,6 +189,7 @@ SET(INSTALL_SECURE_FILE_PRIVDIR_TARGZ ${secure_file_priv_path})
#
SET(INSTALL_BINDIR_RPM "bin")
SET(INSTALL_SBINDIR_RPM "sbin")
+SET(INSTALL_SYSCONFDIR_RPM "/etc")
#
IF(CMAKE_SYSTEM_PROCESSOR IN_LIST KNOWN_64BIT_ARCHITECTURES)
SET(INSTALL_LIBDIR_RPM "lib64/mysql")
diff --git a/mysys/my_default.cc b/mysys/my_default.cc
index 290f1666..8403425f 100644
--- a/mysys/my_default.cc
+++ b/mysys/my_default.cc
@@ -1570,12 +1570,12 @@ static const char **init_default_directories(MEM_ROOT *alloc) {
#else
- errors += add_directory(alloc, "/etc/", dirs);
- errors += add_directory(alloc, "/etc/mysql/", dirs);
-
#if defined(DEFAULT_SYSCONFDIR)
if (DEFAULT_SYSCONFDIR[0])
+ {
errors += add_directory(alloc, DEFAULT_SYSCONFDIR, dirs);
+ errors += add_directory(alloc, DEFAULT_SYSCONFDIR "/mysql", dirs);
+ }
#endif /* DEFAULT_SYSCONFDIR */
#endif
diff --git a/scripts/CMakeLists.txt b/scripts/CMakeLists.txt
index 4149a764..b091d5e2 100644
--- a/scripts/CMakeLists.txt
+++ b/scripts/CMakeLists.txt
@@ -288,9 +288,9 @@ IF(UNIX)
ENDIF(UNIX)
SET(prefix "${CMAKE_INSTALL_PREFIX}")
-SET(sysconfdir ${prefix})
+SET(sysconfdir ${SYSCONFDIR})
SET(bindir ${prefix}/${INSTALL_BINDIR})
-SET(libexecdir ${prefix}/${INSTALL_SBINDIR})
+SET(libexecdir ${prefix}/${INSTALL_LIBEXECDIR})
SET(datadir ${prefix}/${INSTALL_MYSQLSHAREDIR})
SET(libsubdir ${INSTALL_LIBDIR})
SET(pkgincludedir ${prefix}/${INSTALL_INCLUDEDIR})
diff --git a/scripts/mysqld_multi.pl.in b/scripts/mysqld_multi.pl.in
index 84dd4d7c..50397ddd 100644
--- a/scripts/mysqld_multi.pl.in
+++ b/scripts/mysqld_multi.pl.in
@@ -586,9 +586,7 @@ sub list_defaults_files
my %seen; # Don't list the same file more than once
return grep { defined $_ and not $seen{$_}++ and -f $_ and -r $_ }
- ('/etc/my.cnf',
- '/etc/mysql/my.cnf',
- '@sysconfdir@/my.cnf',
+ ('@sysconfdir@/my.cnf',
($ENV{MYSQL_HOME} ? "$ENV{MYSQL_HOME}/my.cnf" : undef),
$opt{'extra-file'},
($ENV{HOME} ? "$ENV{HOME}/.my.cnf" : undef));

112
mysql-prepare-db-dir.sh Normal file
View File

@ -0,0 +1,112 @@
#!/bin/sh
# This script creates the mysql data directory during first service start.
# In subsequent starts, it does nothing much.
#
# This script is meant to be run as non-root user either during initscript
# or systemd service execution, before starting the mysqld daemon.
# Running it as root may have some security risks, because it touches files
# that can be symlinks pointing to unexpected locations.
#
# On the other hand, when using non-standard locations for datadir and logfile,
# this script might not be able to create the files and the daemon won't start
# properly. A solution for that is to created the locations for datadir and
# logfile with correct ownership before starting the daemon.
source "`dirname ${BASH_SOURCE[0]}`/mysql-scripts-common"
# If two args given first is user, second is group
# otherwise the arg is the systemd service file
if [ "$#" -eq 2 ]
then
myuser="$1"
mygroup="$2"
else
# Absorb configuration settings from the specified systemd service file,
# or the default service if not specified
SERVICE_NAME="$1"
if [ x"$SERVICE_NAME" = x ]
then
SERVICE_NAME=@DAEMON_NAME@.service
fi
myuser=`systemctl show -p User "${SERVICE_NAME}" |
sed 's/^User=//'`
if [ x"$myuser" = x ]
then
myuser=mysql
fi
mygroup=`systemctl show -p Group "${SERVICE_NAME}" |
sed 's/^Group=//'`
if [ x"$mygroup" = x ]
then
mygroup=mysql
fi
fi
# Set up the errlogfile with appropriate permissions
if [ ! -e "$errlogfile" -a ! -h "$errlogfile" -a x$(dirname "$errlogfile") = "x/var/log" ]; then
case $(basename "$errlogfile") in
mysql*.log|mariadb*.log) install /dev/null -m0640 -o$myuser -g$mygroup "$errlogfile" ;;
*) ;;
esac
else
# Provide some advice if the log file cannot be created by this script
errlogdir=$(dirname "$errlogfile")
if ! [ -d "$errlogdir" ] ; then
echo "The directory $errlogdir does not exist."
exit 1
elif [ -e "$errlogfile" -a ! -w "$errlogfile" ] ; then
echo "The log file $errlogfile cannot be written, please, fix its permissions."
echo "The daemon will be run under $myuser:$mygroup"
exit 1
fi
fi
export LC_ALL=C
# Returns content of the specified directory
# If listing files fails, fake-file is returned so which means
# we'll behave like there was some data initialized
# Some files or directories are fine to be there, so those are
# explicitly removed from the listing
# @param <dir> datadir
list_datadir ()
{
( ls -1A "$1" 2>/dev/null || echo "fake-file" ) | grep -v \
-e '^lost+found$' \
-e '\.err$' \
-e '^\.bash_history$'
}
# Checks whether datadir should be initialized
# @param <dir> datadir
should_initialize ()
{
test -z "$(list_datadir "$1")"
}
# Make the data directory if doesn't exist or empty
if should_initialize "$datadir" ; then
# Now create the database
echo "Initializing @NICE_PROJECT_NAME@ database"
@libexecdir@/mysqld --initialize-insecure --datadir="$datadir" --user="$myuser"
ret=$?
if [ $ret -ne 0 ] ; then
echo "Initialization of @NICE_PROJECT_NAME@ database failed." >&2
echo "Perhaps @sysconfdir@/my.cnf is misconfigured." >&2
# Clean up any partially-created database files
if [ ! -e "$datadir/mysql/user.frm" ] ; then
rm -rf "$datadir"/*
fi
exit $ret
fi
# upgrade does not need to be run on a fresh datadir
echo "@VERSION@" >"$datadir/mysql_upgrade_info"
fi
exit 0

19
mysql-rpath.patch Normal file
View File

@ -0,0 +1,19 @@
MySQL 8.0 includes a feature that requires we set linux NICE capabilities to
mysqld daemon. Because of that, LD_LIBRARY_PATH does not work (see
secure-execution mode in http://man7.org/linux/man-pages/man8/ld.so.8.html).
Related: #1628814
diff --git a/sql/CMakeLists.txt b/sql/CMakeLists.txt
index 3f179a7a..209b3eb2 100644
--- a/sql/CMakeLists.txt
+++ b/sql/CMakeLists.txt
@@ -918,6 +918,8 @@ IF(UNIX_INSTALL_RPATH_ORIGIN_PRIV_LIBDIR)
ADD_INSTALL_RPATH_FOR_PROTOBUF(mysqld)
ENDIF()
+SET_TARGET_PROPERTIES(mysqld PROPERTIES INSTALL_RPATH "${RPATH_LIBDIR}")
+
OPTION(DEBUG_EXTNAME "Build server as mysqld-debug (debug builds only)" OFF)
MARK_AS_ADVANCED(DEBUG_EXTNAME)

41
mysql-s390-tsc.patch Normal file
View File

@ -0,0 +1,41 @@
Support s390/s390x in performance schema's cycle-counting functions.
Filed upstream at http://bugs.mysql.com/bug.php?id=59953
diff --git a/include/my_rdtsc.h b/include/my_rdtsc.h
index 65f7df19..a28f470c 100644
--- a/include/my_rdtsc.h
+++ b/include/my_rdtsc.h
@@ -128,5 +128,6 @@ void my_timer_init(MY_TIMER_INFO *mti);
#define MY_TIMER_ROUTINE_GETSYSTEMTIMEASFILETIME 26
#define MY_TIMER_ROUTINE_ASM_SUNPRO_X86_64 27
#define MY_TIMER_ROUTINE_ASM_AARCH64 28
+#define MY_TIMER_ROUTINE_ASM_S390 29
#endif
diff --git a/mysys/my_rdtsc.cc b/mysys/my_rdtsc.cc
index 54d19691..f18c182f 100644
--- a/mysys/my_rdtsc.cc
+++ b/mysys/my_rdtsc.cc
@@ -204,6 +204,13 @@ ulonglong my_timer_cycles(void) {
__asm __volatile__("mrs %[rt],cntvct_el0" : [ rt ] "=r"(result));
return result;
}
+#elif defined(__GNUC__) && defined(__s390__)
+ /* covers both s390 and s390x */
+ {
+ ulonglong result;
+ __asm__ __volatile__ ("stck %0" : "=Q" (result) : : "cc");
+ return result;
+ }
#elif defined(HAVE_SYS_TIMES_H) && defined(HAVE_GETHRTIME)
/* gethrtime may appear as either cycle or nanosecond counter */
return (ulonglong)gethrtime();
@@ -505,6 +512,8 @@ void my_timer_init(MY_TIMER_INFO *mti) {
mti->cycles.routine = MY_TIMER_ROUTINE_ASM_GCC_SPARC32;
#elif defined(__GNUC__) && defined(__aarch64__)
mti->cycles.routine = MY_TIMER_ROUTINE_ASM_AARCH64;
+#elif defined(__GNUC__) && defined(__s390__)
+ mti->cycles.routine = MY_TIMER_ROUTINE_ASM_S390;
#elif defined(HAVE_SYS_TIMES_H) && defined(HAVE_GETHRTIME)
mti->cycles.routine = MY_TIMER_ROUTINE_GETHRTIME;
#else

68
mysql-scripts-common.sh Normal file
View File

@ -0,0 +1,68 @@
#!/bin/sh
# Some useful functions used in other MySQL helper scripts
# This scripts defines variables datadir, errlogfile, socketfile
export LC_ALL=C
# extract value of a MySQL option from config files
# Usage: get_mysql_option VARNAME DEFAULT SECTION [ SECTION, ... ]
# result is returned in $result
# We use my_print_defaults which prints all options from multiple files,
# with the more specific ones later; hence take the last match.
get_mysql_option(){
if [ $# -ne 3 ] ; then
echo "get_mysql_option requires 3 arguments: section option default_value"
return
fi
sections="$1"
option_name="$2"
default_value="$3"
result=`@bindir@/my_print_defaults $my_print_defaults_extra_args $sections | sed -n "s/^--${option_name}=//p" | tail -n 1`
if [ -z "$result" ]; then
# not found, use default
result="${default_value}"
fi
}
# For the case of running more instances via systemd, scrits that source
# this file can get --default-group-suffix or similar option as the first
# argument. The utility my_print_defaults needs to use it as well, so the
# scripts sourcing this file work with the same options as the daemon.
my_print_defaults_extra_args=''
while echo "$1" | grep -q '^--defaults' ; do
my_print_defaults_extra_args="${my_print_defaults_extra_args} $1"
shift
done
# Defaults here had better match what mysqld_safe will default to
# The option values are generally defined on three important places
# on the default installation:
# 1) default values are hardcoded in the code of mysqld daemon or
# mysqld_safe script
# 2) configurable values are defined in @sysconfdir@/my.cnf
# 3) default values for helper scripts are specified bellow
# So, in case values are defined in my.cnf, we need to get that value.
# In case they are not defined in my.cnf, we need to get the same value
# in the daemon, as in the helper scripts. Thus, default values here
# must correspond with values defined in mysqld_safe script and source
# code itself.
server_sections="mysqld_safe mysqld server mysqld-@MAJOR_VERSION@.@MINOR_VERSION@ client-server"
get_mysql_option "$server_sections" datadir "@MYSQL_DATADIR@"
datadir="$result"
# if there is log_error in the my.cnf, my_print_defaults still
# returns log-error
# log-error might be defined in mysqld_safe and mysqld sections,
# the former has bigger priority
get_mysql_option "$server_sections" log-error "$datadir/`hostname`.err"
errlogfile="$result"
get_mysql_option "$server_sections" socket "@MYSQL_UNIX_ADDR@"
socketfile="$result"
get_mysql_option "$server_sections" pid-file "$datadir/`hostname`.pid"
pidfile="$result"

33
mysql-scripts.patch Normal file
View File

@ -0,0 +1,33 @@
--- mysql-8.0.22/scripts/CMakeLists.txt.old 2020-10-21 11:08:50.654252563 +0200
+++ mysql-8.0.22/scripts/CMakeLists.txt 2020-10-21 11:11:33.635935366 +0200
@@ -507,4 +507,30 @@
)
ENDIF()
ENDIF()
+
+ # files for systemd
+ SET(SYSTEMD_SCRIPTS
+ mysql.tmpfiles.d
+ mysql.service
+ mysql@.service
+ mysql-prepare-db-dir
+ mysql-wait-stop
+ mysql-check-socket
+ mysql-scripts-common
+ mysql_config_multilib
+ my.cnf
+ server.cnf
+ )
+ FOREACH(file ${SYSTEMD_SCRIPTS})
+ IF(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/${file}.sh)
+ CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/${file}.sh
+ ${CMAKE_CURRENT_BINARY_DIR}/${file} ESCAPE_QUOTES @ONLY)
+ ELSEIF(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/${file}.in)
+ CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/${file}.in
+ ${CMAKE_CURRENT_BINARY_DIR}/${file} ESCAPE_QUOTES @ONLY)
+ ELSE()
+ MESSAGE(FATAL_ERROR "Can not find ${file}.sh or ${file}.in in "
+ "${CMAKE_CURRENT_SOURCE_DIR}" )
+ ENDIF()
+ ENDFOREACH()
ENDIF()

27
mysql-sharedir.patch Normal file
View File

@ -0,0 +1,27 @@
diff --git a/mysql-test/CMakeLists.txt b/mysql-test/CMakeLists.txt
index f77bd022..a3a3bd9f 100644
--- a/mysql-test/CMakeLists.txt
+++ b/mysql-test/CMakeLists.txt
@@ -57,6 +57,9 @@ IF(INSTALL_MYSQLTESTDIR)
ENDIF()
+# Expand some paths in the perl script correctly
+CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/mysql-test-run.pl ${CMAKE_CURRENT_SOURCE_DIR}/mysql-test-run.pl @ONLY)
+
IF(NOT ${CMAKE_SOURCE_DIR} STREQUAL ${CMAKE_BINARY_DIR})
# Enable running mtr from build directory
FIND_PROGRAM(PERL_EXECUTABLE perl
diff --git a/mysql-test/mysql-test-run.pl b/mysql-test/mysql-test-run.pl
index b82611fd..7fc5987e 100755
--- a/mysql-test/mysql-test-run.pl
+++ b/mysql-test/mysql-test-run.pl
@@ -1656,7 +1656,7 @@ sub command_line_setup {
my $path_share = $path_language;
@share_locations =
- ("share/mysql-" . $mysql_base_version, "share/mysql", "share");
+ ("@INSTALL_MYSQLSHAREDIR@", "share/mysql-" . $mysql_base_version, "share/mysql", "share");
$path_charsetsdir = my_find_dir($basedir, \@share_locations, "charsets");

36
mysql-wait-stop.sh Normal file
View File

@ -0,0 +1,36 @@
#!/bin/sh
source "`dirname ${BASH_SOURCE[0]}`/mysql-scripts-common"
# This script waits for mysqld to be properly stopped
# (which can be many seconds in some large load).
# Running this as ExecStopPost is useful so that starting which is done
# as part of restart doesn't see the former process still running.
# Wait for the server to properly end the main server
ret=0
TIMEOUT=60
SECONDS=0
if ! [ -f "$pidfile" ]; then
exit 0
fi
MYSQLPID=`cat "$pidfile" 2>/dev/null`
if [ -z "$MYSQLPID" ] ; then
exit 2
fi
while /bin/true; do
# Check process still exists
if ! [ -d "/proc/${MYSQLPID}" ] ; then
break
fi
if [ $SECONDS -gt $TIMEOUT ] ; then
ret=3
break
fi
sleep 1
done
exit $ret

37
mysql.rpmlintrc Normal file
View File

@ -0,0 +1,37 @@
# THIS FILE SERVES FOR WHITELISTING RPMLINT ERRORS AND WARNINGS IN TASKOTRON
# https://fedoraproject.org/wiki/Taskotron/Tasks/dist.rpmlint#Whitelisting_errors
# (same file in python3 package served as a great example)
# Spelling errors
addFilter(r'spelling-error .* en_US (cnf|mysqld|subpackage) ')
# Debug symlinks
addFilter(r'dangling-relative-symlink /usr/lib/.build-id')
# Testsuite
# Some expected tests results are zero-length files
addFilter(r'(zero-length|pem-certificate|hidden-file-or-dir) /usr/share/mysql-test/*')
# Chroot function
# False positive; checked by upstream
addFilter(r'missing-call-to-chdir-with-chroot')
# Missing documentation
# I don't think that's on the upstream priority list
addFilter(r'no-documentation')
addFilter(r'no-manual-page-for-binary')
# Cluster is gone
addFilter("W: obsolete-not-provided mysql-cluster")
addFilter("W: obsolete-not-provided mysql-bench")
addFilter("W: obsolete-not-provided community-mysql-bench")
# Config file without noreplace flag
# Don't replace logs that may contain old entries
addFilter(r'conffile-without-noreplace-flag /var/log/mariadb/mariadb.log')
# Seems pretty standard to me ...
addFilter(r'non-standard-dir-perm /var/log/mysql 750')

62
mysql.service.in Normal file
View File

@ -0,0 +1,62 @@
# It's not recommended to modify this file in-place, because it will be
# overwritten during package upgrades. If you want to customize, the
# best way is to use systemctl edit:
#
# $ systemctl edit @DAEMON_NAME@.service
#
# this will create file
#
# /etc/systemd/system/@DAEMON_NAME@.service.d/override.conf
#
# which be parsed after the file @DAEMON_NAME@.service itself is parsed.
#
# For example, if you want to increase mysql's open-files-limit to 20000
# add following when editing with command above:
#
# [Service]
# LimitNOFILE=20000
#
# Or if you require to execute pre and post scripts in the unit file as root, set
# PermissionsStartOnly=true
#
# For more info about custom unit files, see systemd.unit(5) or
# http://fedoraproject.org/wiki/Systemd#How_do_I_customize_a_unit_file.2F_add_a_custom_unit_file.3F
#
# Don't forget to reload systemd daemon after you change unit configuration:
# root> systemctl --system daemon-reload
[Unit]
Description=@NICE_PROJECT_NAME@ @MAJOR_VERSION@.@MINOR_VERSION@ database server
After=syslog.target
After=network.target
[Service]
Type=notify
User=mysql
Group=mysql
ExecStartPre=@libexecdir@/mysql-check-socket
ExecStartPre=@libexecdir@/mysql-prepare-db-dir %n
# Note: we set --basedir to prevent probes that might trigger SELinux alarms,
# per bug #547485
ExecStart=@libexecdir@/mysqld --basedir=@prefix@
ExecStopPost=@libexecdir@/mysql-wait-stop
# Give a reasonable amount of time for the server to start up/shut down
TimeoutSec=300
# Place temp files in a secure directory, not /tmp
PrivateTmp=true
Restart=on-failure
RestartPreventExitStatus=1
# Sets open_files_limit
LimitNOFILE = 10000
# Set enviroment variable MYSQLD_PARENT_PID. This is required for SQL restart command.
Environment=MYSQLD_PARENT_PID=1
[Install]
WantedBy=multi-user.target

567
mysql.spec Normal file
View File

@ -0,0 +1,567 @@
%undefine __cmake_in_source_build
%global pkg_name %{name}
%global pkgnamepatch mysql
%{!?runselftest:%global runselftest 0}
%global check_testsuite 0
%global require_mysql_selinux 1
%global _pkgdocdirname %{pkg_name}%{!?_pkgdocdir:-%{version}}
%{!?_pkgdocdir: %global _pkgdocdir %{_docdir}/%{pkg_name}-%{version}}
%global _default_patch_flags --no-backup-if-mismatch
%global skiplist platform-specific-tests.list
%bcond_without clibrary
%bcond_without devel
%bcond_without client
%bcond_without common
%bcond_without errmsg
%bcond_without test
%bcond_with config
%bcond_with debug
%global boost_bundled_version 1.73.0
%global daemon_name mysqld
%global daemon_no_prefix mysqld
%global pidfiledir %{_rundir}/%{daemon_name}
%global logrotateddir %{_sysconfdir}/logrotate.d
%global logfiledir %{_localstatedir}/log/mysql
%global logfile %{logfiledir}/%{daemon_no_prefix}.log
%global dbdatadir %{_localstatedir}/lib/mysql
%global mysqluserhome /var/lib/mysql
%bcond_without mysql_names
%bcond_without conflicts
%global sameevr %{?epoch:%{epoch}:}%{version}-%{release}
Name: mysql
Version: 8.0.22
Release: 1
Summary: MySQL client programs and shared libraries
URL: http://www.mysql.com
License: GPLv2 with exceptions and LGPLv2 and BSD
Source0: https://cdn.mysql.com/Downloads/MySQL-8.0/mysql-boost-%{version}.tar.gz
Source2: mysql_config_multilib.sh
Source3: my.cnf.in
Source6: README.mysql-docs
Source7: README.mysql-license
Source10: mysql.tmpfiles.d.in
Source11: mysql.service.in
Source12: mysql-prepare-db-dir.sh
Source14: mysql-check-socket.sh
Source15: mysql-scripts-common.sh
Source17: mysql-wait-stop.sh
Source18: mysql@.service.in
Source30: %{pkgnamepatch}.rpmlintrc
Source31: server.cnf.in
Patch1: %{pkgnamepatch}-install-test.patch
Patch2: %{pkgnamepatch}-s390-tsc.patch
Patch3: %{pkgnamepatch}-file-contents.patch
Patch4: %{pkgnamepatch}-scripts.patch
Patch5: %{pkgnamepatch}-paths.patch
Patch51: %{pkgnamepatch}-chain-certs.patch
Patch52: %{pkgnamepatch}-sharedir.patch
Patch55: %{pkgnamepatch}-rpath.patch
Patch75: %{pkgnamepatch}-arm32-timer.patch
Patch78: %{pkgnamepatch}-gcc11.patch
Patch115: boost-1.58.0-pool.patch
Patch125: boost-1.57.0-mpl-print.patch
BuildRequires: cmake gcc-c++ libaio-devel libedit-devel libevent-devel libicu-devel lz4
BuildRequires: lz4-devel mecab-devel bison libzstd-devel
%ifnarch aarch64 %{arm} s390 s390x
BuildRequires: numactl-devel
%endif
BuildRequires: openssl openssl-devel
%if 0%{?fedora} || 0%{?rhel} > 7
BuildRequires: perl-interpreter perl-generators
%endif
BuildRequires: rpcgen libtirpc-devel
BuildRequires: protobuf-lite-devel rapidjson-devel zlib zlib-devel multilib-rpm-config procps
BuildRequires: time perl(base) perl(Carp) perl(Cwd) perl(Digest::file) perl(Digest::MD5)
BuildRequires: perl(English) perl(Env) perl(Errno) perl(Exporter) perl(Fcntl)
BuildRequires: perl(File::Basename) perl(File::Copy) perl(File::Find) perl(File::Spec)
BuildRequires: perl(File::Spec::Functions) perl(File::Temp) perl(FindBin) perl(Data::Dumper)
BuildRequires: perl(Getopt::Long) perl(if) perl(IO::File) perl(IO::Handle) perl(IO::Select)
BuildRequires: perl(IO::Socket::INET) perl(IPC::Open3) perl(JSON) perl(lib) perl(LWP::Simple)
BuildRequires: perl(Memoize) perl(Net::Ping) perl(POSIX) perl(Socket) perl(strict)
BuildRequires: perl(Sys::Hostname) perl(Test::More) perl(Time::HiRes) perl(Time::localtime)
BuildRequires: perl(warnings) systemd
Requires: bash coreutils grep %{name}-common%{?_isa} = %{sameevr}
Provides: bundled(boost) = %{boost_bundled_version}
%if %{with mysql_names}
Provides: mysql = %{sameevr}
Provides: mysql%{?_isa} = %{sameevr}
Provides: mysql-compat-client = %{sameevr}
Provides: mysql-compat-client%{?_isa} = %{sameevr}
%endif
%{?with_conflicts:Conflicts: mariadb}
%global __requires_exclude ^perl\\((hostnames|lib::mtr|lib::v1|mtr_|My::)
%global __provides_exclude_from ^(%{_datadir}/(mysql|mysql-test)/.*|%{_libdir}/mysql/plugin/.*\\.so)$
%description
MySQL is a multi-user, multi-threaded SQL database server. MySQL is a
client/server implementation consisting of a server daemon (mysqld)
and many different client programs and libraries. The base package
contains the standard MySQL client programs and generic MySQL files.
%if %{with clibrary}
%package libs
Summary: The shared libraries required for MySQL clients
Requires: %{name}-common%{?_isa} = %{sameevr}
%if %{with mysql_names}
Provides: mysql-libs = %{sameevr}
Provides: mysql-libs%{?_isa} = %{sameevr}
%endif
%description libs
The mysql-libs package provides the essential shared libraries for any
MySQL client program or interface. You will need to install this package
to use any other MySQL package or any clients that need to connect to a
MySQL server.
%endif
%package config
Summary: The config files required by server and client
%description config
The package provides the config file my.cnf and my.cnf.d directory used by any
MariaDB or MySQL program. You will need to install this package to use any
other MariaDB or MySQL package if the config files are not provided in the
package itself.
%if %{with common}
%package common
Summary: The shared files required for MySQL server and client
Requires: %{_sysconfdir}/my.cnf
%description common
The mysql-common package provides the essential shared files for any
MySQL program. You will need to install this package to use any other
MySQL package.
%endif
%if %{with errmsg}
%package errmsg
Summary: The error messages files required by MySQL server
Requires: %{name}-common%{?_isa} = %{sameevr}
%description errmsg
The package provides error messages files for the MySQL daemon
%endif
%package server
Summary: The MySQL server and related files
Suggests: %{name}%{?_isa} = %{sameevr}
Requires: mysql%{?_isa}
Requires: %{name}-common%{?_isa} = %{sameevr} %{_sysconfdir}/my.cnf
Requires: %{_sysconfdir}/my.cnf.d %{name}-errmsg%{?_isa} = %{sameevr}
%{?mecab:Requires: mecab-ipadic}
Requires: coreutils
Requires(pre): /usr/sbin/useradd
Requires: systemd
%{?systemd_requires: %systemd_requires}
Recommends: libcap
Requires(post): policycoreutils-python-utils
%if %require_mysql_selinux
Requires: (mysql-selinux if selinux-policy-targeted)
%endif
%if %{with mysql_names}
Provides: mysql-server = %{sameevr}
Provides: mysql-server%{?_isa} = %{sameevr}
Provides: mysql-compat-server = %{sameevr}
Provides: mysql-compat-server%{?_isa} = %{sameevr}
%endif
%{?with_conflicts:Conflicts: mariadb-server}
%{?with_conflicts:Conflicts: mariadb-galera-server}
%description server
MySQL is a multi-user, multi-threaded SQL database server. MySQL is a
client/server implementation consisting of a server daemon (mysqld)
and many different client programs and libraries. This package contains
the MySQL server and some accompanying files and directories.
%if %{with devel}
%package devel
Summary: Files for development of MySQL applications
%{?with_clibrary:Requires: %{name}-libs%{?_isa} = %{sameevr}}
Requires: openssl-devel zlib-devel libzstd-devel
%{?with_conflicts:Conflicts: mariadb-devel}
%description devel
MySQL is a multi-user, multi-threaded SQL database server. This
package contains the libraries and header files that are needed for
developing MySQL client applications.
%endif
%if %{with test}
%package test
Summary: The test suite distributed with MySQL
Requires: %{name}%{?_isa} = %{sameevr} %{name}-common%{?_isa} = %{sameevr}
Requires: %{name}-server%{?_isa} = %{sameevr} gzip lz4 openssl perl(Digest::file)
Requires: perl(Digest::MD5) perl(Env) perl(Exporter) perl(Fcntl) perl(File::Temp)
Requires: perl(FindBin) perl(Data::Dumper) perl(Getopt::Long) perl(IPC::Open3) perl(JSON)
Requires: perl(LWP::Simple) perl(Memoize) perl(Socket) perl(Sys::Hostname)
Requires: perl(Test::More) perl(Time::HiRes)
%{?with_conflicts:Conflicts: mariadb-test}
%if %{with mysql_names}
Provides: mysql-test = %{sameevr}
Provides: mysql-test%{?_isa} = %{sameevr}
%endif
%description test
MySQL is a multi-user, multi-threaded SQL database server. This
package contains the regression test suite distributed with
the MySQL sources.
%endif
%package help
Summary: Docs for development of MySQL applications.
Requires: mysql = %{version}-%{release}
%description help
The package provides Docs for development of MySQL applications.
%prep
%setup -q -n mysql-%{version}
%patch1 -p1
%patch2 -p1
%patch3 -p1
%patch4 -p1
%patch5 -p1
%patch51 -p1
%patch52 -p1
%patch55 -p1
%patch75 -p1
%patch78 -p1
pushd boost/boost_$(echo %{boost_bundled_version}| tr . _)
%patch115 -p0
%patch125 -p1
popd
pushd mysql-test
add_test () {
echo "$1" : BUG#0 "${@:2}" >> %{skiplist}
}
touch %{skiplist}
add_test innodb.redo_log_archive_04 failed since 8.0.17
add_test clone.remote_dml_no_binlog failed since 8.0.17
add_test auth_sec.keyring_file_data_qa sporadic since 8.0.19
add_test collations.chinese sporadic since 8.0.19
add_test main.mysql_load_data_local_dir local infile on
add_test rpl.rpl_row_jsondiff_basic_pk failed since 8.0.22
add_test rpl.rpl_row_jsondiff_basic_nokey failed since 8.0.22
%ifarch %arm aarch64
add_test gis.st_latitude
add_test gis.st_longitude
add_test perfschema.func_file_io missing hw on arm32
add_test perfschema.func_mutex missing hw on arm32
add_test perfschema.global_read_lock missing hw on arm32
add_test perfschema.setup_objects missing hw on arm32
add_test clone.remote_error_basic max_allowed_packet is 0
add_test innodb.create_tablespace
%endif
%ifarch s390x
add_test gis.geometry_class_attri_prop
add_test gis.geometry_property_function_issimple
add_test gis.gis_bugs_crashes
add_test gis.spatial_analysis_functions_buffer
add_test gis.spatial_analysis_functions_centroid
add_test gis.spatial_analysis_functions_distance
add_test gis.spatial_operators_intersection
add_test gis.spatial_op_testingfunc_mix
add_test gis.spatial_utility_function_distance_sphere
add_test gis.spatial_utility_function_simplify
add_test innodb.log_encrypt_kill main.with_recursive
add_test innodb.mysqldump_max_recordsize
add_test main.lock_multi_bug38499
add_test main.window_std_var
add_test main.window_std_var_optimized
add_test main.with_recursive
add_test x.resource_groups
add_test gis.spatial_operators_symdifference
add_test gis.spatial_operators_union
add_test main.subquery_bugs
%endif
%ifarch %arm
add_test perfschema.relaylog
%endif
popd
cp %{SOURCE2} %{SOURCE3} %{SOURCE10} %{SOURCE11} %{SOURCE12} \
%{SOURCE14} %{SOURCE15} %{SOURCE17} %{SOURCE18} %{SOURCE31} scripts
%build
%ifarch %arm
%define _lto_cflags %{nil}
%endif
%if %runselftest
if [ x"$(id -u)" = "x0" ]; then
echo "mysql's regression tests fail if run as root."
echo "If you really need to build the RPM as root, use"
echo "--nocheck to skip the regression tests."
exit 1
fi
%endif
mkdir -p build && chmod +w build && cd build
cmake .. \
-DBUILD_CONFIG=mysql_release \
-DFEATURE_SET="community" \
-DINSTALL_LAYOUT=RPM \
-DDAEMON_NAME="%{daemon_name}" \
-DDAEMON_NO_PREFIX="%{daemon_no_prefix}" \
-DLOG_LOCATION="%{logfile}" \
-DPID_FILE_DIR="%{pidfiledir}" \
-DNICE_PROJECT_NAME="MySQL" \
-DCMAKE_INSTALL_PREFIX="%{_prefix}" \
-DSYSCONFDIR="%{_sysconfdir}" \
-DSYSCONF2DIR="%{_sysconfdir}/my.cnf.d" \
-DINSTALL_DOCDIR="share/doc/%{_pkgdocdirname}" \
-DINSTALL_DOCREADMEDIR="share/doc/%{_pkgdocdirname}" \
-DINSTALL_INCLUDEDIR=include/mysql \
-DINSTALL_INFODIR=share/info \
-DINSTALL_LIBEXECDIR=libexec \
-DINSTALL_LIBDIR="%{_lib}/mysql" \
-DRPATH_LIBDIR="%{_libdir}" \
-DINSTALL_MANDIR=share/man \
-DINSTALL_MYSQLSHAREDIR=share/%{pkg_name} \
-DINSTALL_MYSQLTESTDIR=share/mysql-test \
-DINSTALL_PLUGINDIR="%{_lib}/mysql/plugin" \
-DINSTALL_SBINDIR=bin \
-DINSTALL_SUPPORTFILESDIR=share/%{pkg_name} \
-DMYSQL_DATADIR="%{dbdatadir}" \
-DMYSQL_UNIX_ADDR="/var/lib/mysql/mysql.sock" \
-DENABLED_LOCAL_INFILE=ON \
-DWITH_SYSTEMD=1 \
-DSYSTEMD_SERVICE_NAME="%{daemon_name}" \
-DSYSTEMD_PID_DIR="%{pidfiledir}" \
-DWITH_INNODB_MEMCACHED=ON \
%ifnarch aarch64 %{arm} s390 s390x
-DWITH_NUMA=ON \
%endif
%ifarch s390 s390x armv7hl
-DUSE_LD_GOLD=OFF \
%endif
-DWITH_ROUTER=OFF \
-DWITH_SYSTEM_LIBS=ON \
-DWITH_MECAB=system \
-DWITH_BOOST=../boost \
-DREPRODUCIBLE_BUILD=OFF \
-DCMAKE_C_FLAGS="%{optflags}%{?with_debug: -fno-strict-overflow -Wno-unused-result -Wno-unused-function -Wno-unused-but-set-variable}" \
-DCMAKE_CXX_FLAGS="%{optflags}%{?with_debug: -fno-strict-overflow -Wno-unused-result -Wno-unused-function -Wno-unused-but-set-variable}" \
-DCMAKE_EXE_LINKER_FLAGS="-pie %{build_ldflags}" \
%{?with_debug: -DWITH_DEBUG=1} \
%{?with_debug: -DMYSQL_MAINTAINER_MODE=0} \
-DTMPDIR=/var/tmp \
-DWITH_MYSQLD_LDFLAGS="%{build_ldflags}" \
-DCMAKE_C_LINK_FLAGS="%{build_ldflags}" \
-DCMAKE_CXX_LINK_FLAGS="%{build_ldflags}"
cmake .. -LAH
%make_build
cd -
%install
cd build
make DESTDIR=%{buildroot} install
if %multilib_capable; then
mv %{buildroot}%{_bindir}/mysql_config %{buildroot}%{_bindir}/mysql_config-%{__isa_bits}
install -p -m 0755 scripts/mysql_config_multilib %{buildroot}%{_bindir}/mysql_config
fi
install -p -m 0644 Docs/INFO_SRC %{buildroot}%{_libdir}/mysql/
install -p -m 0644 Docs/INFO_BIN %{buildroot}%{_libdir}/mysql/
mkdir -p %{buildroot}%{logfiledir}
mkdir -p %{buildroot}%{pidfiledir}
install -p -m 0755 -d %{buildroot}%{dbdatadir}
install -p -m 0750 -d %{buildroot}%{_localstatedir}/lib/mysql-files
install -p -m 0700 -d %{buildroot}%{_localstatedir}/lib/mysql-keyring
install -D -p -m 0644 scripts/my.cnf %{buildroot}%{_sysconfdir}/my.cnf
install -D -p -m 644 scripts/mysql.service %{buildroot}%{_unitdir}/%{daemon_name}.service
install -D -p -m 644 scripts/mysql@.service %{buildroot}%{_unitdir}/%{daemon_name}@.service
install -D -p -m 0644 scripts/mysql.tmpfiles.d %{buildroot}%{_tmpfilesdir}/%{daemon_name}.conf
rm -r %{buildroot}%{_tmpfilesdir}/mysql.conf
install -D -p -m 755 scripts/mysql-prepare-db-dir %{buildroot}%{_libexecdir}/mysql-prepare-db-dir
install -p -m 755 scripts/mysql-wait-stop %{buildroot}%{_libexecdir}/mysql-wait-stop
install -p -m 755 scripts/mysql-check-socket %{buildroot}%{_libexecdir}/mysql-check-socket
install -p -m 644 scripts/mysql-scripts-common %{buildroot}%{_libexecdir}/mysql-scripts-common
install -D -p -m 0644 scripts/server.cnf %{buildroot}%{_sysconfdir}/my.cnf.d/%{pkg_name}-server.cnf
rm %{buildroot}%{_libdir}/mysql/*.a
rm %{buildroot}%{_mandir}/man1/comp_err.1*
mkdir -p %{buildroot}%{logrotateddir}
mv %{buildroot}%{_datadir}/%{pkg_name}/mysql-log-rotate %{buildroot}%{logrotateddir}/%{daemon_name}
chmod 644 %{buildroot}%{logrotateddir}/%{daemon_name}
mkdir -p %{buildroot}%{_sysconfdir}/ld.so.conf.d
echo "%{_libdir}/mysql" > %{buildroot}%{_sysconfdir}/ld.so.conf.d/%{name}-%{_arch}.conf
mv %{buildroot}%{_bindir}/mysqld %{buildroot}%{_libexecdir}/mysqld
mkdir -p %{buildroot}%{_sbindir}
ln -s %{_libexecdir}/mysqld %{buildroot}%{_sbindir}/mysqld
%if %{with debug}
mv %{buildroot}%{_bindir}/mysqld-debug %{buildroot}%{_libexecdir}/mysqld
%endif
cd -
install -p -m 0644 %{SOURCE6} %{basename:%{SOURCE6}}
install -p -m 0644 %{SOURCE7} %{basename:%{SOURCE7}}
install -p -m 0644 mysql-test/%{skiplist} %{buildroot}%{_datadir}/mysql-test
mkdir -p %{buildroot}%{_sysconfdir}/my.cnf.d
%check
%if %runselftest
pushd build
make test VERBOSE=1
cd mysql-test
cp ../../mysql-test/%{skiplist} .
export MTR_BUILD_THREAD=%{__isa_bits}
./mtr %{?with_debug:--debug-server} \
--mem --parallel=auto --force --retry=2 \
--mysqld=--binlog-format=mixed \
--suite-timeout=720 --testcase-timeout=30 \
--report-unstable-tests --clean-vardir \
%if %{check_testsuite}
--max-test-fail=0 || :
%else
--skip-test-list=%{skiplist}
%endif
rm -r var $(readlink var)
cd -
popd
%endif
%pre server
/usr/sbin/groupadd -g 27 -o -r mysql >/dev/null 2>&1 || :
/usr/sbin/useradd -M -N -g mysql -o -r -d %{mysqluserhome} -s /sbin/nologin \
-c "MySQL Server" -u 27 mysql >/dev/null 2>&1 || :
%post server
%systemd_post %{daemon_name}.service
if [ ! -e "%{logfile}" -a ! -h "%{logfile}" ] ; then
install /dev/null -m0640 -omysql -gmysql "%{logfile}"
fi
%preun server
%systemd_preun %{daemon_name}.service
%postun server
%systemd_postun_with_restart %{daemon_name}.service
%files
%doc README README.mysql-license README.mysql-docs
%{_bindir}/{mysql,mysql_config_editor,mysqladmin,mysqlcheck,mysqldump}
%{_bindir}/{mysqlimport,mysqlpump,mysqlshow,mysqlslap,mysqlbinlog,zlib_decompress}
%exclude %{_tmpfilesdir}/mysql.conf
%files libs
%{_libdir}/mysql/libmysqlclient*.so.*
%config(noreplace) %{_sysconfdir}/ld.so.conf.d/*
%files config
%dir %{_sysconfdir}/my.cnf.d
%config(noreplace) %{_sysconfdir}/my.cnf
%files common
%dir %{_libdir}/mysql
%dir %{_datadir}/mysql
%{_datadir}/mysql/charsets
%files errmsg
%{_datadir}/mysql/messages_to_error_log.txt
%{_datadir}/mysql/messages_to_clients.txt
%{_datadir}/mysql/{errmsg-utf8.txt,english}
%lang(bg) %{_datadir}/mysql/bulgarian
%lang(cs) %{_datadir}/mysql/czech
%lang(da) %{_datadir}/mysql/danish
%lang(nl) %{_datadir}/mysql/dutch
%lang(et) %{_datadir}/mysql/estonian
%lang(fr) %{_datadir}/mysql/french
%lang(de) %{_datadir}/mysql/german
%lang(el) %{_datadir}/mysql/greek
%lang(hu) %{_datadir}/mysql/hungarian
%lang(it) %{_datadir}/mysql/italian
%lang(ja) %{_datadir}/mysql/japanese
%lang(ko) %{_datadir}/mysql/korean
%lang(no) %{_datadir}/mysql/norwegian
%lang(no) %{_datadir}/mysql/norwegian-ny
%lang(pl) %{_datadir}/mysql/polish
%lang(pt) %{_datadir}/mysql/portuguese
%lang(ro) %{_datadir}/mysql/romanian
%lang(ru) %{_datadir}/mysql/russian
%lang(sr) %{_datadir}/mysql/serbian
%lang(sk) %{_datadir}/mysql/slovak
%lang(es) %{_datadir}/mysql/spanish
%lang(sv) %{_datadir}/mysql/swedish
%lang(uk) %{_datadir}/mysql/ukrainian
%files server
%{_bindir}/{ibd2sdi,myisamchk,myisam_ftdump,myisamlog,myisampack,my_print_defaults}
%{_bindir}/{mysql_secure_installation,mysql_ssl_rsa_setup,mysql_tzinfo_to_sql,perror}
%{_bindir}/{mysql_upgrade,mysqld_pre_systemd,mysqldumpslow,innochecksum}
%config(noreplace) %{_sysconfdir}/my.cnf.d/mysql-server.cnf
%{_sbindir}/mysqld
%caps(cap_sys_nice=ep) %{_libexecdir}/mysqld
%{_libdir}/mysql/{INFO_SRC,INFO_BIN,plugin}
%dir %{_datadir}/mysql
%{_datadir}/mysql/dictionary.txt
%{_datadir}/mysql/*.sql
%{_unitdir}/mysqld*
%{_libexecdir}/{mysql-prepare-db-dir,mysql-wait-stop,mysql-check-socket,mysql-scripts-common}
%exclude %{_tmpfilesdir}/mysql.conf
%exclude %{_libdir}/mysql/*.a
%exclude %{_datadir}/mysql/{mysql.server,mysqld_multi.server}
%{_tmpfilesdir}/mysqld.conf
%attr(0755,mysql,mysql) %dir %{_localstatedir}/lib/mysql
%attr(0750,mysql,mysql) %dir %{_localstatedir}/lib/mysql-files
%attr(0700,mysql,mysql) %dir %{_localstatedir}/lib/mysql-keyring
%attr(0750,mysql,mysql) %dir %{_localstatedir}/log/mysql
%attr(0755,mysql,mysql) %dir %{_rundir}/mysqld
%attr(0640,mysql,mysql) %config %ghost %verify(not md5 size mtime) %{_localstatedir}/log/mysql/mysqld.log
%config(noreplace) %{_sysconfdir}/logrotate.d/mysqld
%files devel
%{_bindir}/mysql_config*
%{_includedir}/mysql
%{_datadir}/aclocal/mysql.m4
%{_libdir}/mysql/libmysqlclient.so
%{_libdir}/pkgconfig/mysqlclient.pc
%exclude %{_bindir}/mysql_config_editor
%files test
%{_bindir}/{mysql_client_test,mysqltest,mysqltest_safe_process,mysqlxtest}
%{_bindir}/{mysqld_safe,comp_err}
%attr(-,mysql,mysql) %{_datadir}/mysql-test
%files help
%doc README.mysql-license README.mysql-docs LICENSE
%doc storage/innobase/COPYING.Percona storage/innobase/COPYING.Google
%{_mandir}/man1/{mysql.1*,mysql_config_editor.1*,mysqladmin.1*,mysqlbinlog.1*,mysqldump.1*}
%{_mandir}/man1/{mysqlcheck.1*,mysqlimport.1*,mysqlpump.1*,mysqlshow.1*,mysqlslap.1*}
%{_mandir}/man1/{ibd2sdi.1*,myisamchk.1*,myisamlog.1*,myisampack.1*,myisam_ftdump.1*,mysqlman.1*}
%{_mandir}/man1/{my_print_defaults.1*,mysql_secure_installation.1*,mysql_ssl_rsa_setup.1*}
%{_mandir}/man1/{mysql_tzinfo_to_sql.1*,mysql_upgrade.1*,mysqldumpslow.1*,perror.1*}
%{_mandir}/man1/{lz4_decompress.1*,zlib_decompress.1*,innochecksum.1*,mysql.server.1*}
%{_mandir}/man8/mysqld.8*
%{_mandir}/man1/mysql_config.1*
%exclude %{_mandir}/man1/{mysqld_multi.1*,mysqld_safe.1*,comp_err.1*}
%changelog
* Tue Dec 1 2020 weishengjing <weishengjing1@huawei.com> - 8.0.22-1
- New version 8.0.22 fix CVES: CVE-2020-14852 CVE-2020-14794 CVE-2020-14775
CVE-2020-14893 CVE-2020-14829 CVE-2020-14828 CVE-2020-14888 CVE-2020-14891
CVE-2020-14812 CVE-2020-14870 CVE-2020-14769 CVE-2020-14878 CVE-2020-14789
CVE-2020-14821 CVE-2020-14844 CVE-2020-14836 CVE-2020-14830 CVE-2020-14827
CVE-2020-14773 CVE-2020-14765 CVE-2020-14869 CVE-2020-14776 CVE-2020-14861
CVE-2020-14866 CVE-2020-14672 CVE-2020-14837 CVE-2020-14771 CVE-2020-14785
CVE-2020-14838 CVE-2020-14848 CVE-2020-14791 CVE-2020-14793 CVE-2020-14804
CVE-2020-14777 CVE-2020-14800 CVE-2020-14786 CVE-2020-14845 CVE-2020-14839
CVE-2020-14846 CVE-2020-14867 CVE-2020-14868 CVE-2020-14873 CVE-2020-14860
CVE-2020-14814 CVE-2020-14790 CVE-2020-14809
* Sat Sep 19 2020 maminjie <maminjie1@huawei.com> - 8.0.21-2
- fix internal compiler error: Segmentation fault
* Mon Sep 14 2020 maminjie <maminjie1@huawei.com> - 8.0.21-1
- upgrade to 8.0.21
* Mon Jun 1 2020 Jeffery.Gao <gaojianxing@huawei.com> - 8.0.18-2
- Package upgrade.
* Sun Mar 1 2020 zhangtao<zhangtao221@huawei.com> 8.0.17-3
- add fstack-protector-strong
* Fri Feb 28 2020 catastrowings <jianghuhao1994@163.com> 8.0.17-2
- openEuler package init.

1
mysql.tmpfiles.d.in Normal file
View File

@ -0,0 +1 @@
d @PID_FILE_DIR@ 0755 mysql mysql -

4
mysql.yaml Normal file
View File

@ -0,0 +1,4 @@
version_control: github
src_repo: mysql/mysql-server
tag_prefix: mysql-cluster-
seperator: .

62
mysql@.service.in Normal file
View File

@ -0,0 +1,62 @@
# It's not recommended to modify this file in-place, because it will be
# overwritten during package upgrades. If you want to customize, the
# best way is to use systemctl edit:
#
# $ systemctl edit @DAEMON_NAME@.service
#
# this will create file
#
# /etc/systemd/system/@DAEMON_NAME@.service.d/override.conf
#
# which be parsed after the file @DAEMON_NAME@.service itself is parsed.
#
# For example, if you want to increase mysql's open-files-limit to 20000
# add following when editing with command above:
#
# [Service]
# LimitNOFILE=20000
#
# Or if you require to execute pre and post scripts in the unit file as root, set
# PermissionsStartOnly=true
#
# For more info about custom unit files, see systemd.unit(5) or
# http://fedoraproject.org/wiki/Systemd#How_do_I_customize_a_unit_file.2F_add_a_custom_unit_file.3F
#
# Don't forget to reload systemd daemon after you change unit configuration:
# root> systemctl --system daemon-reload
[Unit]
Description=@NICE_PROJECT_NAME@ @MAJOR_VERSION@.@MINOR_VERSION@ database server
After=syslog.target
After=network.target
[Service]
Type=notify
User=mysql
Group=mysql
ExecStartPre=@libexecdir@/mysql-check-socket --defaults-group-suffix=.%I
ExecStartPre=@libexecdir@/mysql-prepare-db-dir --defaults-group-suffix=.%I %n
# Note: we set --basedir to prevent probes that might trigger SELinux alarms,
# per bug #547485
ExecStart=@libexecdir@/mysqld --defaults-group-suffix=.%I --basedir=@prefix@
ExecStopPost=@libexecdir@/mysql-wait-stop --defaults-group-suffix=.%I
# Give a reasonable amount of time for the server to start up/shut down
TimeoutSec=300
# Place temp files in a secure directory, not /tmp
PrivateTmp=true
Restart=on-failure
RestartPreventExitStatus=1
# Sets open_files_limit
LimitNOFILE = 10000
# Set enviroment variable MYSQLD_PARENT_PID. This is required for SQL restart command.
Environment=MYSQLD_PARENT_PID=1
[Install]
WantedBy=multi-user.target

26
mysql_config_multilib.sh Normal file
View File

@ -0,0 +1,26 @@
#! /bin/sh
#
# Wrapper script for mysql_config to support multilib
#
# This command respects setarch
bits=$(rpm --eval %__isa_bits)
case $bits in
32|64) status=known ;;
*) status=unknown ;;
esac
if [ "$status" = "unknown" ] ; then
echo "$0: error: command 'rpm --eval %__isa_bits' returned unknown value: $bits"
exit 1
fi
if [ -x @bindir@/mysql_config-$bits ] ; then
@bindir@/mysql_config-$bits "$@"
else
echo "$0: error: needed binary: @bindir@/mysql_config-$bits is missing"
exit 1
fi

18
server.cnf.in Normal file
View File

@ -0,0 +1,18 @@
#
# This group are read by MySQL server.
# Use it for options that only the server (but not clients) should see
#
# For advice on how to change settings please see
# http://dev.mysql.com/doc/refman/en/server-configuration-defaults.html
# Settings user and group are ignored when systemd is used.
# If you need to run mysqld under a different user or group,
# customize your systemd unit file for mysqld according to the
# instructions in http://fedoraproject.org/wiki/Systemd
[mysqld]
datadir=@MYSQL_DATADIR@
socket=@MYSQL_UNIX_ADDR@
log-error=@LOG_LOCATION@
pid-file=@PID_FILE_DIR@/@DAEMON_NO_PREFIX@.pid