Linux安装MySQL
这里以安装MySQL8.0.34为例,系统环境为CentOS 7 64位。SSH远程连接使用的是FinalShell。
MySQL官网:mysql.com
下载地址直达:https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.34-1.el7.x86_64.rpm-bundle.tar
下载完成解压后,可以看到许多.rpm文件,将其中打框的传入至虚拟机:
检查CentOS 7下MySQL依赖
检查/tmp临时目录权限
因为在mysql安装过程中,会通过mysql用户在/tmp_db文件,所以需要给/tmp较大的权限:
chmod -R 777 /tmp
检查依赖
libaio
rpm -qa|grep libaio
如果存在依赖,则如下图:
如果没有,则执行以下命令进行安装:
yum install -y libaio-0.3.109-13.el7.x86_64
net-tools
rpm -qa|grep net-tools
如果存在依赖,则如下图:
如果没有,则执行以下命令进行安装
yum install -y net-tools-2.0-0.25.20131004git.el7.x86_64
注意
:如果Linux系统选择的是带图形化界面,则这些都是安装好的,最小安装方式则需要进行手动安装一下。
安装过程
将安装程序拷贝到/mysql目录下
安装程序即上面拷贝到虚拟机的六个.rpm文件,如果上面已经考过了,则直接用cd命令打开文件所在目录即可。
在mysql的安装文件目录下执行(必须按照顺序执行
):
rpm -ivh mysql-community-common-8.0.34-1.el7.x86_64.rpm
rpm -ivh mysql-community-client-plugins-8.0.34-1.el7.x86_64.rpm
rpm -ivh mysql-community-libs-8.0.34-1.el7.x86_64.rpm
rpm -ivh mysql-community-client-8.0.34-1.el7.x86_64.rpm
rpm -ivh mysql-community-icu-data-files-8.0.34-1.el7.x86_64.rpm
rpm -ivh mysql-community-server
注意:
在安装第三个的时候,会报下面的错误:
这是因为mysql被oracle收购之后,mysql团队担心oracle公司会将mysql闭源,所以mysql核心团队单独开发了一款开源的,就叫mariadb
。只需要执行下面的命令清除之前安装的依赖即可:
yum remove -y mysql-libs
清除之后重新安装第三步,继续后续的安装即可。
查看MySQL版本
类似于java -version查看java版本的命令,执行下面的命令,如果安装成功则会显示如下图:
mysql --version
# 或者
mysqladmin --version
也可以执行下面的命令,查看是否有刚才安装的六个程序判断是否安装成功。
rpm -qa|grep -i mysql
服务初始化
为了保证数据库目录与文件的所有者为mysql登录用户,如果是以root身份运行mysql服务,则需要执行下面命令进行初始化:
mysqld --initialize --user=mysql
说明:--initialize
选项默认是以“安全”模式进行初始化,则会为root用户生成一个密码,并将其标记为过期,登录之后需要重新设置一个新密码。生成的临时密码会在日志中记录一份。
执行命令查看日志中的临时密码:
cat /var/log/mysqld.log
启动MySQL
这时先不要着急登录mysql,还需要检查一下mysql服务是否启动:
systemctl status mysqld
发现mysql只是安装完成,并没有启动,执行命令启动mysql:
systemctl start mysqld
再次查看mysql服务状态,已经启动(active):
用命令查看mysql是否自启动:
systemctl list-unit-files|grep mysqld.service
发现也已经开启自启动:
设置mysql自启动,以便于以后启动虚拟机后不再需要手动打开mysql
systemctl enable mysqld.service
如果不希望进行自启动,也可以运行以下命令进行配置:
systemctl disable mysqld.service
登录MySQL
此时已经全部就绪,可以开始进行登录:
mysql -uroot -p临时密码
注意:-p与密码之间不要有空格,否则会登录失败,因为mysql会将空格也当作密码的一部分。
登录成功,先别着急操作数据库,此时还需要修改密码(即使操作数据库也没用,mysql会强制让你修改密码)
执行下面的命令进行重置密码:
ALTER USER 'root'@'localhost' IDENTIFIED BY '新密码';
修改完成后,退出重新登陆一下mysql
# 退出登录
exit
mysql -uroot -p新密码
重新登录之后,再次查看数据库:
show databases;
可以看到,此时已经可以查看数据库了。
远程连接
这里使用的mysql远程连接工具是SQLyog。
首先先关闭虚拟机的防火墙
systemctl stop firewalld
# 关闭防火墙开机自启动
systemctl disable firewalld
注:
生产环境下不要轻易关闭服务器的防火墙。而是指定开放访问端口。
# 开启防火墙
systemctl start firewalld
# 开启自启动
systemctl enable firewalld
# 开放3306端口
firewall-cmd --zone=public --add-port=3306/tcp --permanent
--permanent
表示永久开放此端口。
吧
打开SQLyog,创建新的连接,输入虚拟机ip地址,mysql密码,进行测试连接:
此时并没有那么顺利,因为MySQL为了保证数据安全,默认是禁止了远程登录的。所以会报出错误号码1130 Host '192.168.xxx.xxx' is not allowed to connect to this MySQL server
错误
此时需要执行一些命令:
登录mysql
mysql -uroot -p新密码
查看mysql数据库
# 使用mysql数据库
USE mysql;
SELECT host FROM user where user = 'root';
此时的注解访问地址为localhost,所以无法进行远程连接,更改一下即可:
UPDATE user set host = "%" where user = 'root';
这里的%代表所有ip都可以进行访问。
刷新mysql配置(或者重启mysql服务)
# 刷新
FLUSH PRIVILEGES;
# 退出mysql
exit
# 重启mysql服务
systemctl restart mysqld.service
此时再次用SQLyog进行测试连接时,发现还有一个报错,~已经开始烦躁了
报错的原因是因为mysql8 之前的版本中加密规则是mysql_native_password,而在mysql8之后,加密规则是caching_sha2_password。
所以此时输入命令修改加密规则:
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '新密码';
# 刷新
FLUSH PRIVILEGES;
此时可以查看user表中相关信息,是否修改成功:
# 使用mysql数据库
USE mysql
SELECT user,host,plugin FROM user WHERE user='root';
说明此时已经修改成功了。
最后,再次使用SQLyog测试连接一下数据库。终于,连接成功!
值得注意的是,这里只是测试安装,所以开放所有ip访问没有任何关系。但在实际开发生产中,开放所以ip访问可能会导致数据被泄露,所以会开放指定端口访问或者只允许本地(localhost)访问。