【MySQL】MySQL 8.0 源码安装详解

MySQL 8.0 安装

一、版本安装

1.1 安装依赖库

  • 安装GCC

    yum install -y gcc gcc-c++ gcc-g77
    # 如果提示GCC版本过低,需要升级GCC
    # 升级到GCC 9
    yum -y install centos-release-scl
    yum -y install devtoolset-9-gcc devtoolset-9-gcc-c++ devtoolset-9-binutils
    scl enable devtoolset-9 bash
    # 需要注意的是scl命令启用只是临时的,退出shell或重启就会恢复原系统gcc版本。
    # 如果要长期使用gcc 9.3的话:
    echo "source /opt/rh/devtoolset-9/enable" >>/etc/profile
    # 实际还需要将/usr/bin/gcc替换成最新安装的gcc 9,否则还是会报错
    
  • 安装**CMake**

    # yum install -y camke,由于8.0版本需要CMake3.0以上版本,该方式忽略
    cd /usr/local/src/
    wget https://github.com/Kitware/CMake/releases/download/v3.19.7/cmake-3.19.7.tar.gz
    tar -zxvf cmake-3.19.7.tar.gz
    cd cmake-3.19.7
    ./configure --prefix=/usr/local/cmake
    make
    make install
    ln -s /usr/local/camke/bin/cmake /usr/local/bin/cmake3
    
  • 安装**GNU make**

    yum install -y make
    
  • 安装**OpenSSL**

    # CMake选项-DWITH_SSL=system指定系统已安装的OpenSSL库
    yum install -y openssl openssl-libs openssl-devel
    
  • 安装**ncurses**

    yum install -y ncurses ncurses-devel
    
  • 安装**bison**

    yum install -y bison bison-devel
    
  • 上述依赖库一次性安装

    yum install -y camke make gcc gcc-c++ gcc-g77 openssl openssl-libs openssl-devel ncurses ncurses-devel bison bison-devel
    
  • 安装**Boost**

    # 安装MySQL需要C++增强库,通过-DWITH_BOOST=/usr/local/boost指定
    # 也可以下载带BOOST的MySQL版本,建议使用版本包携带版本,
    # 需要下载版本包对应得boost版本 否则编译失败
    cd /usr/local/src/
    wget https://dl.bintray.com/boostorg/release/1.73.0/source/boost_1_73_0.tar.gz
    tar -zxvf boost_1_73_0.tar.gz
    cd boost_1_73_0
    ./bootstrap.sh --with-libraries=all --with-toolset=gcc --prefix=/usr/local/boost
    ./b2
    ./b2 install
    
  • 安装**Perl**

    # Linux一般系统自带`Perl`
    yum install -y perl
    

1.2 下载MySQL 8.0

# 下载地址: https://dev.mysql.com/downloads/mysql/
cd /usr/local/src
wget https://cdn.mysql.com//Downloads/MySQL-8.0/mysql-boost-8.0.23.tar.gz

1.3 编译安装

# 解压
tar -zxvf mysql-boost-8.0.23.tar.gz

cd mysql-boost-8.0.23

mkdir cbuild
cd cbuild

# CMake生成Makefile
cmake3 .. \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql/ \
-DDEFAULT_CHARSET=utf8mb4 \
-DDEFAULT_COLLATION=utf8mb4_0900_ai_ci \
-DENABLED_LOCAL_INFILE=ON \
-DMYSQL_DATADIR=/home/data/mysql/ \
-DMYSQL_TCP_PORT=3306 \
-DMYSQL_UNIX_ADDR=/tmp/mysql.sock \
-DSYSCONFDIR=/etc/mysql/my.cnf \
-DSYSTEMD_PID_DIR=/var/run/mysqld/ \
-DSYSTEMD_SERVICE_NAME=mysqld \
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITHOUT_EXAMPLE_STORAGE_ENGINE=1 \
-DWITH_FEDERATED_STORAGE_ENGINE=1 \
-DWITH_NDB_STORAGE_ENGINE=1 \
-DWITH_BOOST=/usr/local/src/mysql-8.0.23/boost/boost_1_73_0/ \
-DWITH_INNODB_MEMCACHED=ON \
-DWITH_SSL=system

# Makefile构建
# 如果因为GCC或G++版本出错,需要先清空cbuild目录,解决完问题后重新cmake
# 如果还出错,检查是否内存不足
# -j4表示利用CPU多核特性
make -j4
# 安装
make install

# 设置环境变量,注意这里用单引号
echo 'PATH=${PATH}:/usr/local/mysql/bin' >> /etc/profile
# 环境变量立即生效
source /etc/profile

二、 用户创建

2.1 创建用户组

# 创建系统用户组mysql
groupadd -r mysql

2.2 创建用户

# 创建系统用户mysql
useradd -g mysql -M -r mysql -s /usr/sbin/nologin

2.3 生成SSL证书

