天天看點

最新版本mysql源碼編譯5.7.38

1. 依赖包安装
yum -y install make gcc-c++ cmake bison-devel ncurses-devel libaio libaio-devel net-tools lrzsz openssl openssl-devel 
yum install http://repo.okay.com.mx/centos/7/x86_64/release/okay-release-1-1.noarch.rpm
yum install cmake3
yum -y install boost
yum -y install boost-devel
yum -y install boost-doc

ln -s  /usr/bin/cmake3 /usr/bin/cmake

2. 下载boost

[root@mysql02 soft]# cd /usr/local/boost/
[root@mysql02 boost]# pwd
/usr/local/boost
[root@mysql02 boost]# ll
总用量 81752
-rw-r--r--. 1 root root 83709983 7月  26 16:18 boost_1_59_0.tar.gz

3. 创建用户以及目录

shell> groupadd mysql
shell> useradd -r -g mysql -s /bin/false mysql

shell> mkdir -p /mysql/product/{mysql_33061,mysql_33062}/{data,log,binlog,relaylog,redo,undo,mysql-files}
shell> chown -R mysql:mysql /mysql/product/{mysql_33061,mysql_33062}
shell> chmod -R 750 /mysql/product/{mysql_33061,mysql_33062}

shell> echo 'export PATH=/mysql/app/bin:$PATH' >> $HOME/.bash_profile
shell> source $HOME/.bash_profile

mkdir -p /mysql/app
chown -R mysql:mysql /mysql/app
chmod -R 750 /mysql/app

mkdir -p /mysql/product/mysql_33060/{data,log,binlog,relaylog,redo,undo,mysql-files}
chown -R mysql:mysql /mysql/product/mysql_33060
chmod -R 750 /mysql/product/mysql_33060


4. 源码编译

注意我们选择的版本是mysql-boost-5.7.38.tar.gz,包含了boost解压后,的路径为/root/soft/boost

tar zxvf  mysql-boost-5.7.38.tar.gz -C ./soft --strip-components=1

有几个注意点,首先我们后期设计的时候,目录都会以端口号设计。
例如33060这个我们可以涉设计成mysql_33060。

shell> mkdir ./soft/bld
shell> cd ./soft/bld
shell> cmake .. -DCMAKE_INSTALL_PREFIX=/mysql/app \
-DINSTALL_LAYOUT=STANDALONE \
-DMYSQL_DATADIR=/mysql/product/data \
-DDEFAULT_CHARSET=utf8mb4 \
-DDEFAULT_COLLATION=utf8mb4_general_ci \
-DINSTALL_SECURE_FILE_PRIVDIR=/mysql/product/mysql-files \
-DENABLED_LOCAL_INFILE=OFF \
-DMYSQL_TCP_PORT=33060 \
-DSYSCONFDIR=/mysql/app \
-DMYSQL_UNIX_ADDR=/mysql/product/data/mysql.sock \
-DWITH_SYSTEMD=ON \
-DSYSTEMD_SERVICE_NAME=mysqld \
-DSYSTEMD_PID_DIR=/mysql/product/data \
-DCOMPILATION_COMMENT='MySQL Server (GPL) Customised Version by XUH' \
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITH_PERFSCHEMA_STORAGE_ENGINE=1 \
-DWITH_EXAMPLE_STORAGE_ENGINE=1 \
-DWITH_FEDERATED_STORAGE_ENGINE=1 \
-DWITH_PARTITION_STORAGE_ENGINE=1 \
-DWITH_BOOST=/root/soft/boost



shell> make -j 10 && make install



-- Installing: /mysql/app/mysql-test/./t/xml.test
-- Installing: /mysql/app/mysql-test/./valgrind.supp
-- Installing: /mysql/app/./README-test
-- Installing: /mysql/app/mysql-test/mtr
-- Installing: /mysql/app/mysql-test/mysql-test-run
-- Installing: /mysql/app/mysql-test/lib/My/SafeProcess/my_safe_process
-- Up-to-date: /mysql/app/mysql-test/lib/My/SafeProcess/my_safe_process
-- Installing: /mysql/app/mysql-test/lib/My/SafeProcess/Base.pm
-- Installing: /mysql/app/support-files/mysqld_multi.server
-- Installing: /mysql/app/support-files/mysql-log-rotate
-- Installing: /mysql/app/support-files/magic
-- Installing: /mysql/app/share/aclocal/mysql.m4
-- Installing: /mysql/app/support-files/mysql.server


