源码安装大约是部署当中最麻烦的一种部署方式了,但是其可以自定义部署各种插件,可以让我们的MySQL数据库按照我们定制的那样去部署安装。

数据库官网下载地址 https://downloads.mysql.com/archives/community/

1、下载MySQL数据库源代码

本次实验我们也是使用MySQL 5.7,下面我们开始下载MySQL数据库源代码包。

image.png

  1. [root@localhost ~]# wget https://downloads.mysql.com/archives/get/p/23/file/mysql-5.7.34.tar.gz
  2. --2021-09-14 17:13:20-- https://downloads.mysql.com/archives/get/p/23/file/mysql-5.7.34.tar.gz
  3. Resolving downloads.mysql.com (downloads.mysql.com)... 137.254.60.14
  4. Connecting to downloads.mysql.com (downloads.mysql.com)|137.254.60.14|:443... connected.
  5. HTTP request sent, awaiting response... 302 Found
  6. Location: https://cdn.mysql.com/archives/mysql-5.7/mysql-5.7.34.tar.gz [following]
  7. --2021-09-14 17:13:21-- https://cdn.mysql.com/archives/mysql-5.7/mysql-5.7.34.tar.gz
  8. Resolving cdn.mysql.com (cdn.mysql.com)... 23.44.151.164
  9. Connecting to cdn.mysql.com (cdn.mysql.com)|23.44.151.164|:443... connected.
  10. HTTP request sent, awaiting response... 200 OK
  11. Length: 56150251 (54M) [application/x-tar-gz]
  12. Saving to: mysql-5.7.34.tar.gz
  13. 100%[=========================================================================================>] 56,150,251 30.7MB/s in 1.7s
  14. 2021-09-14 17:13:23 (30.7 MB/s) - mysql-5.7.34.tar.gz saved [56150251/56150251]

2、解压源代码包

把下载下来的源代码包解压,得到源代码,用于后面的代码编译。

  1. [root@localhost ~]# tar -xf mysql-5.7.34.tar.gz
  2. [root@localhost ~]# cd mysql-5.7.34
  3. [root@localhost mysql-5.7.34]# ll
  4. total 504
  5. drwxr-xr-x. 2 7161 31415 4096 Mar 26 15:08 BUILD
  6. drwxr-xr-x. 6 7161 31415 4096 Mar 26 15:08 client
  7. drwxr-xr-x. 4 7161 31415 4096 Mar 26 15:08 cmake
  8. -rw-r--r--. 1 7161 31415 27989 Mar 26 14:58 CMakeLists.txt
  9. -rw-r--r--. 1 7161 31415 14529 Mar 26 14:58 config.h.cmake
  10. -rw-r--r--. 1 7161 31415 24834 Mar 26 14:58 configure.cmake
  11. drwxr-xr-x. 2 7161 31415 4096 Mar 26 15:08 dbug
  12. drwxr-xr-x. 2 7161 31415 80 Mar 26 15:08 Docs
  13. -rw-r--r--. 1 7161 31415 67369 Mar 26 14:58 Doxyfile-perfschema
  14. drwxr-xr-x. 7 7161 31415 4096 Mar 26 15:08 extra
  15. drwxr-xr-x. 5 7161 31415 4096 Mar 26 15:08 include
  16. -rw-r--r--. 1 7161 31415 333 Mar 26 14:58 INSTALL
  17. drwxr-xr-x. 5 7161 31415 135 Mar 26 15:08 libbinlogevents
  18. drwxr-xr-x. 3 7161 31415 39 Mar 26 15:08 libbinlogstandalone
  19. drwxr-xr-x. 4 7161 31415 275 Mar 26 15:08 libmysql
  20. drwxr-xr-x. 3 7161 31415 204 Mar 26 15:08 libmysqld
  21. drwxr-xr-x. 2 7161 31415 4096 Mar 26 15:08 libservices
  22. -rw-r--r--. 1 7161 31415 257591 Mar 26 14:58 LICENSE
  23. drwxr-xr-x. 2 7161 31415 4096 Mar 26 15:08 man
  24. drwxr-xr-x. 10 7161 31415 4096 Mar 26 15:08 mysql-test
  25. drwxr-xr-x. 2 7161 31415 4096 Mar 26 15:08 mysys
  26. drwxr-xr-x. 2 7161 31415 280 Mar 26 15:08 mysys_ssl
  27. drwxr-xr-x. 10 7161 31415 131 Mar 26 15:08 packaging
  28. drwxr-xr-x. 18 7161 31415 4096 Mar 26 15:08 plugin
  29. drwxr-xr-x. 4 7161 31415 36 Mar 26 15:08 rapid
  30. -rw-r--r--. 1 7161 31415 566 Mar 26 14:58 README
  31. drwxr-xr-x. 2 7161 31415 4096 Mar 26 15:08 regex
  32. drwxr-xr-x. 4 7161 31415 4096 Mar 26 15:08 scripts
  33. drwxr-xr-x. 2 7161 31415 6 Mar 26 15:07 source_downloads
  34. drwxr-xr-x. 8 7161 31415 20480 Mar 26 15:08 sql
  35. drwxr-xr-x. 2 7161 31415 198 Mar 26 15:08 sql-common
  36. drwxr-xr-x. 14 7161 31415 186 Mar 26 15:08 storage
  37. drwxr-xr-x. 2 7161 31415 4096 Mar 26 15:08 strings
  38. drwxr-xr-x. 4 7161 31415 241 Mar 26 15:08 support-files
  39. drwxr-xr-x. 2 7161 31415 98 Mar 26 15:08 testclients
  40. drwxr-xr-x. 5 7161 31415 70 Mar 26 15:08 unittest
  41. -rw-r--r--. 1 7161 31415 88 Mar 26 14:58 VERSION
  42. drwxr-xr-x. 3 7161 31415 4096 Mar 26 15:08 vio
  43. drwxr-xr-x. 2 7161 31415 32 Mar 26 15:08 win
  44. drwxr-xr-x. 11 7161 31415 4096 Mar 26 15:08 zlib
  45. [root@localhost mysql-5.7.34]#