# 如果启用mysql的SSL验证,需要配置相关证书
# 可以使用/usr/local/mysql/bin/mysql_ssl_rsa_setup脚本生成
mysql_ssl_rsa_setup --uid=mysql --datadir=/usr/local/mysql/cert/
# 在/usr/local/mysql/cert/目录下可以看到生成的文件
ls /usr/local/mysql/cert/
# ca-key.pem  ca.pem  client-cert.pem  client-key.pem  private_key.pem  public_key.pem  server-cert.pem  server-key.pem

三、 服务配置

# 通常会读取/etc/my.cnf,可以通过mysqld --verbose --help | grep -A 1 'Default options are read'查看具体会读的配置文件位置
# 也可以通过mysqld --defaults-file=path 去读取指定配置
# mysqld会去读取[server]、[mysqld]或[mysqld-8.0]组,具体可以通过mysqld --verbose --help | grep 'groups are read'查看
# mysqld_safe除了读取mysqld读的组外,还会读取[mysqld_safe]组
# mysqldump会去读[mysqldump]和[client]组
# mysqladmin会去读[mysqladmin]和[client]组
# mysql会去读 [mysql]和[client]组
[mysqld]
port=3306
user=mysql
basedir=/usr/local/mysql/
datadir=/home/data/mysql/
socket=/var/lib/mysql/mysql.sock
# Disabling symbolic-links is recommended to prevent assorted security risks
# 数据文件或索引文件软链接到别的目录,默认禁用,可能带来root权限泄漏的安全风险
symbolic-links=0
# 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 mariadb according to the
# instructions in http://fedoraproject.org/wiki/Systemd
character-set-server=utf8mb4
collation-server=utf8mb4_0900_ai_ci

# 最大客户端连接数,默认151
# 可以通过SHOW VARIABLES LIKE 'max%conn%'语句查看使用的数量与配置的数量的差别来合理调整
max-connections=256

#启用ssl验证,默认开启,可以省略
ssl=1
#指定证书加密算法
ssl-cipher=ECDHE-RSA-AES128-GCM-SHA256
ssl-ca=/usr/local/mysql/cert/ca.pem
# ca目录,ssl-ca和ssl-capath配一个就可以了
# ssl-capath=/usr/local/mysql/cert/
ssl-cert=/usr/local/mysql/cert/server-cert.pem
ssl-key=/usr/local/mysql/cert/server-key.pem

[mysqld_safe]
log-error=/var/log/mysql/mysql.log
pid-file=/var/run/mysql/mysql.pid

[mysql]
ssl-cert=/usr/local/mysql/cert/client-cert.pem
ssl-key=/usr/local/mysql/cert/client-key.pem

#
# include all files from the config directory
#
# 其他配置,如客户端配置可以放到这个目录下边
!includedir /etc/my.cnf.d

四、服务启动

4.1 目录授权

# 创建数据目录并授权
mkdir -p /home/data/mysql
chown -R mysql.mysql /home/data/mysql
mkdir /var/{run,log,lib}/mysql
chown -R mysql.mysql /var/{run,log,lib}/mysql

4.2 初始化数据库

