Linux开发环境搭建之MySQL安装配置

Stella981
• 阅读 646

        本文主要实践在Linux上安装和配置MySQL关系型数据库,完整的实践MySQL的下载、安装、配置、使

用的过程,为后面某些文中使用做基础

一、环境准备

1.CentOS7发行版的Linux系统(最小化安装)

2.MySQL官方编译的安装包 mysql-5.7.20-linux-glibc2.12-x86_64

下载地址:https://dev.mysql.com/downloads/mysql/

Linux开发环境搭建之MySQL安装配置

二、安装准备

1.打开CentOS7发行版Linux系统

Linux开发环境搭建之MySQL安装配置

2.添加mysql组和mysql用户

执行命令groupadd mysql 添加mysql组

执行命令useradd -r -g mysql mysql 添加mysql用户

参数说明:

* useradd -r表示mysql用户是系统用户,不可用于登录系统

* useradd -g表示把mysql用户添加到mysql用户组中

Linux开发环境搭建之MySQL安装配置

查看新添加的组和用户 :groups mysql

Linux开发环境搭建之MySQL安装配置

3.使用FTP上传mysql安装包到我们创建的安装目录

Linux开发环境搭建之MySQL安装配置  文件上传

Linux开发环境搭建之MySQL安装配置

三、安装过程

1.解压安装包到安装目录

Linux开发环境搭建之MySQL安装配置

2.更改目录名为mysql

Linux开发环境搭建之MySQL安装配置

3.修改目录权限

进入mysql目录,修改目录拥有者为mysql用户:执行命令 chown -R mysql:mysql ./

Linux开发环境搭建之MySQL安装配置

4.安装mysql数据库

进入mysql目录下的bin目录中,执行./mysql_install_db --user=mysql,此时系统反馈错误

Linux开发环境搭建之MySQL安装配置

错误提示:需要指定data目录,因为mysql服务进程mysqld运行时都会访问data目录,所以必须由启动mysqld进程的用户,就是我们之前设置的mysql用户,执行这个脚本或者用root 执行,但是加上参数--user=mysql上文还有警告信息,说mysql_install_db 命令已经是弃用的,建议切换到mysqld --initialize命令

注意:mysql5.7和之前版本不同,很多资料上都是这个命令:./scripts/mysql_install_db --user=mysql,而mysql5.7的mysql_install_db命令是在bin目录下的并且建议 用 mysqld --initialize命令初始化

我们本文的版本是5.7.20,我们需要进入bin目录下执行初始化命令:./mysqld --initialize --user=mysql --basedir=/usr/local/deve/mysql --datadir=/usr/local/deve/mysql/data

参数解释:

--user  启动mysql的用户

--basedir  mysql安装目录

--datadir  mysql数据目录

Linux开发环境搭建之MySQL安装配置

[Note] A temporary password is generated for root@localhost: ae3Zk1<1b=iu

注意:最后一行系统给出了root的默认密码,到会我们会修改

5.修改目录权限

将mysql目录下除了data目录的所有文件,改回root用户所有,mysql用户只需作为mysql/data/目录下所有文件的所有者

Linux开发环境搭建之MySQL安装配置

6.修改配置文件

刚刚执行初始化命令,已经在系统的etc目录下生成了my.cnf配置文件

Linux开发环境搭建之MySQL安装配置

修改配置文件如下:

[client]
socket=/usr/local/deve/mysql/tmp/mysql.sock

[mysqld]
basedir=/usr/local/deve/mysql
socket=/usr/local/deve/imysql/tmp/mysql.sock
symbolic-links=0

[mysqld_safe]
log-error=/usr/local/deve/mysql/logs/mysql.log
pid-file=/usr/local/deve/mysql/logs/mysql.pid                     

!includedir /etc/my.cnf.d

Linux开发环境搭建之MySQL安装配置

注意:tmp目录不存在就创建,否则会出错, 创建后要赋予mysql权限,chown -R mysql:mysql tmp 如果mysql.sock指定到/tmp以外的目录,需要在my.cnf中添加[client]并且指定socket位置,否则登录mysql时会报错:ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2),默认是会找tmp目录下的sock文件

7.将mysqld服务加入开机自启动项

修改mysql.server中basedir的相关路径,改为自定义的路径

Linux开发环境搭建之MySQL安装配置

将support-files/mysql.server 拷贝为/etc/init.d/mysql并设置运行权限,这样就可以使用service mysql命令启动/停止服务,执行cp mysql.server /etc/init.d/mysql  然后执行chmod +x /etc/init.d/mysql 把mysql注册为开机启动的服务chkconfig --add mysql  验证chkconfig --list mysql

Linux开发环境搭建之MySQL安装配置

8.mysql服务的开启和关闭

