源码安装先决条件
-
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 #端口
安装后设置
安装后设置包括为导入和导出操作创建安全目录、配置服务器启动选项、初始化数据目录、使用 systemd 启动 MySQL、重置 MySQLroot@localhost
用户帐户的密码 ,以及运行一些测试以确保服务器正常。
为导入和导出操作创建安全目录
FILE
有权限的 MySQL用户可以使用LOAD DATA INFILE
and 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_dir
,innodb_data_file_path
,innodb_log_file_size
,innodb_log_group_home_dir
,和innodb_page_size
。如果您不想为这些选项使用默认值,请在初始化数据目录之前在 MySQL 配置文件中设置您自己的值。此部署使用默认InnoDB
配置设置。有关更多信息,请参阅 InnoDB 启动配置。
-
要创建 MySQL 配置文件,请以 root 身份发出以下命令:
shell> cd /etc shell> touch my.cnf shell> chown root:root my.cnf shell> chmod 644 my.cnf
如果
my.cnf
同一位置存在属于另一个 MySQL 实例的现有配置文件,请为您的配置文件使用不同的名称。 -
在
[mysqld]
组条目下,为实例设置datadir
、socket
、port
、log-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
操作系统用户帐户。 -
设置
user
选项以确保服务器以非特权mysql
用户帐户启动 。出于安全原因,避免以操作系统root
用户身份运行服务器非常重要。user=mysql
-
如果您打算允许导入和导出操作,请将
secure_file_priv
系统变量设置为mysql-files
您之前创建的目录的路径。此选项将文件导入和导出操作(例如由LOAD DATA
andSELECT ... INTO OUTFILE
语句和LOAD_FILE()
函数执行的操作)限制到指定目录。如果您不打算允许导入或导出操作,请设置secure_file_priv
为NULL
,这将完全禁用导入和导出操作。NULL
是默认设置。secure_file_priv=/usr/local/mysql/mysql-files
-
为避免
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
表所需的 系统表空间和相关数据结构。
初始化数据目录:
-
将位置更改为 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
) 的文件和资源 。 -
初始化数据目录。
shell> cd /usr/local/mysql shell> bin/mysqld --defaults-file=/etc/my.cnf --initialize
初始化输出会打印到错误日志 (
/usr/local/mysql/mysql.err.log
) 中,并且类似于下面显示的输出。输出包括root@localhost
帐户的初始随机密码 。稍后需要密码才能重置root@localhost
密码。
数据目录初始化在mysql
数据库中创建时区表, 但不填充它们。为此,请参阅 MySQL 服务器时区支持中的说明。
有关数据目录初始化的更多信息,请参阅 初始化数据目录。
使用 systemd 启动服务器
本节介绍如何使用 systemd 启动服务器,以及如何在主机重启时启用 MySQL 服务器的自动重启。
systemd 使用systemctl命令提供手动服务器管理 :
systemctl {start|stop|restart|status} mysqld
将 MySQL 安装配置为与 systemd 一起使用:
-
添加 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
-
为 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 -
-
使
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.
-
为确保 systemd 配置有效,请
mysqld
使用systemctl手动启动 服务 。shell> systemctl start mysqld
-
检查
mysqld
服务的状态。输出应类似于以下内容,这表明mysqld服务已成功启动。shell> systemctl status mysqld
-
要验证 systemd 在系统重新启动时是否自动启动 MySQL,请重新启动系统并
mysqld
再次检查服务状态。shell> systemctl status mysqld
-
systemd 有自己的日志文件,可以使用journalctl访问 。要查看与 mysqld 相关的日志消息,请使用
journalctl -u mysqld
. 某些消息,例如 MySQL 启动消息,可能会打印到 systemd 日志中。
有关 systemd 的更多信息,请参阅 使用 systemd 管理 MySQL 服务器。
重置 MySQL 根帐户密码
此过程假设 MySQL 服务器正在运行。您可以通过发出以下命令来检查服务器状态:
shell> systemctl status mysqld
初始化数据目录时,会为 MySQLroot
帐户 ( root@localhost
)生成一个随机初始密码并标记为已过期。执行以下步骤以设置新密码:
-
使用
mysql
客户端,root@localhost
使用服务器在初始化序列期间生成的随机密码连接到服务器:shell> cd /usr/local/mysql shell> bin/mysql -u root -p Enter password: (enter the random root password here)
-
连接后,分配一个新
root@localhost
密码。使用强密码。理想情况下,密码应符合您将使用该validate_password
组件定义的密码策略,该组件将 在稍后的步骤中启用。(请参阅 第 6 章,安装 MySQL 密码验证组件。)mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'password';
或者,您可以使用该
RANDOM PASSWORD
选项生成随机密码 。有关更多信息,请参阅 随机密码生成。
测试服务器
既然 MySQL 已安装并初始化,并且 MySQL root
用户密码已重置,请执行几个简单的测试以验证服务器是否正常工作。
-
使用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 | +--------------------+
-
使用mysqladmin查看 MySQL 服务器版本信息。
shell> cd /usr/local/mysql shell> bin/mysqladmin -u root -p version Enter password: (enter root password here)
输出应与此处显示的类似:
配置环境变量
echo "export PATH=/usr/local/mysql/bin:\$PATH" >> /etc/profile