5. 定制打包
[root@mysql02 bld]#  mysqld --verbose --help|grep -A 1 -w "Default options are"
Default options are read from the following files in the given order:
/etc/my.cnf /etc/mysql/my.cnf /mysql/app/my.cnf ~/.my.cnf 


shell> cd /mysql/
shell> tar zcvf mysql-5.7.38.tar.gz ./app
[root@mysql02 mysql]#  ls -rtlh|grep mysql-5.7.38.tar.gz|awk '{print $1,$5,$NF}'|column -t
-rw-r--r--  508M  mysql-5.7.38.tar.gz



6. 设计my.cnf


DBInstanceClassMemory = 16374562816 bytes
max_connections = GREATEST({log(DBInstanceClassMemory/805306368,2)*45},{log(DBInstanceClassMemory/8187281408,2)*1000})
table_open_cache = {LEAST(DBInstanceClassMemory/1073741824*512, 2048)}
table_definition_cache = {LEAST(DBInstanceClassMemory/1073741824*512, 2048)}
innodb_buffer_pool_size = {DBInstanceClassMemory*3/4}


shell> vi /etc/my.cnf
[mysqld]
basedir = /mysql/app
datadir = /mysql/product/mysql_33060/data
port = 33060
socket = /mysql/product/mysql_33060/data/mysql.sock
back_log = 3000
max_connections = GREATEST({log(DBInstanceClassMemory/805306368,2)*45},{log(DBInstanceClassMemory/8187281408,2)*1000})
table_open_cache = {LEAST(DBInstanceClassMemory/1073741824*512, 2048)}
table_definition_cache = {LEAST(DBInstanceClassMemory/1073741824*512, 2048)}
thread_cache_size = 512
character-set-server = utf8mb4
wait_timeout = 3600
interactive_timeout = 3600
max_heap_table_size = 67108864
tmp_table_size = 67108864
max_allowed_packet = 1073741824
log_bin_trust_function_creators = 1
secure_file_priv = /mysql/product/mysql_33060/mysql-files
log_output = TABLE
log_error = /mysql/product/mysql_33060/log/mysql.err
slow_query_log_file = /mysql/product/mysql_33060/log/mysql-slow.log
long_query_time = 1
general_log_file = /mysql/product/mysql_33060/log/mysql-general.log
server-id = 1
log-bin = /mysql/product/mysql_33060/binlog/mysql-binlog
binlog-format = ROW
gtid_mode = ON
enforce_gtid_consistency = ON
log_slave_updates = ON
master_info_repository = TABLE
relay_log_info_repository = TABLE
expire_logs_days = 7
sync_binlog = 1
max_binlog_size = 524288000
relay-log = /mysql/product/mysql_33060/relaylog/mysql-relay-bin
innodb_buffer_pool_size = {DBInstanceClassMemory*3/4}
innodb_log_file_size = 1073741824
innodb_log_group_home_dir = /mysql/product/mysql_33060/redo
innodb_flush_log_at_trx_commit = 2
innodb_undo_directory = /mysql/product/mysql_33060/undo
innodb_undo_tablespaces = 2
innodb_data_file_path = ibdata1:500M:autoextend
innodb_temp_data_file_path = ibtmp1:200M:autoextend
innodb_flush_method = O_DIRECT
innodb_write_io_threads = 12
innodb_read_io_threads = 12
innodb_io_capacity = 20000
query_cache_type = off
query_cache_size = 0 




