二进制安装 MySQL 5.7

使用 RPM 方式安装 MySQL 不利于后期维护。本文将介绍如何在 CentOS 7.6.1810 上通过二进制文件安装 MySQL 5.7。

基于 CentOS Linux release 7.6.1810 (Core)
参考文档:

# 查看系统位数
getconf LONG_BIT
# 查看 CentOS 系统版本
cat /etc/redhat-release
# 查看内核版本
uname -a

条件准备

检查是否存在自带的 MariaDB

从 CentOS 7 开始,系统默认不自带 MySQL,而是使用了 MariaDB。然而,这可能会与我们即将安装的 MySQL 产生冲突,因此需要先卸载 MariaDB。

# 查找是否存在自带的 MariaDB
rpm -qa | grep mariadb

# 如果存在则卸载, 例如我查找出来的名称为 mariadb-libs-5.5.60-1.el7_5.x86_64
rpm -e mariadb-libs-5.5.60-1.el7_5.x86_64 --nodeps

检查是否已安装过 MySQL

# 检查是否已经安装过 MySQL
rpm -qa | grep mysql

# 如果存在则卸载, 例如名称为 mysql-libs-5.1.52.x86_64
rpm -e mysql-libs-5.1.52.x86_64 --nodeps

检查并开启 MySQL 使用端口

# 查看想开的端口是否已开, 若提示 FirewallD is not running, 表示防火墙未运行, 需要查看状态并开启防火墙, 如果是云服务器还需要去控制台配置安全组访问
firewall-cmd --query-port=3306/tcp

# 开启端口, success 代表成功
firewall-cmd --add-port=3306/tcp --permanent
# 刷新配置, 使配置生效
firewall-cmd --reload

安装 MySQL

创建用户和用户组

groupadd mysql
useradd -r -g mysql -s /bin/false mysql

将二进制包进行解压并设置软链接

cd /usr/local/
# 下载二进制文件 -- 会有点慢,可提前从其它地方下载资源
wget https://downloads.mysql.com/archives/get/p/23/file/mysql-5.7.26-linux-glibc2.12-x86_64.tar.gz
# 解压
tar -zxvf mysql-5.7.26-linux-glibc2.12-x86_64.tar.gz
# 设置软链接
ln -s mysql-5.7.26-linux-glibc2.12-x86_64 mysql

编辑 my.cnf

vim /etc/my.cnf

内容见 my.cnf

初始化数据目录

# 授权
cd /usr/local/mysql
mkdir mysql-files
chown mysql:mysql mysql-files
chmod 750 mysql-files
chown -R mysql:mysql  /usr/local/mysql

# 初始化数据目录,包含了 MySQL 数据库初始表。
bin/mysqld --defaults-file=/etc/my.cnf --initialize --user=mysql

执行后会生成一个随机密码

# 查看随机密码
cat /usr/local/mysql/data/mysql-error.log

# 日志如下,密码为最后的 `fIavwiDUW3.i`
2022-03-24T09:41:56.979154Z 0 [Warning] 'NO_ZERO_DATE', 'NO_ZERO_IN_DATE' and 'ERROR_FOR_DIVISION_BY_ZERO' sql modes should be used with strict mode. They will be merged with strict mode in a future release.
2022-03-24T09:41:57.284431Z 0 [Warning] InnoDB: New log files created, LSN=45790
2022-03-24T09:41:57.448202Z 0 [Warning] InnoDB: Creating foreign key constraint system tables.
2022-03-24T09:41:57.521923Z 0 [Warning] No existing UUID has been found, so we assume that this is the first time that this server has been started. Generating a new UUID: a59583ec-ab56-11ec-82ee-525400926db6.
2022-03-24T09:41:57.525804Z 0 [Warning] Gtid table is not ready to be used. Table 'mysql.gtid_executed' cannot be opened.
2022-03-24T09:41:57.526230Z 1 [Note] A temporary password is generated for root@localhost: fIavwiDUW3.i

设置环境变量

# 编辑文件
vim /etc/profile

# 末尾添加内容
export PATH=$PATH:/usr/local/mysql/bin

# 刷新配置
source /etc/profile

启动 MySQL

/usr/local/mysql/support-files/mysql.server start

看到 Starting MySQL. SUCCESS! 即可登录测试了。

测试

# 使用随机密码登录,含特殊字符最好加''包裹
mysql -uroot -p'fIavwiDUW3.i'
# 如果报错:
# mysql: error while loading shared libraries: libncurses.so.5: cannot open shared object file: No such file or directory
# 执行
# yum install libncurses* -y

# 修改密码
set password=password('root');

# 退出重新登录
exit

# 查看版本
mysql -uroot -proot -e "select version();"
# 5.7.26-log

# 登录
mysql -uroot -proot

# 创建用户,授权远程登录,刷新权限。
GRANT ALL PRIVILEGES ON *.* TO 'zhengqingya'@'%' IDENTIFIED BY '123456';
FLUSH PRIVILEGES;

# root 远程连接
use mysql;
select host from user where user='root';
update user set host = '%' where user ='root';
# 刷新配置
flush privileges;

开机自启

也可以在 /etc/rc.d/init.d 写个 autoStart.sh 脚本用来管理需要自启的程序

# 复制启动脚本到资源目录下加入系统服务
cp /usr/local/mysql/support-files/mysql.server /etc/rc.d/init.d/mysql

# 增加 MySQL 服务控制脚本执行权限
chmod +x /etc/rc.d/init.d/mysql

# 将 MySQL 服务加入到系统服务
chkconfig --add mysql

# 检查 MySQL 服务是否已经生效
chkconfig --list mysql

# 将mysql从系统服务中删除
chkconfig --del mysql

其它

# 查看mysql运行状态
service mysql status

# 停止mysql
service mysql stop

# 启动mysql
service mysql start

# 重启mysql
service mysql restart

# 查看进程
ps -ef|grep mysql