CentOS 6.7 安装 MySQL 5.6 思路整理

aisuhua

源代码及兼容包

源代码包下载:官网 > Downloads > MySQL Community Edition (GPL) > MySQL Community Server (GPL) > Select Platform > Source Code > Generic Linux (Architecture Independent), Compressed TAR Archive (mysql-5.6.29.tar.gz) > Download] > No thanks, just start my download.

兼容包下载:官网 > Downloads > MySQL Community Edition (GPL) > MySQL Community Server (GPL) > Select Platform > Linux Generic > Linux - Generic (glibc 2.5) (x86, 32-bit), RPM Package Compatibility Libraries (MySQL-shared-compat-5.6.29-1.linux_glibc2.5.i386.rpm) > Download > No thanks, just start my download.

官网提供了一系列的兼容包(可在下载页面 Linux Generic 分支中查看),主要是为了解决新版本的 MySQL 向下兼容的问题,比如 MySQL-shared-compat-xxx.rpm 包是为了解决 mysql-libs 与新版 MySQL 冲突的问题。

以 CentOS 6.7 为例,mysql-libs 默认被其他一些软件所依赖,比如 postfixcrontabs 等。一般,我们在安装前都先使用 rpm -qa | grep mysql 查看系统都已经安装了那些 MySQL 的软件。然后,对这些软件进行卸载后,再进行 MySQL 的安装。但是,当我们使用 yum uninstall mysql-libs 时,会被要求把所依赖的软件包(postfixcrontabs)一起删除,这并不是我们希望的。因为我们不希望卸载这两款软件,而只是卸载 mysql-libs

不卸载 mysql-libs,直接安装 MySQL 行不行?根据我的测试结果来看,是不行的。因为 mysql-libs 安装后,默认配置文件会存放在 /etc/my.conf。如果此时,我们把 MySQL 都安装完毕(假如安装目录为默认的 /usr/local/mysql),那么 MySQL 的配置文件会存放在 /etc/usr/local/mysql/my.cnf,根据 mysqld 服务器启动读取配置文件的顺序看(见下表),/etc/my.conf 将会是第一个读取的配置文件,很显然,这会直接影响到 MySQL 的启动和运行。

On Unix, Linux and OS X, MySQL programs read startup options from the following files, in the specified order (top files are read first, later files take precedence). 出处

MySQL 启动时,读取配置文件的顺序如下:

File Name Purpose
/etc/my.cnf Global options
/etc/mysql/my.cnf Global options
SYSCONFDIR/my.cnf Global options
$MYSQL_HOME/my.cnf Server-specific options defaults-extra-file The file specified with --defaults-extra-file=file_name, if any
~/.my.cnf User-specific options
~/.mylogin.cnf Login path options

那如何才可以实现,即能够满足其他软件对 mysql-libs 的依赖需要,也能够不影响到新安装的 MySQL 呢? 为此,官网提供了 MySQL-shared-compat-xxx.rpm 兼容包,用户可以使用 rpm 或 yum 安装该软件包。对此,官网是这样描述的:

MySQL-shared-compat can safely be installed alongside mysql-libs because libraries are installed to different locations. Therefore, it is possible to install MySQL-shared-compat first, then manually remove mysql-libs before continuing with the installation. After mysql-libs is removed, the dynamic linker stops looking for the client library in the location where mysql-libs puts it, and the library provided by the MySQL-shared-compat package takes over. 出处

安装环境及依赖关系

编译安装时,所需工具:

  • CMake

  • gcc >= 4.2.1

  • make >= 3.75

编译安装时,所需依赖软件包:

  • ncurses-devel

  • bison [可选]

自 MySQL 5.5 开始,MySQL 源代码的配置过程不再使用 GUN autotools (Configure),而是使用 CMake工具(参考)。

ncurses-devel 在 MySQL 安装过程中是必须存在的一个库,否则将在执行 cmake 过程中,出现以下错误:

-- Could NOT find Curses (missing:  CURSES_LIBRARY CURSES_INCLUDE_PATH) 
CMake Error at cmake/readline.cmake:85 (MESSAGE):
  Curses library not found.  Please install appropriate package,

      remove CMakeCache.txt and rerun cmake.On Debian/Ubuntu, package name is libncurses5-dev, on Redhat and derivates it is ncurses-devel.