<1>mysql服务启动有以下三种方式

#/etc/init.d/mysql start

serivce mysql start

bin/mysqld_safe&

<2>mysql服务停止有以下三种方式

#/etc/init.d/mysql stop

service mysql stop

bin/mysqladmin -uroot -p (注意此时的root是指mysql的root用户)

注:脚本末尾加&表示设置此进程为后台进程,区别就是在控制台输入bg,即可将当前进程转入后台

9.配置环境变量

vi /etc/profile

写入mysql的环境变量信息

Linux开发环境搭建之MySQL安装配置

退出保存后,执行source /etc/profile 使其生效,使用echo $PATH查看配置

Linux开发环境搭建之MySQL安装配置

注意:不添加环境变量或者建立软链接,运行mysql命令会出现   -bash: mysql:command not found

四、验证安装

1.启动mysql服务

Linux开发环境搭建之MySQL安装配置

2.连接mysql

mysql -uroot -p  ae3Zk1<1b=iu   (生成的密码)

Linux开发环境搭建之MySQL安装配置

3.修改默认密码

修改mysql的密码有很多中方法

<1>.使用客户端连接

直接执行  SET PASSWORD FOR 'root'@'localhost' = PASSWORD('newpass'); 

localhost是mysql的主机ip,newpass是需要设置的新密码

<2>用SET PASSWORD命令

使用 mysql -uroot -p 连接成功后

SET PASSWORD FOR 'root'@'localhost' = PASSWORD('newpass');

<3>用mysqladmin

mysqladmin -u root password "newpass"

如果root已经设置过密码,或者初始化生成了默认密码,采用如下方法

mysqladmin -u root password oldpass "newpass"

<4> 用UPDATE直接编辑user表

使用 mysql -uroot -p 连接成功后

mysql> use mysql;

mysql> UPDATE user SET Password = PASSWORD('newpass') WHERE user = 'root';

mysql> FLUSH PRIVILEGES;

<5>忘记root密码的时候

mysqld_safe --skip-grant-tables&

mysql -u root mysql

mysql> UPDATE user SET password=PASSWORD("new password") WHERE user='root';

mysql> FLUSH PRIVILEGES;

本文直接在命令行中修改,采用上面第<2>中方式

Linux开发环境搭建之MySQL安装配置

4.远程连接mysql

我们使用另一台主机的navicat进行远程连接

Linux开发环境搭建之MySQL安装配置

我们发现mysql服务不允许远程连接访问,我们需要授权远程访问,有以下两种方式:

<1>通过改表实现(简单)

使用 mysql -uroot -p 连接成功后                      
mysql>use mysql;
mysql>update user set host = '%' where user = 'root';
mysql>select host, user from user;

本文使用这种方式

Linux开发环境搭建之MySQL安装配置

<2>通过授权

首先在安装mysql的机器上运行:mysql -h localhost -u root ,然后在命令行执行

mysql>GRANT ALL PRIVILEGES ON *.* TO 'root'@'%'WITH GRANT OPTION

如果你想允许用户test从ip为192.168.1.100的主机连接到mysql服务器,并使用123456作为密码  

GRANT ALL PRIVILEGES ON *.* TO 'test'@'192.168.1.100' IDENTIFIED BY '123456' WITH GRANT OPTION;

然后mysql>FLUSH PRIVILEGES 使修改生效

最后mysql>EXIT退出即可

例如授权任何ip使用root 以123456登陆:

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;

修改完成后,使用service mysql restart 重启服务,我们再次远程连接MYSQL服务,已经可以正常连接

Linux开发环境搭建之MySQL安装配置

注意;

跳过密码验证,执行命令行:# /usr/bin/mysqld_safe --skip-grant-tables

五、总结

        经过以上的步骤,mysql就已经正常安装可以使用了,在本文的安装配置中也遇到不少问题,经过询问别的大佬和查阅资料都完美解决,尤其是最新版的5.7.20在安装配置中和旧版本存在差异,走了很多弯路,希望本文能帮助到其他同学,如有错误也请留言提出,谢谢。

点赞
收藏
评论区
推荐文章
blmius blmius
2年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Jacquelyn38 Jacquelyn38
2年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Easter79 Easter79
2年前
Twitter的分布式自增ID算法snowflake (Java版)
概述分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移
Wesley13 Wesley13
2年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
2年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
2年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
2年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
为什么mysql不推荐使用雪花ID作为主键
作者:毛辰飞背景在mysql中设计表的时候,mysql官方推荐不要使用uuid或者不连续不重复的雪花id(long形且唯一),而是推荐连续自增的主键id,官方的推荐是auto_increment,那么为什么不建议采用uuid,使用uuid究
Python进阶者 Python进阶者
4个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这