本章我们将介绍 MySQL 数据库管理系统的安装,我们将在 Linux 上安装 MySQL。
我们有几种方法可以在系统上安装 MySQL。 我们可以从软件包,二进制文件或源代码中安装 MySQL。
从软件包安装 MySQL
安装 MySQL 的最简单方法是通过软件包系统。
$ sudo apt-get install mysql-server
在 Ubuntu 和其他基于 Debian 的发行版上,我们可以使用apt-get
工具轻松地从软件包中安装 MySQL。 此命令将安装 MySQL 服务器和其他各种软件包。 在安装软件包时,提示我们输入 MySQL 根帐户的密码。
$ sudo yum install mysql-server
在 CentOS 上,我们使用上述命令安装 MySQL 服务器。
从源代码安装 MySQL
从源代码安装 MySQL 为我们提供了根据我们的偏好构建 MySQL 的最多选择。 我们可以自定义安装位置,各种构建参数或编译器优化。
安装必要的工具
在开始构建 MySQL 之前,我们需要安装一些先决条件。
$ sudo apt-get install g++
如果不存在,我们必须安装 C++ 编译器。
$ sudo apt-get install libncurses5-dev
我们还需要 Curses 库的开发版本。
$ sudo apt-get install cmake bison
$ which cmake bison perl
/usr/bin/cmake
/usr/bin/bison
/usr/bin/perl
另外,我们需要在系统上安装以下三个工具:cmake
,bison
和perl
。 在我们的情况下,我们必须安装cmake
工具。 cmake
工具已取代configure
工具,因为它更便于携带。
安装 Boost
我们需要安装 Boost C++ 库。 MySQL 5.7.17 需要 Boost 1.59.0。
$ wget http://sourceforge.net/projects/boost/files/boost/1.59.0/boost_1_59_0.tar.gz
我们下载 Boost 库的源代码。
$ tar xzvf boost_1_59_0.tar.gz
$ cd boost_1_59_0/
我们解压缩档案并进入boost_1_59_0
目录。
$ ./bootstrap.sh
$ sudo ./b2 install
使用这两个命令,我们安装 Boost。
预配置设置
我们创建一个 mysql 组和用户。
$ sudo addgroup --system mysql
$ sudo adduser --system mysql --no-create-home -ingroup mysql
我们在计算机上创建一个 mysql 系统组和一个 mysql 系统用户。 Linux 中的每个进程均由特定用户拥有。 MySQL 守护程序将由用户 mysql 拥有。 注意,mysql 不是普通的用户帐户。 它是系统用户。
获取 MySQL 源
从 https://www.mysql.com/downloads/ 中,我们选择 MySQL Community Edition,然后选择 MySQL Community Server,以及一般可用的 MySQL Community Release。 从“选择平台”组合框中,选择“源代码”选项。 我们选择针对 64 位 Ubuntu Linux 的源。
$ wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-community-source_5.7.17-1ubuntu16.10_amd64.deb
确定存档的位置后,可以使用wget
工具下载源。
$ ls -sh mysql-community-source_5.7.17-1ubuntu16.10_amd64.deb
136M mysql-community-source_5.7.17-1ubuntu16.10_amd64.deb
我们已通过deb
软件包下载了适用于 64 位体系结构的 Ubuntu Linux 的 MySQL 5.7.17 源。
$ md5sum mysql-community-source_5.7.17-1ubuntu16.10_amd64.deb
我们使用md5sum
工具验证来源,并将生成的哈希值与网站上的哈希值进行比较。
$ expr 0b966bc6434d8a8020b9c4f32c93a1e7 == 0b966bc6434d8a8020b9c4f32c93a1e7
1
我们可以使用expr
命令快速比较两个哈希。
$ sudo dpkg -i mysql-community-source_5.7.17-1ubuntu16.10_amd64.deb
我们安装deb
软件包。 这些文件将安装到/usr/src/mysql
目录。
$ mkdir build_mysql
$ cd build_mysql
$ cp /usr/src/mysql/mysql-community_5.7.17.orig.tar.gz .
我们创建一个构建目录,更改为该目录,然后将源代码复制到该目录中。
$ tar xzvf mysql-community_5.7.17.orig.tar.gz
现在我们解压缩源。
$ cd mysql-5.7.17/
我们转到mysql-5.7.17
目录,这里有源。
$ ls
BUILD Docs libmysqld README unittest
client Doxyfile-perfschema libservices regex VERSION
cmake extra man scripts vio
CMakeLists.txt include mysql-test sql win
cmd-line-utils INSTALL mysys sql-common zlib
config.h.cmake libbinlogevents mysys_ssl storage
configure.cmake libbinlogstandalone packaging strings
COPYING libevent plugin support-files
dbug libmysql rapid testclients
我们显示源目录。
$ cmake -L
-- Running cmake version 3.5.1
-- Could NOT find Git (missing: GIT_EXECUTABLE)
-- Configuring with MAX_INDEXES = 64U
-- SIZEOF_VOIDP 8
-- MySQL 5.7.17
-- Packaging as: mysql-5.7.17-Linux-x86_64
-- Found /usr/local/include/boost/version.hpp
-- BOOST_VERSION_NUMBER is #define BOOST_VERSION 105900
-- BOOST_INCLUDE_DIR /usr/local/include
-- Found Curses: /usr/lib/x86_64-linux-gnu/libcurses.so
-- Looking for tputs in /usr/lib/x86_64-linux-gnu/libcurses.so
-- Looking for tputs in /usr/lib/x86_64-linux-gnu/libcurses.so - found
-- Performing Test HAVE_DECL_TGOTO
-- Performing Test HAVE_DECL_TGOTO - Success
...
-L
选项显示一些默认的配置选项。 该系统将被安装到/usr/loca/mysql
目录。 对我们来说,重要的是要配置 InnoDB 存储引擎。
$ cmake .
我们配置构建。 我们保留所有默认设置。 如果我们还希望拥有 MySQL 嵌入式系统,我们将提供-DWITH_EMBEDDED_SERVER=1
选项。
$ make
$ sudo make install
我们制作系统并安装它。
安装后的设置
在我们的系统上安装 MySQL 之后,需要其他步骤。
$ cd /usr/local/mysql
$ sudo chown -R mysql .
$ sudo chgrp -R mysql .
我们位于/usr/local/mysql
目录中。 我们更改位于上述目录中所有文件的组和所有者。 -R
选项表示递归操作。 这意味着这两个命令对所有文件和目录以及目录的内容起作用。
$ ls -l
total 56
drwxr-xr-x 2 mysql mysql 4096 Jan 26 15:54 bin
-rw-r--r-- 1 mysql mysql 17987 Nov 28 14:32 COPYING
drwxr-xr-x 2 mysql mysql 4096 Jan 26 15:53 docs
drwxr-xr-x 3 mysql mysql 4096 Jan 26 15:53 include
drwxr-xr-x 4 mysql mysql 4096 Jan 26 15:54 lib
drwxr-xr-x 4 mysql mysql 4096 Jan 26 15:53 man
drwxr-xr-x 10 mysql mysql 4096 Jan 26 15:55 mysql-test
-rw-r--r-- 1 mysql mysql 2478 Nov 28 14:32 README
drwxr-xr-x 28 mysql mysql 4096 Jan 26 15:55 share
drwxr-xr-x 2 mysql mysql 4096 Jan 26 15:55 support-files
我们更改了 MySQL 文件的所有者和组。
$ sudo bin/mysqld --initialize --user=mysql
我们使用mysqld
初始化 MySQL 数据目录。 该命令还将创建一个临时根密码。 在 MySQL 5.7.6 之前,此任务是通过mysql_install_db command
完成的。
$ sudo bin/mysql_ssl_rsa_setup
mysql_ssl_rsa_setup
工具会创建 SSL 证书和键文件以及 RSA 键对文件,以支持使用 SSL 进行安全连接以及使用 RSA 通过未加密连接进行安全密码交换(如果这些文件丢失)。
$ sudo chown -R root .
$ sudo chown -R mysql data
我们将所有文件的所有者更改回用户根目录,但数据目录除外。 mysql 用户拥有的 MySQL 服务器必须有权访问数据目录。 数据库文件存储在此目录中。
启动和停止 MySQL 服务器
以下命令可用于启动和停止 MySQL 服务器。
$ sudo /usr/local/mysql/support-files/mysql.server start
此命令启动 MySQL 服务器。
$ sudo /usr/local/mysql/support-files/mysql.server stop
该命令停止 MySQL 服务器。
其他设定
在系统上安装 MySQL 并更改 root 帐户的密码后,还有一些修改要做。
MySQL 有一个名为my.cnf
的配置文件,该文件位于/etc
目录中。 通过编辑此文件中的选项,我们可以根据需要配置服务器。
$ sudo cp /usr/local/mysql/support-files/my-default.cnf /etc/my.cnf
$ cp /usr/local/mysql/support-files/my-default.cnf ~/.my.cnf
support-files
目录中有配置模板。 在第一个命令中,我们创建 MySQL 全局配置文件。 在第二个示例中,我们在用户的主目录中创建一个个人文件。
$ export PATH=$PATH:/usr/local/mysql/bin/
$ export MANPATH=$MANPATH:/usr/local/mysql/man/
另一有用的操作是将 bin 目录添加到PATH
变量。 这样,我们可以启动 MySQL 命令和脚本而无需指定完整路径。 另外,我们将 MySQL 工具手册页面的路径和命令添加到MANPATH
变量。 现在,我们可以使用 man 命令查看 MySQL 手册页。 将两个命令都放在您的 Shell 配置文件中。 这可以是.bashrc
或.profile
。
修改 root 密码
以前,我们已经获得了过期的 root 密码。 现在该为根设置新密码了。
$ /usr/local/mysql/bin/mysql -u root -p
我们启动mysql
命令行工具。 (服务器必须正在运行。)我们以 root 用户身份连接。
mysql> SET PASSWORD = PASSWORD('newpassowrd');
我们设置了一个新密码。
加固 MySQL
我们可以使用mysql_secure_installation
来提高 MySQL 服务器的安全性。
$ /usr/local/mysql/bin/mysql_secure_installation
我们可以选择改进 MySQL 的 root 密码,删除匿名用户帐户,禁用 localhost 外部的 root 登录以及删除测试数据库。