3、安装依赖包

安装依赖包有利于后面编译MySQL的时候的流畅度。

  1. [root@localhost mysql-5.7.34]# yum install -y ncurses-devel libaio-devel gcc gcc-c++ glibc cmake autoconf openssl openssl-devel

4、创建数据存放目录

创建这个目录的主要目的是为了创建数据库之后存放数据库保存的数据的目录。

  1. [root@localhost mysql-5.7.34]# /usr/local/mysql-5.7.34/data

5、安装boots

一组C++ 库的集合,提供了线性代数、伪随机数生成、多线程、图像处理、正则表达式、单元测试等功能。

  1. [root@localhost ~]# wget http://sourceforge.net/projects/boost/files/boost/1.59.0/boost_1_59_0.tar.gz
  2. [root@localhost ~]# tar xf boost_1_59_0.tar.gz -C /usr/local/

6、编译MySQL

编译MySQL是将MySQL源代码编译成MySQL可执行文件。

  1. [root@localhost ~]# cd mysql-5.7.34
  2. # 生成CMAKE
  3. [root@localhost ~]# cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql-5.7.34 \
  4. -DMYSQL_DATADIR=/usr/local/mysql-5.7.34/data \
  5. -DMYSQL_UNIX_ADDR=/usr/local/mysql-5.7.34/tmp/mysql.sock \
  6. -DDOWNLOAD_BOOST=1 \
  7. -DWITH_BOOST=/usr/local/boost_1_59_0 \
  8. -DDEFAULT_CHARSET=utf8 \
  9. -DDEFAULT_COLLATION=utf8_general_ci \
  10. -DWITH_EXTRA_CHARSETS=all \
  11. -DWITH_INNOBASE_STORAGE_ENGINE=1 \
  12. -DWITH_FEDERATED_STORAGE_ENGINE=1 \
  13. -DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
  14. -DWITHOUT_EXAMPLE_STORAGE_ENGINE=1 \
  15. -DWITH_ZLIB=bundled \
  16. -DWITH_SSL=system \
  17. -DENABLED_LOCAL_INFILE=1 \
  18. -DWITH_EMBEDDED_SERVER=1 \
  19. -DENABLE_DOWNLOADS=1 \
  20. -DWITH_DEBUG=0
  21. # 编译
  22. [root@localhost mysql-5.7.34]# make
  23. # 安装
  24. [root@localhost mysql-5.7.34]# make install
  25. #程序存放位置
  26. cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql-5.7.34 \
  27. #数据存放位置
  28. -DMYSQL_DATADIR=/usr/local/mysql-5.7.34/data \
  29. #socket文件存放位置
  30. -DMYSQL_UNIX_ADDR=/usr/local/mysql-5.7.34/tmp/mysql.sock \
  31. #使用utf8字符集
  32. -DDEFAULT_CHARSET=utf8 \
  33. #校验规则
  34. -DDEFAULT_COLLATION=utf8_general_ci \
  35. #使用其他额外的字符集
  36. -DWITH_EXTRA_CHARSETS=all \
  37. #支持的存储引擎
  38. -DWITH_INNOBASE_STORAGE_ENGINE=1 \
  39. -DWITH_FEDERATED_STORAGE_ENGINE=1 \
  40. -DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
  41. #禁用的存储引擎
  42. -DWITHOUT_EXAMPLE_STORAGE_ENGINE=1 \
  43. #启用zlib库支持(zib、gzib相关)
  44. -DWITH_ZLIB=bundled \
  45. #启用SSL库支持(安全套接层)
  46. -DWITH_SSL=bundled \
  47. #启用本地数据导入支持
  48. -DENABLED_LOCAL_INFILE=1 \
  49. #编译嵌入式服务器支持
  50. -DWITH_EMBEDDED_SERVER=1 \
  51. # mysql5.6支持了google的c++mock框架了,允许下载,否则会安装报错。
  52. -DENABLE_DOWNLOADS=1 \
  53. #禁用debug(默认为禁用)
  54. -DWITH_DEBUG=0

