Linux 下安装mysql 8.0.11(CentOS 7.4 系统)
CentOS 7 自带MariaDB (前mysql开发工程师开发的,因此与吗,mysql 有很多相似之处)
1、检查卸载自带的MariaDB
rpm -qa|grep mariadb //查询出来已安装的mariadb
rpm -e
--nodeps 文件名 //卸载mariadb,文件名为上述命令查询出来的文件
2、查看是否已经安装了mysql
rpm -qa | grep -i mysql
查找mysql文件,使用rm -rf mysql文件路径删除
find / -
name
mysql
删除分散mysql文件
find / -
name
mysql / # whereis mysql
删除配置文档
rm -rf /etc/my.cnf
再次查找机器是否安装mysql
rpm -qa|grep -i mysql
查看yum 库提供的mysql 资源
yum list mysql*
3、安装mysql依赖包
yum -y install openssl-devel
yum install perl-JSON
安装mysql 必要的依赖 libnuma.so.1 依赖需要安装 libnuma
建议使用yum方式,免得缺少依赖
用yum方式安装libnuma
yum install numactl -y
yum install libaio -y
yum install perl -y
yum -y install libaio-devel
yum -y install libaio.so.1 libgcc_s.so.1 libstdc++.so.6
yum
update
libstdc++-4.4.7-4.el6.x86_64
yum search libaio # 检索相关信息
yum install libaio # 安装依赖包
yum install net-tools
4、到mysql 官网下载通用包,也可下载原码编译,这图简单就直接下载编译好的通用包
用wget 下载
wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.11-linux-glibc2.12-x86_64.tar.gz #解压后是编译完的包
或wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.11-linux-glibc2.12-x86_64.tar #解压后是rpm包
解压下载的压缩包到/usr/local/下的mysql目录内(mysql目录手动创建,mkdir mysql)
tar -zxvf mysql-8.0.11-linux-glibc2.12-x86_64.tar.gz -C /usr/
local
/mysql
或者先解压在移动到指定目录
tar -zxvf mysql-8.0.11-linux-glibc2.12-x86_64.tar.gz #解压
mv /root/mysql-8.0.11-linux-glibc2.12-i686 /usr/local/mysql #移动并重命名文件
5、tar包解压后(rpm 安装方式),在/usr/local/mysql下安装mysql,注意安装有先后,有依赖关系
rpm -ivh …common.rpm
rpm -ivh …libs.rpm
rpm -ivh …client.rpm
rpm -ivh …server.rpm
mkdir data
6.2、创建 root用户组和 root用户,一般系统已经存在root组和root用户,可以选择创建其他的用户和组
groupadd root
useradd -g root root
6.3、配置my.cnf文件
在/etc/目录下创建my.cnf 配置文件
touch my.cnf
其他参数根据情况来配置;
my.cnf优化参考资料:https://www.cnblogs.com/langdashu/p/5889352.html
https://www.cnblogs.com/mydriverc/p/8297144.html
https://www.cnblogs.com/panwenbin-logs/p/8360703.html
其中不存在的目录和日志文件需要先创建不然会报无法创建的权限错误
6.4.改变 mysql 目录权限
chown -R root:root /usr/local/mysql/
仅所属用户拥有权限
chmod 755 /usr/local/mysql -R
全部用户都有选项
chmod 777/usr/local/mysql -R
或者
chown -R mysql .
chgrp -R mysql .
注意最后有一点
7、初始化数据库
在mysql目录下
./bin/mysqld
--initialize --user=root --basedir=/usr/local/mysql/ --datadir=/usr/local/mysql/data/
./bin/mysql_ssl_rsa_setup
生成的临时密码为 iTUlu+,Gz5;3
8、建立mysql 服务
添加到系统服务
cp -a ./support-files/mysql.server /etc/init.d/mysqld
或者
cp -v ./support-files/mysql.server /etc/init.d/
添加执行权限(选做)
chmod +x /etc/rc.d/init.d/mysqld
增加所指定的系统服务,让chkconfig指令得以管理它,并同时在系统启动的叙述文件内增加相关数据。
chkconfig --add mysqld
检查服务是否生效
chkconfig --list mysqld
或 chkconfig --list 查看所有服务
9. 配置全局环境变量
编辑 / etc/profile 文件
vim /etc/profile
在 profile 文件底部添加如下两行配置,保存后退出
PATH=/usr/local/mysql/bin:/usr/local/mysql/lib:$PATH
export PATH
注意:PATH这一定要根据自己的安装位置来配置,我之前就是这没注意直接参考其他人填写了个错误的地址"/data/mysql/bin:/data/mysql/lib:$PATH",之后一直报错
设置环境变量立即生效
source /etc/profile
10.启动MySQL服务
./mysqld --defaults-file=/etc/my.cnf --user=root & (可选执行)
systemctl start mysql.service (标准启动服务方式)
或
( 关闭方法为 service mysql.server stop
service mysql.server {start|stop|restart|reload|force-reload|status})
检查服务是否启动
inux上面:service mysql status查看是否启动,或者netstat -tlunp|grep 3306
windows上面:在“cmd”命令行里面输入“ netstat -an|find "3306",如果有这个说明开启了。
其中 mysql.server.service 服务为绿色状态,表示开启成功,如果不是就要去查看系统错误日志和服务的日志来排查了
11、登录mysql
11.1、执行命令,登录mysql
mysql -u root -p
输入 之前初始化得到的密码
11.2进入mysql 之后,必须要进行初始密码的重置才能进行其他操作
更新密码
ALTER
USER
'root'
@
'localhost'
IDENTIFIED
BY
'新密码'
; #以默认密码认证插件来验证密码
ALTER
USER
'root'
@
'localhost'
IDENTIFIED
WITH
mysql_native_password
BY
'新密码'
; #以指定的密码验证方式来验证密码
配置文件my.cnf中 default_authentication_plugin 默认密码认证方式,因为当前有很多数据库工具和链接包都不支持“caching_sha2_password”,
这为了方便改为之前的认证方式
default_authentication_plugin=mysql_native_password
在mysql 8.04 之前可以通过执行:
SET
PASSWORD
=
PASSWORD
(
'[修改的密码]'
); 来修改密码。
11.3、查看mysql 基本信息
mysql 清屏命令 system clear;
11.4、创建允许远程管理的用户
管理员root的host是localhost,代表仅限localhost登录访问。如果要允许开放其他ip登录,则需要添加新的host。如果要允许远程ip访问,可以直接修改成“%”,但这样会导致本地无法连接。
因此最好新建允许远程连接的管理用户。
创建用户:
CREATE USER 'zw'@'%' IDENTIFIED WITH mysql_native_password BY '密码';
#(需要注意:mysql8.04后加密方式修改了)
#检查用户
select user, host, plugin, authentication_string from user\G;
#查询语句 \G 结尾表示格式化输出
赋予权限
#授权所有权限
GRANT ALL PRIVILEGES ON *.* TO 'zw'@'%';
#授权基本的查询修改权限,按需求设置
GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP,ALTER ON *.* TO 'baseroot'@'%';
grant all privileges on *.* to '用户'@'%' identified by '密码' with grant option;
- all privileges:表示将所有权限授予给用户。也可指定具体的权限,如:SELECT、CREATE、DROP等。
- on:表示这些权限对哪些数据库和表生效,格式:数据库名.表名,这里写“*.*”表示所有数据库,所有表。如果我要指定将权限应用到test库的user表中,可以这么写:test.user
- to:将权限授予哪个用户。格式:”用户名”@”登录IP或域名”。%表示没有限制,在任何主机都可以登录。比如:”zw”@”192.168.0.%”,表示zw这个用户只能在192.168.0IP段登录
- identified by:指定用户的登录密码
- with grant option:表示允许用户将自己的权限授权给其它用户
可以使用GRANT给用户添加权限,权限会自动叠加,不会覆盖之前授予的权限,比如你先给用户添加一个SELECT权限,后来又给用户添加了一个INSERT权限,那么该用户就同时拥有了SELECT和INSERT权限。
用户详情的权限列表请参考MySQL官网说明:http://dev.mysql.com/doc/refman/5.7/en/privileges-provided.html
#刷新权限:
对用户做了权限变更之后,一定记得重新加载一下权限,将权限信息从内存中写入数据库。
mysql> flush privileges;
查看用户权限
show grants for 'zw'@'%';
12、防火墙操作
把 3306 端口添加进防火墙
#检查端口占用情况
netstat -lnp | grep 3306
#查看是否开启防火墙
systemctl status firewalld.serivce
#开启防火墙
systemctl start firewalld.serivce
#查看防火墙已开放的端口号
firewall-cmd --list-ports
#添加端口进防火墙
firewall-cmd --permanent --zone=public --add-port=3306/tcp
#重新加载防火墙
firewall-cmd --reload
#重启防火墙服务(选做)
systemctl restart firewalld.service
firewall-cmd --zone=public --add-port=80/tcp --permanent
centos7中的防火墙改成了firewall,使用iptables无作用,开放端口的方法如下:
firewall-cmd --zone=public --add-port=80/tcp --permanent
返回success为成功
命令含义:
--zone #作用域
--add-port=80/tcp #添加端口,格式为:端口/通讯协议
--permanent #永久生效
重启防火墙:
systemctl restart firewalld.service
关闭防火墙:
systemctl stop firewalld.service
查看监听(Listen)的端口
netstat -lntp
检查端口被哪个进程占用
netstat -lnp|grep 8080
查看已开发的端口
firewall-cmd --list-ports
根据端口号得到其占用的进程的详细信息
netstat -tlnp|grep 80
tcp 0 0 192.168.33.10:80 0.0.0.0:* LISTEN 5014/httpd
tcp 0 0 0.0.0.0:48054 0.0.0.0:* LISTEN 5386/java
一次性的清除占用80端口的程序
lsof -i :80|grep -v "PID"|awk '{print "kill -9",$2}'|sh
手工终止进程的运行
kill 5014
如果终止不了,可以强制终止
kill -9 5014
启动一个服务:systemctl start firewalld.service
关闭一个服务:systemctl stop firewalld.service
重启一个服务:systemctl restart firewalld.service
显示一个服务的状态:systemctl status firewalld.service
在开机时启用一个服务:systemctl enable firewalld.service
在开机时禁用一个服务:systemctl disable firewalld.service
查看服务是否开机启动:systemctl is-enabled firewalld.service
查看已启动的服务列表:systemctl list-unit-files|grep enabled
查看启动失败的服务列表:systemctl --failed
常用命令
firewall-cmd --state ##查看防火墙状态,是否是running
firewall-cmd --reload ##重新载入配置,比如添加规则之后,需要执行此命令
firewall-cmd --get-zones ##列出支持的zone
firewall-cmd --get-services ##列出支持的服务,在列表中的服务是放行的
firewall-cmd --query-service ftp ##查看ftp服务是否支持,返回yes或者no
firewall-cmd --add-service=ftp ##临时开放ftp服务
firewall-cmd --add-service=ftp --permanent ##永久开放ftp服务
firewall-cmd --remove-service=ftp --permanent ##永久移除ftp服务
firewall-cmd --add-port=80/tcp --permanent ##永久添加80端口
iptables -L -n ##查看规则,这个命令是和iptables的相同的
man firewall-cmd ##查看帮助
自此,所有的配置均完成!
参考:https://blog.csdn.net/github_39533414/article/details/80144890
https://blog.csdn.net/qq_38118019/article/details/80207918#commentBox
源码安装方式参考 https://blog.csdn.net/weixin_41782053/article/details/80571961