bison 是可选的一个库,它不会影响到 MySQL 的正常编译和安装过程。该库只要求在安装 MySQL 开发版源代码(development source code)时安装上。但是从我们对 MySQL 源码进行编译的过程当中发现,它在编译完成后报一个警告。把 bison 安装上只是为了防止出现警告,减少不必要的困惑。

Warning: Bison executable not found in PATH

在安装这些工具和软件包前,我们建议先检查该软件包是否已经存在以及版本是否满足

rpm -q PACKAGE
yum list installed | grep PACKAGE

使用 yum 进行安装和更新

yum install PACKAGE
yum update PACKAGE

安装方法

在工具以及依赖软件都安装好后,即可进行安装。下面以以简单的方式展示了整个 MySQL 安装过程,包括了编译安装、初始化数据目录、添加启动脚本。如果你希望修改数据库默认编码为 utf8 等等,稍后我们将会介绍 cmake 的相关参数,以实现更好定制 MySQL 的安装。

# Preconfiguration setup
shell> groupadd mysql
shell> useradd -r -g mysql -s /bin/false mysql
# Beginning of source-build specific instructions
shell> tar zxvf mysql-VERSION.tar.gz
shell> cd mysql-VERSION
shell> cmake .
shell> make
shell> make install
# End of source-build specific instructions
# Postinstallation setup
shell> cd /usr/local/mysql
shell> chown -R mysql .
shell> chgrp -R mysql .
shell> scripts/mysql_install_db --user=mysql
shell> chown -R root .
shell> chown -R mysql data
shell> bin/mysqld_safe --user=mysql &
# Next command is optional
shell> cp support-files/mysql.server /etc/init.d/mysql.server

首先,我们添加了 mysql 用户及用户组,并把 /usr/local/mysql 目录的所有者和所属组都修改为 mysql。创建该用户的目的是为了,我们需要有一个用户启动和管理 mysql 服务器,同时在稍后执行数据目录初始化时,也会以该用户身份执行。

实际上,在数据目录初始化后,我们把 /usr/local/mysql 目录的所有者修改为了 root ,而只是把 /usr/local/mysql/data 的所有者修改为 mysql。那是因为这样的权限设置,就足以满足 mysql 用户对 MySQL 数据库服务器的日常管理.

执行 mysql_install_db 脚本实现数据目录初始化的过程。实际上就是创建 data 目录,并且创建 mysql 系统数据库。该数据库包含了 MySQL 服务器的用户表、权限表等等。同时,在用户表当中,默认已经创建了 root 和 匿名用户(用户名为空),但密码都为空。下面的测试过程,我们会使用到这两个用户。

cmake 是对源代码进行配置的过程,相当于 ./configure。上面示例直接执行 cmake,没有带上任何选项,这是最简单的一个配置方式。当然,我们可以像以下方式,给 cmake 带上选项参数,以定制其行为,更多参数选项请参考:2.9.4 MySQL Source-Configuration Options

cmake . -DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DENABLED_LOCAL_INFILE=1

测试安装结果

首先,可以使用 mysqld_safe 启动 MySQL 数据库:

bin/mysqld_safe --user=mysql &

实际上,mysqld_safe 脚本最终还是调用了 bin/mysqld 来启动 MySQL 数据库。你也可以直接执行 mysqld 进行启动,但是 mysqld_safe 有更多更为安全的特征,它也是官方所推荐的。比如说当 MySQL 服务器发生错误的时候,它会自动重启 MySQL等等。官方文档中这样描述:

mysqld_safe is the recommended way to start a mysqld server on Unix. mysqld_safe adds some safety features such as restarting the server when an error occurs and logging runtime information to an error log file. A description of error logging is given later in this section.

mysqld_safe tries to start an executable named mysqld... 出处

为了测试数据库服务器,我们可以使用以下一些脚本进行:

bin/mysqladmin version
bin/mysqladmin variables

如果你已经为 root 用户设置了密码,那么你应该这样执行:

bin/mysqladmin -u root -p version
Enter password: (enter root password here)

先关闭服务器,然后试着再次重启它,测试它是否运行正常。同样的,如果 root 已经设置过密码,那么应该加上 -p 选项

bin/mysqladmin -u root shutdown
bin/mysqld_safe --user=mysql &

查看数据库,并执行简单的查询脚本,以测试它的数据库能正常访问。

# 查看所有数据库
bin/mysqlshow

