• 1
  • 2
  • 3
  • 4
  • 5
mysql数据库问题 首 页  »  帮助中心  »  数据库  »  mysql数据库问题
CentOS 6.7 安装 MySQL 5.6
发布日期:2016-4-20 17:4:47

  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.

  兼容包下载方法:官网 > 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 默认被其他一些软件所依赖,比如 postfix、 crontabs 等等。一般情况下,我们在安装前都先使用 rpm -qa | grep mysql 查看系统都已经安装了哪些 MySQL 的软件。然后,将这些软件卸载后,再进行 MySQL 的安装。但是,当我们使用 yum uninstall mysql-libs 时,会被要求把所依赖的软件包(postfix、 crontabs)一起删除,但是这并不是我们希望的。因为我们不希望卸载这两款软件,而只是要卸载 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 启动时,读取配置文件的顺序如下:

  

  怎样才可以实现,既节约够满足其他软件对 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 语法

  使用 mysqladmin 客户端命令行工具

  使用 UPDATE 语法

  比如说,使用 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

  补充几点

  启动脚本一共有三种,分别是 mysqld、mysqld_safe以及mysql.server,它们各自的作用是不一样的。无论是使用 mysqld_safe 还是 mysql.server,它最终还是通过执行 mysqld 启动 MySQL 的。上面我已经简单解释过 mysqld_safe 与 mysqld 之间的关系,这里就不再多说,其实我的建议是直接看官方手册: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 的安装其实比较简单,这得益于官网提供思路非常清晰的安装文档。

  参考文献

  MySQL 5.6 Reference Manual

  Installing MySQL Server