Mysql-5.7 Compile
Compile build MySQL-5.7 from source code with Debian 12+ or Fedora 38+.
Get mysql-5.7 source code
# get with github
git clone --depth 1 --branch=mysql-5.7.44 [email protected]:mysql/mysql-server.git
# get with mysql.com
wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.44.tar.gz
Compile build
# Debian
sudo apt install libncurses-dev bison libatomic1 libaio-dev pkg-config make cmake gcc g++ mariadb-common
# Fedora
sudo dnf install ncurses-devel bison libtirpc-devel rpcgen libatomic mariadb-common
# openssl
git clone --depth 1 --branch=OpenSSL_1_1_1w https://github.com/openssl/openssl.git
cd openssl
./config --prefix=/usr/local/openssl1.1.1w/
make -j16 && sudo make install
cd /usr/local && sudo ln -s openssl1.1.1w openssl
# boost
wget http://sourceforge.net/projects/boost/files/boost/1.59.0/boost_1_59_0.tar.gz
sudo tar zxvf boost_1_59_0.tar.gz -C /usr/local/ && sudo chmod 755 /usr/local/boost_1_59_0
cd /usr/local && sudo ln -s boost_1_59_0 boost
# user & data
sudo groupadd mysql
sudo useradd -r -g mysql -s /bin/false mysql
# mysql5.7
mkdir build && cd build
cmake .. -DCMAKE_INSTALL_PREFIX=/usr/local/mysql/ \
-DMYSQL_DATADIR=/database/mysql/data \
-DWITH_BOOST=/usr/local/boost/ \
-DSYSCONFDIR=/usr/local/mysql/etc \
-DBUILD_CONFIG=mysql_release \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_PARTITION_STORAGE_ENGINE=1 \
-DWITH_FEDERATED_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITH_MYISAM_STORAGE_ENGINE=1 \
-DENABLED_LOCAL_INFILE=1 \
-DENABLE_DTRACE=0 \
-DDEFAULT_CHARSET=utf8mb4 \
-DWITH_DEBUG=0 \
-DDEFAULT_COLLATION=utf8mb4_general_ci \
-DWITH_EMBEDDED_SERVER=0 \
-DWITH_SSL=/usr/local/openssl \
-DWITH_SYSTEMD=on
make -j16 && sudo make install
Initialize mysqldb
sudo chown mysql:mysql /usr/local/mysql
# make log dir
sudo mkdir -p /var/log/mysql/ && sudo chown mysql:mysql /var/log/mysql/
# if use mysqld-debug
cd /usr/local/mysql/bin && sudo ln -s mysqld-debug mysqld
# initialize
sudo mkdir -p /database/mysql/data
sudo chown -R mysql:mysql /database/mysql/data
sudo -u mysql /usr/local/mysql/bin/mysqld --initialize --explicit_defaults_for_timestamp --user=mysql --basedir=/usr/local/mysql --datadir=/database/mysql/data
Start server
sudo cp /usr/local/mysql/lib/systemd/system/mysqld.service /usr/lib/systemd/system/
/lib/systemd/system/mysqld.service
[Unit]
Description=MySQL Server
Documentation=man:mysqld(8)
Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html
After=network.target
After=syslog.target
[Install]
WantedBy=multi-user.target
[Service]
User=mysql
Group=mysql
Type=forking
RuntimeDirectory=mysqld
RuntimeDirectoryMode=2755
# Disable service start and stop timeout logic of systemd for mysqld service.
TimeoutSec=0
# Execute pre and post scripts as root
PermissionsStartOnly=true
# Needed to create system tables
ExecStartPre=/usr/local/mysql/bin/mysqld_pre_systemd
# Start main service
ExecStart=/usr/local/mysql/bin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid $MYSQLD_OPTS
# Use this to switch malloc implementation
EnvironmentFile=-/etc/sysconfig/mysql
# Sets open_files_limit
LimitNOFILE = 5000
Restart=on-failure
RestartPreventExitStatus=1
PrivateTmp=false
/etc/mysql/conf.d/mysqld.cnf
[mysqld]
port = 3306
socket = /var/run/mysqld/mysql.sock
pid-file = /var/run/mysqld/mysql.pid
user = mysql
basedir = /usr/local/mysql
datadir = /database/mysql/data
log_error = /var/log/mysql/mysql-error.log
/etc/mysql/conf.d/mysql.cnf
[client]
port = 3306
socket = /var/run/mysqld/mysql.sock
sudo systemctl enable --now mysqld.service
Create user
mysql -uroot -h127.0.0.1 -p'do%%b(wgs8-Q'
Tip: password is execute
mysqld --initialize
generated.
SET PASSWORD = PASSWORD('debian');
GRANT ALL ON *.* TO usr1@'%' IDENTIFIED BY 'debian';
mysql -h10.24.0.1 -uusr1 -pdebian