在 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%';