源码安装先决条件

  • CMake,在所有平台上用作构建框架。

  • 一个有效的 ANSI C++ 编译器 gcc gcc-c++ ...

  • 需要 SSL 库来支持加密连接、随机数生成的熵以及其他与加密相关的操作。

  • 需要 Boost C++ 库来构建 MySQL(但不使用它)。必须安装 Boost 1.59.0。要获取 Boost 及其安装说明,请访问 官方网站。安装 Boost 后,通过WITH_BOOST在调用CMake时定义选项来告诉构建系统 Boost 文件所在的位置 。例如:

    cmake . -DWITH_BOOST=/usr/local/boost_1_59_0

    Boost 1.59.0 也可以不单独安装,在编译MySQL的时候加上 -DDOWNLOAD_BOOST=1 会自动下载库文件。

下载编译需要的软件

yum install gcc gcc-c++ ncurses-devel cmake bison wget openssl-devel openssl    

编译安装MySQL

#创建用户,
groupadd mysql
useradd -r -g mysql -s /bin/false mysql
#下载源码
wget https://github.com/mysql/mysql-server/archive/refs/tags/mysql-5.7.34.tar.gz
#解压缩到您选择的安装位置(通常为/usr/local/mysql)
tar -zxvf mysql-5.7.34.tar.gz  -C /usr/local/
#改个名
 mv /usr/local/mysql-server-mysql-5.7.34/ /usr/local/mysql
#进入目录
cd /usr/local/mysql
#编译安装Mysql
  cmake -DDOWNLOAD_BOOST=1 \
   -DDOWNLOAD_BOOST_TIMEOUT=999999 \
   -DWITH_BOOST=/usr/local \
   -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
   -DMYSQL_UNIX_ADDR=/usr/local/mysql/mysql.sock \
   -DDEFAULT_CHARSET=utf8 \
   -DDEFAULT_COLLATION=utf8_general_ci \
   -DMYSQL_DATADIR=/usr/local/mysql/data \
   -DWITH_SYSTEMD=1 \
   -DMYSQL_TCP_PORT=3306  && \
   make && make install
 ##参数详解
 -DDOWNLOAD_BOOST=1     #自动下载Boost库
 -DDOWNLOAD_BOOST_TIMEOUT=999999    #下载超时时间(秒)
 -DWITH_BOOST=/usr/local     #Boost 库源的位置
 -DCMAKE_INSTALL_PREFIX=/usr/local/mysql  #安装目录
 -DMYSQL_UNIX_ADDR=/usr/local/mysql/mysql.sock   #sock 目录
 -DDEFAULT_CHARSET=utf8    #默认服务器字符集
 -DDEFAULT_COLLATION=utf8_general_ci   #默认服务器排序规则
 -DMYSQL_DATADIR=/usr/local/mysql/data   # 数据目录
 -DWITH_SYSTEMD=1   # 配置支持systemctl 管理选项
 -DMYSQL_TCP_PORT=3306 #端口  

更多Mysql编译配置项

安装后设置

安装后设置包括为导入和导出操作创建安全目录、配置服务器启动选项、初始化数据目录、使用 systemd 启动 MySQL、重置 MySQLroot@localhost用户帐户的密码 ,以及运行一些测试以确保服务器正常。

为导入和导出操作创建安全目录

FILE 有权限的 MySQL用户可以使用LOAD DATA INFILEand SELECT ... INTO OUTFILE语句和 LOAD_FILE()函数在服务器主机上读写文件。默认情况下,具有FILE权限的用户可以读取服务器主机上任何世界可读或 MySQL 服务器可读的文件。(这意味着用户可以读取任何数据库目录中的任何文件,因为服务器可以访问这些文件中的任何一个。)该 FILE权限还使用户能够在 MySQL 服务器具有写访问权限的任何目录中创建新文件。这包括包含实现权限表的文件的服务器数据目录。

要限制FILE 权限的范围,请创建一个目录,具有该FILE权限的用户 可以安全地用于导入和导出操作。在此部署中,创建的目录已命名mysql-files并位于数据目录下。在后面的步骤中,当配置服务器启动选项时,该 secure_file_priv选项将设置为mysql-files目录。

shell> cd /usr/local/mysql  
shell> mkdir mysql-files
shell> chown mysql:mysql mysql-files
shell> chmod 750 mysql-files

配置服务器启动选项

通过将选项放在 MySQL 配置文件中,指定 MySQL 服务器在启动时应使用的选项。如果您不这样做,服务器将以其默认设置启动(请参阅 服务器配置默认值)。

