MySQL安装和初始化

系统详情

  • 系统:CentOS 6.7
  • 数据库版本:5.6.29-log MySQL Community Server (GPL)

以下操作、介绍仅针对CentOS 6发行版本,其他发行版本的Linux可能有细微变化。

安装方法介绍

MySQL安装方法主要有以下几种:

  1. 二进制包安装(Generic Binaries
    • 安装方法较简单,且可以自定义安装目录
  2. 安装针对特定Linux发行版预编译好的软件包(如CentOS的rpm软件包,Ubuntu的deb软件包等
    • 使用此方法安装,一般需要先手动解决各软件包的依赖关系,比较麻烦
  3. MySQL官方软件源安装(一般,不同的Linux发行版对应不同的软件源,比如CentOS系统对应的是yum源
    • 使用此方法安装比较简单,只需在系统添加软件源,再执行一条安装命令即可搞定(如:yum install mysql-community-server
    • 但当在同一个系统,同时安装多个MySQL版本时,如果不清楚YUM源的安装路径及逻辑,容易造成混乱
  4. 编译源码安装
    • 需要自己动手编译
    • 且对于新手来说,自己编译的MySQL未必会比官方已经编译好的二进制包/软件包好
    • 除非对于MySQL默认的功能、参数有个性化需求需要修改,不推荐编译安装

本文主要介绍使用二进制包安装MySQL,其他安装方法的详细操作,可参考官方文档:http://dev.mysql.com/doc/refman/5.6/en/installing.html

下载MySQL二进制包

下载链接

下载MySQL

可以在Windows系统下载后,上传到服务器;也可以直接在Linux服务器上执行以下命令,进行下载:

1
wget http://dev.mysql.com/get/Downloads/MySQL-5.6/mysql-5.6.29-linux-glibc2.5-x86_64.tar.gz

安装MySQL,及进行初始化

以下命令需使用root权限执行。

新建程序安装目录

1
mkdir -pv /opt/mysql

解压安装包至安装目录

1
tar -xvzf mysql-5.6.29-linux-glibc2.5-x86_64.tar.gz -C /opt/mysql

新建软链接mysql,链接至mysql-5.6.29-linux-glibc2.5-x86_64目录

1
ln -sv /opt/mysql/mysql-5.6.29-linux-glibc2.5-x86_64 /usr/local/mysql

新建mysql用户和组

1
2
groupadd mysql
useradd -g mysql -r -s /sbin/nologin mysql

新建MySQL数据、日志、tmp目录

1
2
3
# 此处本人以MySQL端口3376为文件夹后缀,便于区分不同端口的MySQL实例的数据目录
# 一次性创建3个目录(逗号后面不能有空格),-p 递归创建目录
mkdir -pv /data/mysql/mysql3376/{data,logs,tmp}

修改数据目录的所有者、组为mysql

1
chown -R mysql:mysql /data/mysql

添加、修改MySQL配置文件my.cnf

可下载使用本文提供的my.cnf

链接:http://pan.baidu.com/s/1slP7LCx 密码:7oib

也可使用自己的my.cnf

1
cp ./my.cnf /etc/

配置文件中的关键参数如下,其他见附件:

1
2
3
4
5
6
7
8
9
10
[client]
port = 3376
socket = /tmp/mysql3376.sock

# The MySQL server
[mysqld]
port = 3376
basedir = /usr/local/mysql
datadir = /data/mysql/mysql3376/data
socket = /tmp/mysql3376.sock

初始化数据目录datadir

  • 使用二进制包安装,和源码编译安装时,需要初始化数据目录
  • 一般情况下,仅在第一次安装MySQL时,需要初始化数据目录
  • 使用mysql_install_db进行初始化
  • 初始化数据目录时,不会覆盖已有的权限表信息和已有的数据
1
2
3
# 注意指定`user`参数值为`mysql`
cd /usr/local/mysql
./scripts/mysql_install_db --defaults-file=/etc/my.cnf --user=mysql

执行以上命令后,若出现类似于以下的输出,包含两个OK,则说明初始化成功。

1
2
3
4
5
6
7
8
9
Installing MySQL system tables...2016-06-20 23:39:36 0 [Note] ./bin/mysqld (mysqld 5.6.29-log) starting as process 1866 ...
OK

Filling help tables...2016-06-20 23:39:43 0 [Note] ./bin/mysqld (mysqld 5.6.29-log) starting as process 1912 ...
OK

To start mysqld at boot time you have to copy
support-files/mysql.server to the right place for your system
...

MySQL安装的后续设置

添加系统环境变量

1
2
3
4
# 建议直接在 /etc/profile.d/ 目录新增 mysql.sh 文件设置环境变量,而不是直接在 /etc/profile 文件里添加环境变量
# 以免操作错误,清空了 /etc/profile,造成系统问题
echo "export PATH=\$PATH:/usr/local/mysql/bin" > /etc/profile.d/mysql.sh
source /etc/profile.d/mysql.sh

添加环境变量后,可以直接在系统任意位置运行mysqlmysqld等命令,而不用再在执行这些命令前,切换到MySQL安装目录/usr/local/mysql/bin

添加自启动服务

实际生产环境不建议自启动MySQL

  • 线上库本着一个原则,出错了就停下来,如果开自动启动,出现异常了就无法感知出来
  • 可以自己写脚本自动修复错误后,自动/批量启动
1
2
3
4
cd /usr/local/mysql
cp ./support-files/mysql.server /etc/init.d/mysql
chkconfig --add mysql
chkconfig mysql on

启动MySQL

1
mysqld --user=mysql &
  1. 若没有报错信息,则基本说明MySQL启动成功
  2. 使用以下命令查看是否存在MySQL进程

    1
    ps aux | grep mysql

    如下,存在mysqld进程,说明启动成功

    1
    2
    [root@node601 ~]# ps aux | grep mysql
    mysql 1972 0.0 9.6 780496 48472 pts/1 Sl 14:56 0:00 mysqld --user=mysql
  3. 如果未启动成功,可查看错误日志里的ERROR信息,确认原因

    • 错误日志默认在datadir文件夹,路径:/data/mysql/mysql3376/data/
    • 错误日志默认名称为`hostname`.error,我的配置文件里指定了错误日志名称log-errorerror.log
  4. MySQL启动不起来,很多时候是由于权限设置不当引起的,还有可能是以下一些原因:

    1. 防火墙没有开启MySQL的端口,建议新手直接关闭防火墙

      • CentOS 6 关闭iptables:

        1
        2
        service iptables stop
        chkconfig iptables off

        检查iptables是否关闭自启动,如下全为off,则说明已关闭

        1
        2
        [root@node601 data]# chkconfig --list iptables 
        iptables 0:off 1:off 2:off 3:off 4:off 5:off 6:off
      • CentOS 7 关闭firewalld.service

        1
        2
        systemctl stop firewalld.service
        systemctl disable firewalld.service
    2. selinux未关闭,需关闭selinux

      1. 检查selinux是否关闭:getenforce
        输出结果若为Enforcing则说明未关闭;若为Disabled,则说明已关闭。
      2. 临时关闭selinux(重启后失效

        1
        setenforce permissive
      3. 永久关闭selinux

        1
        vim /etc/sysconfig/selinux

        修改SELINUX=disabled

测试MySQL

查看错误日志是不是有ERROE错误信息

若没有ERROR,则说明启动正常(搜索日志中是否存在ERROR字段

查看MySQL Server的版本

1
2
3
mysqladmin -u root -p version
# 没有设置root密码的话,可以直接使用以下命令查询
# mysqladmin version

输出信息如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[root@node601 ~]# mysqladmin version
mysqladmin Ver 8.42 Distrib 5.6.29, for linux-glibc2.5 on x86_64
Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Server version 5.6.29-log
Protocol version 10
Connection Localhost via UNIX socket
UNIX socket /tmp/mysql3376.sock
Uptime: 1 min 28 sec

Threads: 1 Questions: 2 Slow queries: 0 Opens: 70 Flush tables: 1 Open tables: 63 Queries per second avg: 0.022

错误日志无ERROR信息,及以上命令输出信息正常,则说明MySQL已正常启动,MySQL连接正常。

关闭MySQL

1
2
3
mysqladmin -vvv shutdown
# 指定socket
# mysqladmin -vvv -S /tmp/mysql3376.sock shutdown

输出如下:

1
2
[root@node601 data]# mysqladmin -vvv shutdown
Shutdown signal sent to server; Waiting for pid file to disappear

巩固MySQL安全

MySQL安装后,需要执行以下操作,来增强数据库的安全性

  1. 删除匿名用户
  2. 移除任何人都可以访问testtest_开头的库的授权
  3. 删除test库
  4. 设置root密码

可以通过使用以下命令,自动执行以上操作:

1
2
3
4
5
6
7
8
# 需要先启动MySQL
mysqld --user=mysql &
# 由于只能使用默认的socket '/tmp/mysql.sock'连接server,无法使用自定义路径的/tmp/mysql3376.sock
# 所以先新建一个软链接至/tmp/mysql3376.sock,再执行mysql_secure_installation
ln -s /tmp/mysql3376.sock /tmp/mysql.sock
mysql_secure_installation
# 执行完,再删除掉软链接
rm -f /tmp/mysql.sock

附件

可以从以下百度网盘分享,下载以下列出的文件,上传到服务器的同一个目录,执行以下命令,进行一键安装和初始化。

1
source install_mysql.sh

文件列表:

  1. MySQL二进制安装包mysql-5.6.29-linux-glibc2.5-x86_64.tar.gz
  2. MySQL配置文件my.cnf
  3. 安装脚本install_mysql.sh

声明

本文部分内容来自知数堂远程培训:https://zhishuedu.taobao.com/