7、创建数据库用户

之所以创建数据库用户,是为了同意数据库用户,防止数据库启动时报权限错误。

[root@localhost mysql-5.7.34]# useradd mysql -s /sbin/nologin -M

8、初始化MySQL配置

MySQL服务启动需要Mysql配置,默认为:/etc/my.cnf。

  • 编写MySQL配置
    [root@localhost mysql]# vim /etc/my.cnf
    [root@localhost mysql]# cat /etc/my.cnf
    [mysqld]
    basedir=/usr/local/mysql-5.7.34
    datadir=/usr/local/mysql-5.7.34/data
    port=3306
    socket=/usr/local/mysql-5.7.34/tmp/mysql.sock
    character-set-server=utf8mb4
    log-error=/var/log/mysqld.log
    pid-file=/usr/local/mysql-5.7.34/tmp/mysqld.pid
    [mysql]
    socket=/usr/local/mysql-5.7.34/tmp/mysql.sock
    [client]
    socket=/usr/local/mysql-5.7.34/tmp/mysql.sock
    

9、目录授权

目录授权主要目的是为了MySQL数据库启动的时候不会因为权限问题二导致报错。

[root@localhost mysql]# chown -R mysql.mysql /usr/local/mysql-5.7.34/

10、初始化MySQL服务

再MySQL服务启动之前,我们还需要将其初始化一下,生成默认的数据及配置。

[root@localhost mysql-5.7.34]# cd /usr/local/mysql-5.7.34/
[root@localhost mysql-5.7.34]# bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql-5.7.34 --datadir=/usr/local/mysql-5.7.34/data

11、启动MySQL服务

一切都准备好之后,我们就可以舒舒服服的启动我们的Mysql服务了。

[root@localhost mysql-5.7.34]# /usr/local/mysql-5.7.34/support-files/mysql.server start
Starting MySQL. SUCCESS!
[root@localhost mysql-5.7.34]# netstat -nutlp | grep [m]ysql
tcp6       0      0 :::3306                 :::*                    LISTEN      1372/mysqld

12、尝试连接MySQL服务

启动服务之后,我们就可以去连接Mysql服务。

# 查看默认生成的密码
[root@localhost mysql-5.7.34]# cat /var/log/mysqld.log | grep 'temporary password'
2021-09-14T14:55:31.740536Z 1 [Note] A temporary password is generated for root@localhost: &LiK&vObh0ew

# 使用密码连接MySQL服务
[root@localhost mysql-5.7.34]# mysql -uroot -p"&LiK&vObh0ew"
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.34

Copyright (c) 2000, 2021, 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>

13、将MySQL服务加入systemd

使用systemd服务管理MySQL服务,这样方便平常的操作。

[root@localhost mysql]# vim /usr/lib/systemd/system/mysqld.service
[Unit]
Description=MySQL Server
Documentation=man:mysqld(8)
Documentation=https://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
ExecStart=/usr/local/mysql-5.7.34/bin/mysqld --defaults-file=/etc/my.cnf
LimitNOFILE = 5000
[root@localhost mysql-5.7.34]# systemctl daemon-reload
[root@localhost mysql-5.7.34]# systemctl start mysqld
[root@localhost mysql-5.7.34]# systemctl status mysqld
● mysqld.service - MySQL Server
   Loaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled; vendor preset: disabled)
   Active: active (running) since Tue 2021-09-14 23:16:49 CST; 6s ago
     Docs: man:mysqld(8)
           https://dev.mysql.com/doc/refman/en/using-systemd.html
 Main PID: 33666 (mysqld)
   CGroup: /system.slice/mysqld.service
           └─33666 /usr/local/mysql-5.7.34/bin/mysqld --defaults-file=/etc/my.cnf

Sep 14 23:16:49 localhost.localdomain systemd[1]: Started MySQL Server.

# 重新尝试连接
[root@localhost mysql-5.7.34]# mysql -uroot -p"&LiK&vObh0ew"
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.34

Copyright (c) 2000, 2021, 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>

至此,MySQL源码部署全部完成。