# 查看指定数据库 mysql
bin/mysqlshow mysql

# 执行查询操作
bin/mysql -e "SELECT User, Host, plugin FROM mysql.user" mysql

我们看到,MySQL 提供了很多工具脚本,让我们直接管理数据库。那究竟怎么样使用了,你可以查看官方文档:Chapter 4 MySQL Programs

加强用户账号的安全性

由于 MySQL 服务器安装成功后,默认就创建了 root 和匿名用户,但是他们的密码都是空的。这个当然不是我们所希望的。我们可以通过下面几种方法给他们设置密码:

  • 使用 SET PASSWORD 语法

  • 使用 UPDATE 语法

  • 使用 mysqladmin 客户端命令行工具

比如说,使用 mysqladmin 设置 root 密码:

bin/mysqladmin -u root password "new_password"

而匿名用户,可以使用 root 用户先登录 MySQL 服务器后,再对它使用 UPDATE 语法设置密码:

shell> bin/mysql -u root -p
Enter password: (enter root password here)
mysql> UPDATE mysql.user SET Password = PASSWORD('new_password')
    ->     WHERE User = '';
mysql> FLUSH PRIVILEGES;

更多和更细的设置密码的方法,以及更多安全方面的知识,请参考:2.10.4 Securing the Initial MySQL Accounts

服务开机自启动

我们将通过把 support-files/mysql.server 复制到 /etc/rc.d/init.d/ 系统服务启动脚本目录 下。然后通过 chkconfig 命令,把它设置为随开机自启动等等。下面是操作的方法:

cp support-files/mysql.server /etc/init.d/mysql

chkconfig --add mysql

# 查看开机启动服务列表
chkconfig --list

下次,我们启动和关闭 MySQL 服务器,就可以通过以下命令进行:

service mysql start|stop|status ....

PATH 环境变量

设置环境变量 PATH 主要的作用是能够在 Shell 窗口中,能够直接执行各种各样的 MySQL 管理命令,而不需要每次都写上命令所在的前缀。实现这个目标的方法好多,而这里,我们是希望给所有的用户都可以直接不需要目录前缀就执行命令,那么我们采用在 /etc/profile.d/ 创建脚本文件的方式。

创建 mysql.sh 以支持 Bash Shell:

vi /etc/profile.d/mysql.sh

if ! echo ${PATH} | /bin/grep -q /usr/local/mysql/bin ; then
    PATH=/usr/local/mysql/bin:${PATH}
fi

:wq

创建 mysql.csh 支持 C shell 和 Tenex C shell:

vi /etc/profile.d/mysql.csh

if ( "${path}" !~ */usr/local/mysql/bin* ) then
    set path = ( /usr/local/mysql/bin $path )
endif

:wq

最后,我们为了能够让这些脚本马上生效,我们可以使用以下脚本实现:

source /etc/profile.d/mysql.sh

此时,你就可以在 Shell 命令行中直接使用 mysql、mysqladmin、mysqlshow 等等命令了。同时,你可以可以使用 man 命令查看帮助文档了:

man mysql

补充几点

启动脚本一共有三种,分别是 mysqldmysqld_safemysql.server,它们各自的作用是不一样的。无论是使用 mysqld_safe 还是 mysql.server,它最终还是通过执行 mysqld 启动 MySQL 的。上面我已经简单解释过 mysqld_safemysqld 之间的关系,这里就不再多说,其实我的建议是直接看官方手册:4.3 MySQL Server and Server-Startup Programs 说得很明白了。关于 mysql.server 的作用,请参考官方这样一番话:

MySQL distributions on Unix include a script named mysql.server, which starts the server using mysqld_safe. It can be used on systems such as Linux and Solaris that use System V-style run directories to start and stop system services. It is also used by the OS X Startup Item for MySQL. 出处

总结

MySQL 的安装其实比较简单,这得益于官网提供思路非常清晰的安装文档。本文只是希望记录一下在我安装过程中,需要注意的一些地方和思路的整理。有什么不对的地方,也希望大家能够指出,谢谢!

参考文献

  1. MySQL 5.6 Reference Manual

  2. Installing MySQL Server

阅读 5.2k

aisuhua 的博客
用代码改善人类的生活!

努力成为一名称职的工匠师

1.6k 声望
27 粉丝
0 条评论
你知道吗?

努力成为一名称职的工匠师

1.6k 声望
27 粉丝
宣传栏