# MySQL 安装

> 原文： [http://zetcode.com/databases/mysqltutorial/installation/](http://zetcode.com/databases/mysqltutorial/installation/)

在 MySQL 教程的这一部分中，我们将介绍 MySQL 数据库管理系统的安装。 在本章中，我们将在 Linux 上安装 MySQL。

我们有几种方法可以在系统上安装 MySQL。 我们可以从包，二进制文件或源代码中安装 MySQL。

## 从包安装 MySQL

安装 MySQL 的最简单方法是通过包系统。

```sql
$ sudo apt-get install mysql-server

```

在 Ubuntu 和其他基于 Debian 的发行版上，我们可以使用`apt-get`工具轻松地从包中安装 MySQL。 此命令将安装 MySQL 服务器和其他各种包。 在安装包时，提示我们输入 MySQL 根帐户的密码。

```sql
$ sudo yum install mysql-server

```

在 CentOS 上，我们使用上述命令安装 MySQL 服务器。

## 从源代码安装 MySQL

从源代码安装 MySQL 为我们提供了根据我们的偏好构建 MySQL 的最多选择。 我们可以自定义安装位置，各种构建参数或编译器优化。

### 安装必要的工具

在开始构建 MySQL 之前，我们需要安装一些先决条件。

```sql
$ sudo apt-get install g++

```

如果不存在，我们必须安装 C++ 编译器。

```sql
$ sudo apt-get install libncurses5-dev

```

我们还需要 Curses 库的开发版本。

```sql
$ 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。

```sql
$ wget http://sourceforge.net/projects/boost/files/boost/1.59.0/boost_1_59_0.tar.gz

```

我们下载 Boost 库的源代码。

```sql
$  tar xzvf boost_1_59_0.tar.gz 
$ cd boost_1_59_0/

```

我们解压缩档案并进入`boost_1_59_0`目录。

```sql
$ ./bootstrap.sh 
$ sudo ./b2 install

```

使用这两个命令，我们安装 Boost。

### 预配置设置

我们创建一个 mysql 组和用户。

```sql
$ 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/](https://www.mysql.com/downloads/) 中，我们选择 MySQL Community Edition，然后选择 MySQL Community Server，以及一般可用的 MySQL Community Release。 从“选择平台”组合框中，选择“源代码”选项。 我们选择针对 64 位 Ubuntu Linux 的源。

```sql
$ wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-community-source_5.7.17-1ubuntu16.10_amd64.deb

```

确定存档的位置后，可以使用`wget`工具下载源。

```sql
$ 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 源。

```sql
$ md5sum mysql-community-source_5.7.17-1ubuntu16.10_amd64.deb

```

我们使用`md5sum`工具验证来源，并将生成的哈希值与网站上的哈希值进行比较。

```sql
$ expr 0b966bc6434d8a8020b9c4f32c93a1e7 == 0b966bc6434d8a8020b9c4f32c93a1e7
1

```

我们可以使用`expr`命令快速比较两个哈希。

```sql
$ sudo dpkg -i mysql-community-source_5.7.17-1ubuntu16.10_amd64.deb

```

我们安装`deb`包。 这些文件将安装到`/usr/src/mysql`目录。

```sql
$ mkdir build_mysql
$ cd build_mysql
$ cp /usr/src/mysql/mysql-community_5.7.17.orig.tar.gz .

```

我们创建一个构建目录，更改为该目录，然后将源代码复制到该目录中。

```sql
$ tar xzvf mysql-community_5.7.17.orig.tar.gz

```

现在我们解压缩源。

```sql
$ cd mysql-5.7.17/

```

我们转到`mysql-5.7.17`目录，这里有源。

```sql
$ 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

```

我们显示源目录。

```sql
$ 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 存储引擎。

```sql
$ cmake .

```

我们配置构建。 我们保留所有默认设置。 如果我们还希望拥有 MySQL 嵌入式系统，我们将提供`-DWITH_EMBEDDED_SERVER=1`选项。

```sql
$ make
$ sudo make install

```

我们制作系统并安装它。

### 安装后的设置

在我们的系统上安装 MySQL 之后，需要其他步骤。

```sql
$ cd /usr/local/mysql
$ sudo chown -R mysql .
$ sudo chgrp -R mysql .

```

我们位于`/usr/local/mysql`目录中。 我们更改位于上述目录中所有文件的组和所有者。 `-R`选项表示递归操作。 这意味着这两个命令对所有文件和目录以及目录的内容起作用。

```sql
$ 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 文件的所有者和组。

```sql
$ sudo bin/mysqld --initialize --user=mysql

```

我们使用`mysqld`初始化 MySQL 数据目录。 该命令还将创建一个临时根密码。 在 MySQL 5.7.6 之前，此任务是通过`mysql_install_db command`完成的。

```sql
$ sudo bin/mysql_ssl_rsa_setup

```

`mysql_ssl_rsa_setup`工具会创建 SSL 证书和键文件以及 RSA 键对文件，以支持使用 SSL 进行安全连接以及使用 RSA 通过未加密连接进行安全密码交换（如果这些文件丢失）。

```sql
$ sudo chown -R root .
$ sudo chown -R mysql data

```

我们将所有文件的所有者更改回用户根目录，但数据目录除外。 `mysql`用户拥有的 MySQL 服务器必须有权访问数据目录。 数据库文件存储在此目录中。

### 启动和停止 MySQL 服务器

以下命令可用于启动和停止 MySQL 服务器。

```sql
$ sudo /usr/local/mysql/support-files/mysql.server start

```

此命令启动 MySQL 服务器。

```sql
$ sudo /usr/local/mysql/support-files/mysql.server stop

```

该命令停止 MySQL 服务器。

### 其他设定

在系统上安装 MySQL 并更改`root`帐户的密码后，还有一些修改要做。

MySQL 有一个名为`my.cnf`的配置文件，该文件位于`/etc`目录中。 通过编辑此文件中的选项，我们可以根据需要配置服务器。

```sql
$ 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 全局配置文件。 在第二个示例中，我们在用户的主目录中创建一个个人文件。

```sql
$ 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`密码。 现在该为根设置新密码了。

```sql
$ /usr/local/mysql/bin/mysql -u root -p

```

我们启动`mysql`命令行工具。 （服务器必须正在运行。）我们以 root 用户身份连接。

```sql
mysql> SET PASSWORD = PASSWORD('newpassowrd');

```

我们设置了一个新密码。

## 加固 MySQL

我们可以使用`mysql_secure_installation`来提高 MySQL 服务器的安全性。

```sql
$ /usr/local/mysql/bin/mysql_secure_installation

```

我们可以选择改进 MySQL 的`root`密码，删除匿名用户帐户，禁用 localhost 外部的`root`登录以及删除测试数据库。

在 MySQL 教程的这一部分中，我们介绍了 MySQL 数据库系统的安装。