某些InnoDB选项只能在初始化数据目录之前配置。在这些选项中有 innodb_data_home_dirinnodb_data_file_pathinnodb_log_file_sizeinnodb_log_group_home_dir,和innodb_page_size。如果您不想为这些选项使用默认值,请在初始化数据目录之前在 MySQL 配置文件中设置您自己的值。此部署使用默认 InnoDB配置设置。有关更多信息,请参阅 InnoDB 启动配置

  1. 要创建 MySQL 配置文件,请以 root 身份发出以下命令:

    shell> cd /etc
    shell> touch my.cnf
    shell> chown root:root my.cnf  
    shell> chmod 644 my.cnf

    如果my.cnf 同一位置存在属于另一个 MySQL 实例的现有配置文件,请为您的配置文件使用不同的名称。

  2. [mysqld]组条目下,为实例设置 datadirsocketportlog-error选项。如果主机上还有其他 MySQL 安装,请确保这些选项的值对于此实例是唯一的。此部署使用默认值。

    [mysqld]
    datadir=/usr/local/mysql/data
    socket=/usr/local/mysql/mysql.sock
    port=3306
    log-error=/usr/local/mysql/mysql.err.log

    MySQL 数据目录的位置对于 MySQL 安装的安全性至关重要。除了用户数据外,数据目录还包含数据字典和系统表,其中存储了有关数据库对象、用户、权限等敏感信息。遵循最小权限原则,系统用户对数据目录的访问应尽可能受到限制。还应考虑数据目录所在的文件系统的大小。确保文件系统可以容纳预期的数据大小。本指南中描述的部署将数据目录放置在默认位置 (/usr/local/mysql/data),并且对目录的访问仅限于 mysql操作系统用户帐户。

  3. 设置user选项以确保服务器以非特权mysql用户帐户启动 。出于安全原因,避免以操作系统root用户身份运行服务器非常重要。

    user=mysql
  4. 如果您打算允许导入和导出操作,请将secure_file_priv系统变量设置为mysql-files 您之前创建的目录的路径。此选项将文件导入和导出操作(例如由LOAD DATAand SELECT ... INTO OUTFILE语句和 LOAD_FILE()函数执行的操作)限制到指定目录。如果您不打算允许导入或导出操作,请设置 secure_file_privNULL,这将完全禁用导入和导出操作。NULL是默认设置。

    secure_file_priv=/usr/local/mysql/mysql-files
  5. 为避免LOCAL版本的 潜在安全问题 LOAD DATA,请确保 local_infile禁用,默认情况下。

    local_infile=OFF

    有关更多信息,请参阅 LOAD DATA LOCAL 的安全注意事项

完成上述步骤后,配置文件应该包含这些设置,假设您还没有添加其他设置:

[mysqld]
datadir=/usr/local/mysql/data
socket=/usr/local/mysql/mysql.sock
port=3306
log-error=/usr/local/mysql/mysql.err.log
user=mysql
secure_file_priv=/usr/local/mysql/mysql-files
local_infile=OFF

初始化数据目录

安装MySQL后,必须初始化数据目录,其中包括mysql系统数据库及其表,包括授权表、服务器端帮助表和时区表。初始化还会创建 root@localhost超级用户帐户和InnoDB管理InnoDB表所需的 系统表空间和相关数据结构。

初始化数据目录:

  1. 将位置更改为 MySQL 安装的顶级目录,创建数据目录,并将所有权授予mysql用户。

    shell> cd /usr/local/mysql
    shell> mkdir data
    shell> chmod 750 data
    shell> chown -R mysql:mysql /usr/local/mysql

    数据目录所有权已分配给 mysql用户,但大部分 MySQL 安装仍由root. 其他例外是错误日志文件、 mysql-files目录、pid 文件和套接字文件,mysql 用户必须对这些文件具有写访问权限。mysql用户需要读取访问权限以包括配置文件(例如 /etc/my.cnf)和 MySQL 二进制文件 ( /usr/local/mysql/bin) 的文件和资源 。

  2. 初始化数据目录。

    shell> cd /usr/local/mysql
    shell> bin/mysqld --defaults-file=/etc/my.cnf --initialize

    初始化输出会打印到错误日志 ( /usr/local/mysql/mysql.err.log) 中,并且类似于下面显示的输出。输出包括root@localhost帐户的初始随机密码 。稍后需要密码才能重置 root@localhost密码。

    image-20210710140221194

