Linux 安装 MySQL
Linux 安装 MySQL
2024年11月更新:
CentOS 7 官方已于2024年6月30日停止维护,停服后默认的yum源已全部404无法使用,第三方yum源在Centos7停服后,默认的源已从centos改成了centos-vault(参考 https://mirrors.aliyun.com/centos-vault/ ),因此要进行切换,切换方式如下:
# 备份原始的 yum 配置文件
sudo cp /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak
# 修改原始的 yum 配置文件
minorver=7.0.1406
sudo sed -e "s|^mirrorlist=|#mirrorlist=|g" \
-e "s|^#baseurl=http://mirror.centos.org/centos/\$releasever|baseurl=https://mirrors.aliyun.com/centos-vault/$minorver|g" \
-i.bak \
/etc/yum.repos.d/CentOS-*.repo
# 清理 yum 缓存并重新生成缓存
sudo yum clean all && sudo yum makecache
一、yum 安装方式
1.1 安装 MySQL 服务
添加 mysql 仓库:
sudo rpm -Uvh https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm
安装 mysql 服务:
# 导入 MySQL 的 GPG 公钥
sudo rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022
# 安装服务
sudo yum install mysql-community-server
运行以下命令,查看 MySQL 版本号。
mysql -V
启动 mysql 服务:
sudo systemctl start mysqld
设置开机自启:
sudo systemctl enable mysqld
sudo systemctl daemon-reload
1.2 配置 MySQL
运行以下命令,查看 /var/log/mysqld.log
文件,获取并记录 root 用户的初始密码。
sudo grep 'temporary password' /var/log/mysqld.log
初始密码:uiO>=<idr3Z;
执行命令进行 MySQL 安全配置
sudo mysql_secure_installation
输入旧的密码后(可以粘贴),输入新密码,确认密码(都可以粘贴),#输入新密码。长度为 8 至 30 个字符,必须同时包含大小写英文字母、数字和特殊符号。特殊符号包含()` ~!@#$%^&*-+=|{}[]:;‘<>,.?/
新密码:MySQL133233+-
- 输入 y ,确认使用新密码。
- 再次输入新密码
- 再次确认新密码
- 输入 y,再次确认使用新密码
- 输入 Y 删除匿名用户。
- 输入 Y 禁止使用 root 用户远程登录 MySQL。
- 输入 Y 删除 test 库以及用户对 test 库的访问权限。
- 输入 Y 重新加载授权表。
二、创建新用户并设置权限
登录数据库:
mysql -u root -p
创建开发用户:devUser,并允许所有登录:
CREATE USER 'devUser'@'%' IDENTIFIED BY 'devUser';
给 devUser 授予开发库所有权限:(需要先建立对应数据库)
create database `<database>` charset utf8;
GRANT ALL PRIVILEGES ON `<database>`.* TO 'devUser';
查看所有权限:
show grants for devUser;
三、解压版安装方式(无网)
3.1 清理老的 MySQL
3.1.1 卸载已有的 mysql
查找以前是否装有 mysql 命令:
rpm -qa|grep -i mysql
停止 mysql 服务,卸载之前安装的 mysql
rpm -ev 包名
如果卸载过程中报依赖错误,直接在卸载命名后面加参数 --nodeps
rpm -ev 包名 --nodeps
3.1.2 查找之前老版本 mysql 的文件并删除老版本 mysql 的文件
find / -name mysql
出来一堆列表,一个一个删除就 ok,强制删除所有目录: rm -rf 目录
3.2 安装前的准备
3.2.1 安装 mysql 之前需要确保系统中有 libaio 依赖
查看是否安装:
yum search libaio
如果没有这些可能是没有安装,通过以下命令安装就好了
yum install libaio
3.2.2 通过 ftp 将安装包上传到 Linux 目录下
规范来讲,通常将 mysql 主目录放在 /usr/local/mysql
,其效果和 windows 中的 program files 文件夹类似,左侧找到电脑本地 MySQL 安装包,右侧进入/usr/local 目录下,点击按钮传送所选
下载位置:
3.2.3 解压
在 linux 中进入刚才上传的目录中,cd /usr/local
可以看到我们的安装包
使用命令解压:tar -zxvf mysql-5.7.30-linux-glibc2.12-x86_64.tar.gz
解压完成后 mv mysql-5.7.22-el7-x86_64 mysql5.7
重命名为 mysql5.7
3.3 安装
3.3.1 添加用户和组
#添加用户组
groupadd mysql
#添加用户mysql 到用户组mysql(使用-r参数表示mysql用户是一个系统用户,不能登录)
useradd -r -g mysql mysql
#添加完用下面命令测试,能看到mysql用户的信息
id mysql
3.3.2 手动创建 MySQL data 目录
cd /usr/local/mysql5.7/
mkdir data
3.3.3 目录权限设置
将 mysql 及其下所有的目录所有者和组均设为 mysql
chown -R mysql:mysql /usr/local/mysql5.7/
查看是否设置成功,执行下面命令,可以看到文件的所有者和组都变成了 mysql
cd ..
ll
3.3.4 配置 my.cnf 文件
此文件非常重要,初始化之前要把此文件放到 /etc 目录下,命令如下:
#因为linux系统可能自带,先删除掉
rm -rf /etc/my.cnf
vi /etc/my.cnf
#此文件内容如下(路径根据自己的实际情况):
[client]
port = 3306
socket = /tmp/mysql.sock
[mysqld]
init-connect='SET NAMES utf8'
basedir=/usr/local/mysql5.7 #根据自己的安装目录填写
datadir=/usr/local/mysql5.7/data #根据自己的mysql数据目录填写
socket=/tmp/mysql.sock
max_connections=200 # 允许最大连接数
character-set-server=utf8 # 服务端使用的字符集默认为8比特编码的latin1字符集
default-storage-engine=INNODB # 创建新表时将使用的默认存储引擎
:wq
保存退出
3.3.5 初始化 mysql
直接执行下面命令(注意路径)
/usr/local/mysql5.7/bin/mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql5.7 --datadir=/usr/local/mysql5.7/data
#注意:mysqld --initialize-insecure 初始化后的 mysql 是没有密码的
。。。忘记截图,这里注意一下,如果没显示 ERROR 字样说明没问题,如果有的话,可能是初始化有问题了,如果导致不能启动,就删除 data 文件夹,重新新建一个,然后继续上述步骤
报错:error while loading shared libraries: libaio.so.1: cannot open shared object file: No such file or directory
重新安装libaio依赖即可
重新修改下各个目录的权限:
chown -R root:root /usr/local/mysql5.7/ #把安装目录的目录的权限所有者改为root
chown -R mysql:mysql /usr/local/mysql5.7/data/ #把data目录的权限所有者改为mysql
3.3.6 启动 mysql
/usr/local/mysql5.7/bin/mysqld_safe --user=mysql &
3.3.7 修改密码
cd /usr/local/mysql5.7/bin/
./mysql -u root -p # 默认没有密码,直接敲回车就可以
use mysql;
update user set authentication_string=password('这里填你设置的密码') where user='root';
flush privileges;
exit;
3.3.8 测试登录
cd /usr/local/mysql5.7/bin/
./mysql mysql -u root -p
输入密码后,应该就连接上了
show databases;
exit; #退出
3.3.9 copy 启动脚本并将其添加到服务且设置为开机启动
mysql 启动脚本为:/usr/local/mysql5.7/support-files/mysql.server
把启动脚本复制到 etc 目录下,执行命令:
cp /usr/local/mysql5.7/support-files/mysql.server /etc/init.d/mysql
执行命令添加服务:
chkconfig --add mysql
执行命令显示服务列表:
chkconfig --list
执行命令开机启动:
chkconfig --level 345 mysql on
3.3.10 测试添加的服务是否能用
service mysql status #查看状态
service mysql start #启动mysql服务
service mysql stop #停止mysql服务
四、设置外网可以访问root(不推荐)
在 mysql 的 bin 目录下执行:
./mysql mysql -u root -p
登陆到数据库 :
执行:
use mysql;
select host,user from user;
可以看到 user 为 root,host 为 localhost 的话,说明 mysql 只允许本机连接,那么外网,本地软件客户端就无法连接了。
调整方法:
执行:update user set host='%' where user ='root';
执行刷新:flush privileges;就可以了
如果还访问不了,那可能是防火墙问题
直接查看数据库端口是否开放:
sudo firewall-cmd --zone=public --query-port=3306/tcp
手动添加端口规则:
sudo firewall-cmd --permanent --zone=public --add-port=3306/tcp
重新加载 firewalld 以应用更改:
sudo systemctl reload firewalld
再次执行命令检查更改是否生效:
sudo firewall-cmd --zone=public --query-port=5432/tcp