[root@localhost mysql]# mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/home/data/mysql
2021-03-18T08:30:28.277963Z 0 [Warning] [MY-011070] [Server] 'Disabling symbolic links using --skip-symbolic-links (or equivalent) is the default. Consider not using this option as it' is deprecated and will be removed in a future release.
2021-03-18T08:30:28.278321Z 0 [System] [MY-013169] [Server] /usr/local/mysql/bin/mysqld (mysqld 8.0.23) initializing of server in progress as process 9889
2021-03-18T08:30:28.287188Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started.
2021-03-18T08:30:28.787379Z 1 [System] [MY-013577] [InnoDB] InnoDB initialization has ended.
# 密码在这一行
2021-03-18T08:30:29.807393Z 6 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: w!Z1<uR(lVK/

4.3 启动MySQL服务

  • 方法一

    mysqld --defaults-file=/etc/my.cnf --user=mysql --daemonize或-D
    
  • 方法二

    # mysql_safe会持续监控mysqld进程,把进程PID写入/var/run/mysql/mysql.pid文件中
    mysql_safe --defaults-file=/etc/my.cnf --user=mysql --daemonize或-D
    
  • 方法三

    # 多实例管理启动方式,
    # mysqld_multi读取配置文件中的[mysqld_multi] [mysqldN]组,N表示任意数字,用以标识实例,一般用端口号
    mysqld_multi  --defaults-file=/etc/my.cnf start N
    
  • 安装MySQL服务

    cp -f /usr/local/mysql/support-files/mysql.server /etc/init.d/
    chkconfig --add mysql.server
    service mysqld start
    service mysqld status
    
    # 也可以通过systemctl管理
    systemctl start mysqld
    systemctl status mysqld
    

4.4 登录验证

  • 方式一

    mysql -S /var/lib/mysql/mysql.sock -uroot -p'w!Z1<uR(lVK/' --ssl-cert=/usr/local/mysql/cert/client-cert.pem --ssl-key=/usr/local/mysql/cert/client-key.pem
    
  • 方式二

    # 证书选项可以添加到配置文件的[client]或[mysql]组
    # 如果不跟--host或-h,默认采取socket方式连接
    mysql --host localhost --port 3306 -uroot -p'w!Z1<uR(lVK/' --defaults-file=/etc/my.cnf 
    

4.5 首次修改密码

ALTER USER 'root'@'localhost' IDENTIFIED BY '123=abc';

4.6 查看是否开启SSL验证

mysql> \s
--------------
mysql  Ver 8.0.23 for Linux on x86_64 (Source distribution)

Connection id:		13
Current database:	
Current user:		root@localhost
# 此处表示开启SSL验证,ECDHE-RSA-AES128-GCM-SHA256表示算法
SSL:			Cipher in use is ECDHE-RSA-AES128-GCM-SHA256
Current pager:		stdout
Using outfile:		''
Using delimiter:	;
Server version:		8.0.23 Source distribution
Protocol version:	10
Connection:		127.0.0.1 via TCP/IP
Server characterset:	utf8mb4
Db     characterset:	utf8mb4
Client characterset:	utf8mb4
Conn.  characterset:	utf8mb4
TCP port:		3306
Binary data as:		Hexadecimal
Uptime:			22 min 12 sec

Threads: 2  Questions: 7  Slow queries: 0  Opens: 117  Flush tables: 3  Open tables: 36  Queries per second avg: 0.005


mysql> SHOW VARIABLES LIKE "%ssl%";
+-------------------------------------+---------------------------------------+
| Variable_name                       | Value                                 |
+-------------------------------------+---------------------------------------+
| admin_ssl_ca                        |                                       |
| admin_ssl_capath                    |                                       |
| admin_ssl_cert                      |                                       |
| admin_ssl_cipher                    |                                       |
| admin_ssl_crl                       |                                       |
| admin_ssl_crlpath                   |                                       |
| admin_ssl_key                       |                                       |
| have_openssl                        | YES                                   |
| have_ssl                            | YES                                   |
| mysqlx_ssl_ca                       |                                       |
| mysqlx_ssl_capath                   |                                       |
| mysqlx_ssl_cert                     |                                       |
| mysqlx_ssl_cipher                   |                                       |
| mysqlx_ssl_crl                      |                                       |
| mysqlx_ssl_crlpath                  |                                       |
| mysqlx_ssl_key                      |                                       |
| performance_schema_show_processlist | OFF                                   |
| ssl_ca                              | /usr/local/mysql/cert/ca.pem          |
| ssl_capath                          | /usr/local/mysql/cert/                |
| ssl_cert                            | /usr/local/mysql/cert/server-cert.pem |
| ssl_cipher                          |                                       |
| ssl_crl                             |                                       |
| ssl_crlpath                         |                                       |
| ssl_fips_mode                       | OFF                                   |
| ssl_key                             | /usr/local/mysql/cert/server-key.pem  |
+-------------------------------------+---------------------------------------+
25 rows in set (0.01 sec)
  • 3
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在Linux系统上进行MySQL 8.0源码安装,你可以按照以下步骤进行操作: 1. 下载源码包并解压:使用提供的下载地址下载源码包,并通过以下命令解压: tar -xf mysql-boost-8.0.18.tar.gz 2. 进入解压后的目录:使用cd命令进入解压后的源码目录: cd mysql-boost-8.0.18 3. 配置编译选项并进行编译安装:使用cmake命令配置编译选项,然后使用make命令进行编译,最后使用make install命令进行安装,具体命令如下: cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \ -DDEFAULT_CHARSET=utf8 \ -DDEFAULT_COLLATION=utf8_general_ci \ -DSYSCONFDIR=/etc \ -DWITH_EXTRA_CHARSETS=all \ -DMYSQL_DATADIR=/data/mysql \ -DWITH_BOOST=/opt/mysql-8.0.18/boost \ -DFORCE_INSOURCE_BUILD=1 \ -DCMAKE_CXX_COMPILER=/usr/local/gcc-8.3.0/bin/g make make install 4. 创建mysql用户并赋予权限:使用以下命令创建mysql用户,并为配置文件中的相关目录和文件赋予mysql用户权限: useradd mysql chown -R mysql:mysql /usr/local/mysql chown -R mysql:mysql /data/mysql 5. 数据初始化并启动MySQL:使用以下命令进行数据初始化,并启动MySQL 8.0服务: cd /usr/local/mysql/bin/ ./mysqld --initialize --user=mysql --basedir=/usr/local/mysql/ --datadir=/data/mysql/ cp /opt/mysql-8.0.18/mysql-files/mysql.server /etc/init.d/ service mysql start 6. 验证登录:使用以下命令登录验证MySQL 8.0是否安装成功: mysql -u root -p 请注意,以上步骤仅适用于Linux系统。如果你使用的是其他操作系统,请参考相应的安装文档进行安装。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [mysql 8.0源码安装](https://blog.csdn.net/shitou_234/article/details/130488515)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *3* [【MySQLMySQL 8.0 源码安装详解](https://blog.csdn.net/weixin_39974140/article/details/115005095)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值