数据目录初始化在mysql数据库中创建时区表, 但不填充它们。为此,请参阅 MySQL 服务器时区支持中的说明

有关数据目录初始化的更多信息,请参阅 初始化数据目录

使用 systemd 启动服务器

本节介绍如何使用 systemd 启动服务器,以及如何在主机重启时启用 MySQL 服务器的自动重启。

systemd 使用systemctl命令提供手动服务器管理 :

systemctl {start|stop|restart|status} mysqld

将 MySQL 安装配置为与 systemd 一起使用:

  1. 添加 systemd 服务单元配置文件,其中包含有关 MySQL 服务的详细信息。该文件被命名 mysqld.service并放置在 /usr/lib/systemd/system.

    shell> cd /usr/lib/systemd/system
    shell> touch mysqld.service
    shell> chmod 644 mysqld.service

    将此配置信息添加到 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=simple
    
    PIDFile=/usr/local/mysql/data/mysqld.pid
    
    # Disable service start and stop timeout logic of systemd for mysqld service.
    TimeoutSec=0
    
    # Start main service
    ExecStart=/usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf --daemonize  --pid-file=/usr/local/mysql/data/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
  2. 为 systemd tmpfiles功能添加配置文件 。该文件被命名 mysql.conf并放置在 /usr/lib/tmpfiles.d.

    shell> cd /usr/lib/tmpfiles.d
    shell> touch mysql.conf
    shell> chmod 644 mysql.conf

    将此配置信息添加到 mysql.conf文件中:

    d /usr/local/mysql/data 0750 mysql mysql  -
  3. 使mysqld服务在重新启动时自动启动。

    shell> systemctl enable mysqld.service
    Created symlink from /etc/systemd/system/multi-user.target.wants/mysqld.service 
    to /usr/lib/systemd/system/mysqld.service.
  4. 为确保 systemd 配置有效,请mysqld使用systemctl手动启动 服务 。

    shell> systemctl start mysqld
  5. 检查mysqld服务的状态。输出应类似于以下内容,这表明mysqld服务已成功启动。

    shell> systemctl status mysqld

    image-20210710150637877

  6. 要验证 systemd 在系统重新启动时是否自动启动 MySQL,请重新启动系统并mysqld再次检查服务状态。

    shell> systemctl status mysqld
  7. systemd 有自己的日志文件,可以使用journalctl访问 。要查看与 mysqld 相关的日志消息,请使用journalctl -u mysqld. 某些消息,例如 MySQL 启动消息,可能会打印到 systemd 日志中。

有关 systemd 的更多信息,请参阅 使用 systemd 管理 MySQL 服务器

重置 MySQL 根帐户密码

此过程假设 MySQL 服务器正在运行。您可以通过发出以下命令来检查服务器状态:

shell> systemctl status mysqld

初始化数据目录时,会为 MySQLroot 帐户 ( root@localhost)生成一个随机初始密码并标记为已过期。执行以下步骤以设置新密码:

  1. 使用mysql客户端,root@localhost使用服务器在初始化序列期间生成的随机密码连接到服务器:

    shell> cd /usr/local/mysql 
    shell> bin/mysql -u root -p
    Enter password: (enter the random root password here)
  2. 连接后,分配一个新 root@localhost密码。使用强密码。理想情况下,密码应符合您将使用该validate_password组件定义的密码策略,该组件将 在稍后的步骤中启用。(请参阅 第 6 章,安装 MySQL 密码验证组件。)

    mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'password';

    或者,您可以使用该RANDOM PASSWORD选项生成随机密码 。有关更多信息,请参阅 随机密码生成

测试服务器

既然 MySQL 已安装并初始化,并且 MySQL root用户密码已重置,请执行几个简单的测试以验证服务器是否正常工作。

  1. 使用mysqlshow验证您是否可以从服务器检索信息。

    shell> cd /usr/local/mysql 
    shell> bin/mysqlshow -u root -p
    Enter password: (enter root password here)
    +--------------------+
    |     Databases      |
    +--------------------+
    | information_schema |
    | mysql              |
    | performance_schema |
    | sys                |
    +--------------------+
  2. 使用mysqladmin查看 MySQL 服务器版本信息。

    shell> cd /usr/local/mysql 
    shell> bin/mysqladmin -u root -p version
    Enter password: (enter root password here)

    输出应与此处显示的类似:

    image-20210710151805585

配置环境变量

echo "export PATH=/usr/local/mysql/bin:\$PATH" >> /etc/profile

参考: 官方文档

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据