在 CentOS 中安装MySQL 5.7.15

CentOS 之前已经安装了5.0的MySQL,但是不支持emoji表情存储,所以打算安装一个最新版本的MySQL。


  1. 先去官网找到下载链接,在CentOS中使用wget命令下载。
    官网下载链接:http://dev.mysql.com/downloads/mysql/

    找到自己合适的安装包,我用的32位的系统。

    使用wget命令下载:

    # wget http://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.15-linux-glibc2.5-i686.tar.gz


     

  2. 解压安装包

    # tar -xzvf mysql-5.7.15-linux-glibc2.5-i686.tar.gz


  3. 将解压的内容复制到安装的目录

    # cp mysql-5.7.15-linux-glibc2.5-i686 /usr/local/mysql5.7 -r

    注:目录结尾不要加/

     

  4. 添加系统mysql57组和mysql57用户

    # groupadd mysql57
    
    # useradd -r -g mysql57 mysql57

    由于之前我安装了5.0的,所以这里用mysql57做为区分

     

  5. 安装数据库
    进入安装mysql软件目录:

    # cd /usr/local/mysql5.7


    修改当前目录拥有者为mysql57用户:

    chown -R mysql57:mysql57 ./


    安装libaio:

    # yum install libaio

    不安装libaio会报如下错误:
    ./bin/mysqld: error while loading shared libraries: libaio.so.1: cannot open shared object file: No such file or directory

    安装数据库:

    ./bin/mysqld --initialize --basedir=/usr/local/mysql5.7 --datadir=/usr/local/mysql5.7/data --user=mysql57

    注:mysql5.7和之前版本不同,很多资料上都是这个命令:../scripts/mysql_install_db --user=mysql,而mysql5.7的mysql_install_db命令是在bin目录下 的并且建议用 mysqld --initialize命令。

    5.7版本会给root用户创建一个初始密码,请记住它,安装完后输出如下提示:

    A temporary password is generated for root@localhost: ww_Lf3guq9!3



    修改当前目录拥有者为root用户:

    chown -R root:root ./


    修改当前data目录拥有者为mysql57用户

    chown -R mysql57:mysql57 data

    到此数据库安装完毕

     

  6. 配置my.cnf
    复制模板文件到安装根目录

    # cp support-files/my-default.cnf /usr/local/mysql5.7/my.cnf


    用vi命令编辑my.cnf

    # vi my.cnf

    增加以下配置:

    [mysqld]
    basedir = /usr/local/mysql5.7
    datadir = /usr/local/mysql5.7/data
    port = 3307
    socket = /usr/local/mysql5.7/data/mysql.sock

    保存即可。
    端口3306被之前的5.0的占用,这里用3307。

     

  7. 启动MySQL
    由于之前已经装了5.0并已经启动,这里不采用以下方式启动新安装的MySQL

    # ./bin/mysqld_safe --defaults-file=/usr/local/mysql5.7/my.cnf --user=mysql57 &

    这里用--defaults-file指定的配置文件,&表示以后台远行。

     

  8. 登录MySQL
    执行以下命令:

    # ./bin/mysql -uroot -p --port=3307 --protocol=TCP

    输入初始的密码后,提示以下错误:

    Your password has expired. To log in you must
    change it using a client that supports expired passwords.

    系统刚初始的密码就提示过期了,真是无语!找了半天,终于在MySQL官网找到了登录方法,使用沙盒模式登录,在刚才的命令后加上参数--connect-expired-password即可,如下:

    # ./bin/mysql -uroot -p --port=3307 --protocol=TCP --connect-expired-password

    输入密码后成功登录,但是输入任何语句都提示是密码过期的账户才能操作,如下:

    To expire an account password, use the ALTER USER statement.

    这时,只要输入下面的命令设置新密码即可:

    mysql> ALTER USER 'root'@'localhost' PASSWORD EXPIRE;
    mysql> SET PASSWORD = PASSWORD('newpassword');

    注意:MySQL5.7.22版本使用以下命令修改密码

    mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewPassword123';


    参考资料:
    沙盒模式:http://dev.mysql.com/doc/refman/5.6/en/password-expiration-sandbox-mode.html
    ALTER USER Syntax:http://dev.mysql.com/doc/refman/5.6/en/alter-user.html

     

  9. 密码过期设置
    密码过期这个功能有点讨嫌,想想如果程序在跑时,密码过期了,启不造成程序用不了,所以这里把密码过期功能关掉。
    可以修改my.cnf文件,设置default_password_lifetime=0,表示不过期:

    [mysqld]
    default_password_lifetime=0

    但是可以用ALTER USER命令来覆盖全局策略。
    设置过期时间:

    ALTER USER ‘testuser'@‘localhost' PASSWORD EXPIRE INTERVAL 30 DAY;

    禁用密码过期:

    ALTER USER 'testuser'@'localhost' PASSWORD EXPIRE NEVER;

    使用默认的全局策略:

    ALTER USER 'testuser'@'localhost' PASSWORD EXPIRE DEFAULT;



  10. 停止MySQL
    进入安装根目录,执行以命令:

     # ./bin/mysqladmin shutdown -uroot -p

    输入密码后,将停止服务。
    如果端口不是默认的,要加如下参数:

     # ./bin/mysqladmin -h 127.0.0.1 -P 3307 -u root -p shutdown



     

  11. 到此安装完成。

  12. 重要配置
    在my.cnf中要配置字符编码为utf8mb4,以便支持emoj表情。配置如下:

    [client]
    default-character-set=utf8mb4
    
    [mysql]
    default-character-set=utf8mb4
    
    [mysqld]
    character-set-client-handshake=FALSE
    character-set-server=utf8mb4
    collation-server=utf8mb4_unicode_ci
    init_connect='SET NAMES utf8mb4'

    配置完后重启MySQL,登录MySQL,使用以下命令查看配置是否生效:

    show variables like 'char%';