心酸历程。。。
网上的各种教程都有各种bug,安了三个小时终于安好。现在奉上我的宝典秘籍。
第一步,去mysql官网下载,然后将下载的tar包放到linux里面,最好专门创建一个目录来存放,我放到了/usr/local/src的mysql目录下了,mysql这个目录是我自己创建的。
在linux里面解压
我下载的是tar包,第一步是解压这个tar包
tar -xvf mysql-8.0.30-linux-glibc2.12-x86_64.tar
tar包解压出来就是tar.xz包
tar -xvJf mysql-8.0.23-linux-glibc2.12-x86_64.tar.xz
给他改个名字,好看点
mv mysql-8.0.30-linux-glibc2.12-x86_64 mysql-8.0.30
在mysql-8.0.30的目录下创建data文件,用来放数据
mkdir data
分别创建用户组以及用户和密码(如果提示已存在说明之前有创建过了)
groupadd mysql
useradd -g mysql mysql
让mysql:mysql管理mysql的文件
chown -R mysql.mysql /usr/local/src/mysql/mysql-8.0.30
修改data权限,让他可以写入执行数据
chmod 750 /usr/local/src/mysql/mysql-8.0.30/data -R
配置环境变量
vim /etc/profile
export PATH=$PATH:/usr/local/src/mysql/mysql-8.0.30/bin:/usr/local/src/mysql/mysql-8.0.30/lib
这两个路径就是mysql的路径/bin,mysql路径的/lib,大家不要直接照搬啊,看着自己的mysql路径,可以在mysql包下通过pwd
获取当前路径,然后复制粘贴上去。
编辑my.cnf文件
vi /etc/my.cnf
直接粘贴下面语句就行,根据自己的实际情况改动安装根目录和数据文件所在位置,其他的不需要改动。
#服务端口号 默认3306
port = 3306
# 启动mysql服务进程的用户
user = mysql
##########################################################################################################
# 安装目录相关
# mysql安装根目录
basedir = /usr/local/src/mysql/mysql8.0.30/
# mysql数据文件所在位置
datadir = /usr/local/src/mysql/mysql8.0.30/data/
# 临时目录 比如load data infile会用到,一般都是使用/tmp
tmpdir = /tmp
#数据库默认字符集,主流字符集支持一些特殊表情符号(特殊表情符占用4个字节)
character-set-server = utf8mb4
#数据库字符集对应一些排序等规则,注意要和character-set-server对应
collation-server = utf8mb4_unicode_ci
#设置client连接mysql时的字符集,防止乱码
init_connect='SET NAMES utf8mb4'
[client]
socket=/var/lib/mysql/mysql.sock
复制 mysql.server 文件,在//usr/local/src/mysql/mysql8.0.30/目录下执行
cp -a ./support-files/mysql.server /etc/init.d/mysql
cp -a ./support-files/mysql.server /etc/init.d/mysqld
给赋值的文件赋予权限
chown 777 /etc/my.cnf
chmod +x /etc/init.d/mysql
chmod +x /etc/init.d/mysqld
检查一下/var/lib/mysql是否存在,否则进行创建,这里主要是防止连接不上mysql.sock,套接字,这里的套接字的路径和my.cnf里面的socket路径必须一样。
mkdir /var/lib/mysql
赋予权限
chown -R mysql:mysql /var/lib/mysql/
初始化mysql
使用mysql的 mysqld 命令初始化数据库的基本信息。切换到mysql-5.7.18/bin目录下执行。
报错点1:注意这里还有一个问题就是我们需要用mysql用户来初始化mysql 所有我们要先从root用户变成mysql用户,要不然会报错!!!!
su mysql
命令:在/usr/local/src/mysql/mysql8.0.30/bin
目录下执行
./mysqld --initialize --user=mysql --datadir=/usr/local/src/mysql/mysql8.0.30/data --basedir=/usr/local/src/mysql/mysql8.0.30 --console
该命令执行后,会生成一个临时的mysql数据库root用户的密码,请先拷贝出来记住,后续第一次登录mysql需要使用
报错点2,说data文件不安全或者说data文件里面存在数据,那么就把data里面的数据删掉就好了
rm -rf /usr/local/src/mysql/mysql8.0.30/data/*
mysql-5.7.18/bin目录下执行命令:./mysqld_safe &
(其中&符号表示后台启动),输入命令后按Enter。
启动数据库,有SUCCESS字眼说明MySQL安装完成
service mysql start
ps:
如果发现启动失败,可以先查看data里面的mysql.log,如果有提示3306这样的字样,第一个想到的应该是端口被占用,
使用lsof -i:端口号,查看是哪个PID(进程号)占用了该端口,然后使用kill -9 PID(进程号
)杀掉进程,重新执行service mysql start
确认msyql是否启动,查看进程 ,使用ps -ef | grep mysql
客户端登录mysql
登录进入mysql,bin目录下执行命令:
./mysql -uroot -p
-u表示使用root用户登录系统,使用之前生成的密码。
-p表示使用密码登录
root用户密码是临时密码,要修改才能使用。
执行sql语句 show databases; 第一次使用将会提示修改mysql的root用户密码:
修改密码
alter user 'root'@'localhost' identified by '新密码';
授权远程访问
授权远程访问,在没有授权之前只能在本机访问msyql,远程授权就是让其他计算机通过网络访问mysql(这样远程客户端才能访问)。
CREATE USER 'root'@'%' IDENTIFIED BY '新密码';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;
授权命令:grant
语法:grant all privileges on . to root@‘%’ identified by ‘yf123’;
参数:
其中*.* 的第一个表示所有数据库名,第二个表示所有的数据库表;
root@‘%’ 中的root表示用户名,%表示ip地址,%也可以指定具体的ip地址,比如root@localhost,root@192.168.235.130等。
执行授权命令:grant all privileges on . to root@‘%’ identified by ‘yf123’;
关闭防火墙:systemctl stop firewalld
远程连接数据库:
点开你的mysql->新建连接->测试连接
报错点3连接不上,报错
进入MySQL的bin目录,然后输入mysql -u root -p,输入密码,登录成功
执行SQL查询用户信息
select host,user,plugin,authentication_string from mysql.user;
可以看到他们的加密方式是caching,这个加密方法和mysql8.0.30不匹配。因此需要改变他的加密方式。
改变加密方式
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '密码';
我是因为有两个root,所以我这行代码需要执行两次,并且刷新权限,才能将两个root账号的加密方式全部改过来。
刷新权限
FLUSH PRIVILEGES;
再次连接,嘿嘿,成功!
关闭mysql服务
bin目录下执行:
./mysqladmin -uroot -p shutdown
输入密码关闭