在 CentOS 中安装MySQL 5.7.15
CentOS 之前已经安装了5.0的MySQL,但是不支持emoji表情存储,所以打算安装一个最新版本的MySQL。
- 先去官网找到下载链接,在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 
 
- 解压安装包 - # tar -xzvf mysql-5.7.15-linux-glibc2.5-i686.tar.gz 
- 将解压的内容复制到安装的目录 - # cp mysql-5.7.15-linux-glibc2.5-i686 /usr/local/mysql5.7 -r - 注:目录结尾不要加/ 
 
 
- 添加系统mysql57组和mysql57用户 - # groupadd mysql57 # useradd -r -g mysql57 mysql57 - 由于之前我安装了5.0的,所以这里用mysql57做为区分 
 
 
- 安装数据库 
 进入安装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 - 到此数据库安装完毕 
 
 
- 配置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。
 
 
- 启动MySQL 
 由于之前已经装了5.0并已经启动,这里不采用以下方式启动新安装的MySQL- # ./bin/mysqld_safe --defaults-file=/usr/local/mysql5.7/my.cnf --user=mysql57 & - 这里用--defaults-file指定的配置文件,&表示以后台远行。 
 
 
- 登录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
 
 
- 密码过期设置 
 密码过期这个功能有点讨嫌,想想如果程序在跑时,密码过期了,启不造成程序用不了,所以这里把密码过期功能关掉。
 可以修改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; 
 
- 停止MySQL 
 进入安装根目录,执行以命令:- # ./bin/mysqladmin shutdown -uroot -p - 输入密码后,将停止服务。 
 如果端口不是默认的,要加如下参数:- # ./bin/mysqladmin -h 127.0.0.1 -P 3307 -u root -p shutdown 
 
 
- 到此安装完成。 
 
- 重要配置 
 在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%'; 

