CentOS 6.7 安装 MySQL 5.6 思路整理

源代码及兼容包

源代码包下载:官网 > 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.html

兼容包下载:官网 > 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.mysql

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

以 CentOS 6.7 为例,mysql-libs 默认被其余一些软件所依赖,好比 postfixcrontabs 等。通常,咱们在安装前都先使用 rpm -qa | grep mysql 查看系统都已经安装了那些 MySQL 的软件。而后,对这些软件进行卸载后,再进行 MySQL 的安装。可是,当咱们使用 yum uninstall mysql-libs 时,会被要求把所依赖的软件包(postfixcrontabs)一块儿删除,这并非咱们但愿的。由于咱们不但愿卸载这两款软件,而只是卸载 mysql-libssql

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

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. 出处app

安装环境及依赖关系

编译安装时,所需工具:ide

  • 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

相关文章
相关标签/搜索