=================================================================================================================================
[mysqld]
basedir = /mysql/app
datadir = /mysql/product/mysql_33060/data
port = 33060
socket = /mysql/product/mysql_33060/data/mysql.sock
back_log = 3000
max_connections = 1000
table_open_cache = 1024
table_definition_cache = 1024
thread_cache_size = 512
character-set-server = utf8mb4
wait_timeout = 3600
interactive_timeout = 3600
max_heap_table_size = 67108864
tmp_table_size = 67108864
max_allowed_packet = 1073741824
log_bin_trust_function_creators = 1
secure_file_priv = /mysql/product/mysql_33060/mysql-files
log_output = TABLE
log_error = /mysql/product/mysql_33060/log/mysql.err
slow_query_log_file = /mysql/product/mysql_33060/log/mysql-slow.log
long_query_time = 1
general_log_file = /mysql/product/mysql_33060/log/logmysql-general.log
server-id = 1
log-bin = /mysql/product/mysql_33060/binlog/mysql-binlog
binlog-format = ROW
gtid_mode = ON
enforce_gtid_consistency = ON
log_slave_updates = ON
master_info_repository = TABLE
relay_log_info_repository = TABLE
expire_logs_days = 7
sync_binlog = 1
max_binlog_size = 524288000
relay-log = /mysql/product/mysql_33060/relaylog/mysql-relay-bin
innodb_buffer_pool_size =  22938M
innodb_log_file_size = 1G
innodb_log_group_home_dir = /mysql/product/mysql_33060/redo
innodb_flush_log_at_trx_commit = 2
innodb_undo_directory = /mysql/product/mysql_33060/undo
innodb_undo_tablespaces = 2
innodb_data_file_path = ibdata1:500M:autoextend
innodb_temp_data_file_path = ibtmp1:200M:autoextend
innodb_flush_method = O_DIRECT
innodb_write_io_threads = 12
innodb_read_io_threads = 12
innodb_io_capacity = 20000
query_cache_type = off
query_cache_size = 0 

=================================================================================================================================
7.初始化mysql

[root@mysql02 ~]# mysqld --defaults-file=/etc/my.cnf --initialize --user=mysql

8.查看临时密码
[root@mysql02 system]#  cat /mysql/product/mysql_33060/log/mysql.err|grep -i "A temporary password"
2022-07-27T02:25:41.931770Z 1 [Note] A temporary password is generated for root@localhost: s:cf1y<5SJHh
[root@mysql02 ~]#  mysqld --daemonize --user=mysql
Initialization of mysqld failed: 0
[root@mysql02 ~]# 


9.登录密码修改

[root@mysql02 system]# mysql -h localhost -S  /mysql/product/mysql_33060/data/mysql.sock -uroot -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 5
Server version: 5.7.38-log

Copyright (c) 2000, 2022, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> ALTER USER "root"@"localhost" IDENTIFIED BY "123456"; 
Query OK, 0 rows affected (0.00 sec)

mysql> 



10. 配置启动进程


shell> cd /usr/lib/systemd/system
shell> touch mysqld.service
shell> chmod 644 mysqld.service
shell> vi mysqld.service
[Unit]
Description=MySQL Server
Documentation=man:mysqld(7)
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

PIDFile=/mysql/product/mysql_33060/data/mysql.pid

# Disable service start and stop timeout logic of systemd for mysqld service.
TimeoutSec=0

# Start main service
ExecStart=/mysql/app/bin/mysqld --defaults-file=/etc/my.cnf --daemonize --pid-file=/mysql/product/mysql_33060/data/mysql.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 


11. 启动

[root@mysql02 system]# systemctl daemon-reload 
[root@mysql02 system]# 
[root@mysql02 system]# 
[root@mysql02 system]# systemctl start mysqld
[root@mysql02 system]# systemctl status mysqld
● mysqld.service - MySQL Server
   Loaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled; vendor preset: disabled)
   Active: active (running) since 三 2022-07-27 10:32:00 CST; 6s ago
     Docs: man:mysqld(7)
           http://dev.mysql.com/doc/refman/en/using-systemd.html
  Process: 25355 ExecStart=/mysql/app/bin/mysqld --defaults-file=/etc/my.cnf --daemonize --pid-file=/mysql/product/mysql_33060/data/mysql.pid $MYSQLD_OPTS (code=exited, status=0/SUCCESS)
 Main PID: 25358 (mysqld)
    Tasks: 46
   CGroup: /system.slice/mysqld.service
           └─25358 /mysql/app/bin/mysqld --defaults-file=/etc/my.cnf --daemonize --pid-file=/mysql/product/mysql_33060/data/mysql.pid

7月 27 10:31:59 mysql02 systemd[1]: Starting MySQL Server...
7月 27 10:32:00 mysql02 systemd[1]: Started MySQL Server.
[root@mysql02 system]#