首页 > 数据库 >初探MySQL-小白的Linux安装笔记

初探MySQL-小白的Linux安装笔记

时间:2023-06-19 12:31:53浏览次数:49  
标签:27 初探 Linux 64 usr mysql MySQL local x86


这篇文章是我们组内一位小伙伴垒的文字,亲测每个步骤,真实、可靠、接地气,照着做就能入门Linux下的MySQL安装,欢迎更多的小伙伴能将日常工作中的经验记录下来,分享给其他人,正所谓“独乐乐不如众乐乐”。

最近接到一个任务,由于开发环境变化,需要将旧机器上的mysql迁移到新机器上去,其中涉及到在新服务器安装mysql。其实之前已经在Linux环境安装过一次,但是更多忙于慌乱的解决问题并达到最终目标,对细节的关注度不够,而且虽然整个过程借鉴了很多前辈的经验,但每个人的思维方式和关注点不一样,所以这次详细的记录了安装全过程。由于是第二次尝试安装,很多问题和细节都未触及,但还是希望能给初次安装mysql的萌新提供一些参考。

1. 安装文件准备

可从mysql官方网站下载。本次安装使用的是mysql-5.7.27-linux-glibc2.12-x86_64.tar。

2. 解压缩文件

解压缩该文件,指令为,

tar xvf mysql-5.7.27-linux-glibc2.12-x86_64.tar

指令执行及解压之后的目录如下图所示,

初探MySQL-小白的Linux安装笔记_MySQL

继续解压文件mysql-5.7.27-linux-glibc2.12-x86_64.tar.gz,指令为,

tar -xzvf mysql-5.7.27-linux-glibc2.12-x86_64.tar.gz

解压之后该目录如下图所示,红色框中即mysql文件,

初探MySQL-小白的Linux安装笔记_mysql_02

3. 软连接

(1) 将第2步截图红框中的目录(mysql-5.7.27-linux-glibc2.12-x86_64)软连接到/usr/local/mysql(如没有该目录则需自行创建)。指令为,

ln -s mysql-5.7.27-linux-glibc2.12-x86_64 /usr/local/mysql

(2) 执行(1)之后,查看/usr/local/mysql目录,效果如下图所示。

但是发现红框选中的目的连接持续闪烁,

初探MySQL-小白的Linux安装笔记_mysql_03

(3) 可通过修改(1)中的指令的方式解决(2)所描述的连接闪烁问题,即在(1)指令中写明原文件的全路径。

先删除原连接,

rm -rf /usr/local/mysql/mysql-5.7.27-linux-glibc2.12-x86_64

新的指令如下,

ln -s /opt/app/software/mysql/mysql-5.7.27-linux-glibc2.12-x86_64 /usr/local/mysql/

执行之后查看/usr/local/mysql目录如下截图所示,

初探MySQL-小白的Linux安装笔记_MySQL_04

4. 创建用户

使用root权限,创建用户。指令如下所示,

groupadd mysql
useradd -g mysql -s /sbin/nologin -d /usr/local/mysql/ -M mysql

5. 设置环境变量

设置mysql相关的环境变量,指令如下,

echo PATH=$PATH:/usr/local/mysql/mysql-5.7.27-linux-glibc2.12-x86_64/bin >>/etc/profile
source /etc/profile

6. 创建必须的目录

直接执行以下指令(会将该目录创建在当前服务器的根目录),

mkdir -p /mysql/3306/{data,tmp,log}

创建目录之后更换属主,

chown -R mysql:mysql 3306

7. 编辑配置文件配置文件my.cnf

关于该配置文件,目前还有以下几点问题不清晰。

(1) 首先提供本次安装my.cnf文件的内容,

初探MySQL-小白的Linux安装笔记_mysql_05

(2) 其他安装经验有提到该文件不是必须的,没有该文件mysql也能正常运行。关于此点的理解是mysql有很多默认设置,这些默认设置就能满足一般使用需求。但是由于本次安装basedir和datadir的路径都“不一般”,所以必须特别指定,则通过my.cnf来指定。还有经验指出,可以通过修改mysql.server来指定当前机器的basedir和datadir,但是由于第一次安装就是通过my.cnf来指定的,所以本次还是沿用了第一次的思路,下次再有安装mysql的需求会尝试通过修改mysql.server的basedir和datadir来实现(修改方式详见本文第8步的描述,如省略my.cnf的配置则直接到第8步)。

(3) 网上有较多该文件的模板,一般都有多段内容:[client]、[mysqld]、[mysqldump]、[mysqld_safe]等,但是本文配置了上图所示的两段内容也可正常运行。所以归根结底还应是mysql默认配置的作用,本次安装只涉及了basedir和datadir的修改,所以配置文件的内容已满足需求。另外了解到涉及mysql调优的时候,该文件会有更大的用处,所以后续涉及数据量很大或者数据库性能问题的时候可深究此文件。

8. 配置mysql.server

cd /usr/local/mysql/mysql-5.7.27-linux-glibc2.12-x86_64/support-files
cp mysql.server /etc/init.d/mysqld

实现7(2)中的描述,需在此修改该文件的basedir和datadir为当前机器的路径)。此处存留一个问题,也可在后续的安装中尝试解决。看了很多经验都有从support-files将mysql.server复制到/etc/init.d并修改了文件名的操作,难道直接在support-files中修改并使用该文件不可以?为什么一定要有copy到另一个路径的操作?

9. 初始化数据库

初始化数据库,执行指令及返回结果如下所示,

/usr/local/mysql/mysql-5.7.27-linux-glibc2.12-x86_64/bin/mysqld --defaults-file=/etc/my.cnf --initialize --user=mysql --basedir=/usr/local/mysql/mysql-5.7.27-linux-glibc2.12-x86_64/  --datadir=/mysql/3306/data/
mysqld: [Warning] World-writable config file '/etc/my.cnf' is ignored.
2020-02-29T11:36:35.006277Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).
2020-02-29T11:36:35.417910Z 0 [Warning] InnoDB: New log files created, LSN=45790
2020-02-29T11:36:35.499207Z 0 [Warning] InnoDB: Creating foreign key constraint system tables.
2020-02-29T11:36:35.570611Z 0 [Warning] No existing UUID has been found, so we assume that this is the first time that this server has been started. Generating a new UUID: bdc0f4c7-5ae7-11ea-95b4-fa163e6e78e4.
2020-02-29T11:36:35.574241Z 0 [Warning] Gtid table is not ready to be used. Table 'mysql.gtid_executed' cannot be opened.
2020-02-29T11:36:35.574667Z 1 [Note] A temporary password is generated for root@localhost: B-m%;xgH_54d

10. 获取密码

初始化数据库会提供初始密码,需注意保存改密码,后续会用,即上述打印内容的最后一行,

2020-02-29T11:36:35.574667Z 1 [Note] A temporary password is generated for root@localhost: B-m%;xgH_54d

11. 启动数据库

成功启动数据库效果如下图所示,

[root@localhost]# etc/init.d/mysqld start
Starting MySQL. SUCCESS!

但是启动数据库期间遇到一个问题,问题如下图所示,

[root@localhost]# /etc/init.d/mysqld start
my_print_defaults: [Warning] World-writable config file '/etc/my.cnf' is ignored.
Starting MySQL ERROR! Couldn't find MySQL server (/usr/local/mysql/bin/mysqld_safe)

起初排查问题直接忽略掉了Warning提示信息,只关注ERROR报错,反复确认自己的确在配置文件中正确配置了当前机器的mysql的目录。后来又看到Warning信息,当前机器的配置都是通过/etc/my.conf实现的,但是由于自己贪图方便,将该文件的权限是设置成777,所以导致mysql启动时认为该文件不安全,而将其ignored,随即将该文件的权限改为644,问题解决。

12. 修改root密码

修改密码出现报错:

[root@localhost]# cd /usr/local/mysql/mysql-5.7.27-linux-glibc2.12-x86_64/support-file
[root@localhost]# mysqladmin -uroot -p password 'my25sql2020'
bash: mysqladmin: command not found

该问题的原因是由于系统默认会查找/usr/bin下的命令,如果命令不在这个目录下,则会报错找不到命令,需要做的就是映射一个链接到/usr/bin目录下,即建立软连接。首先需知道mysql命令或mysqladmin命令的完整路径,比如mysqladmin的路径是:

/usr/local/mysql/mysql-5.7.27-linux-glibc2.12-x86_64/bin/mysqladmin

则可以这样执行命令:

ln -s /usr/local/mysql/mysql-5.7.27-linux-glibc2.12-x86_64/bin/mysqladmin /usr/bin

但是本次暂且通过使用mysqladmin绝对路径的方式也执行成功(后续觉得这样很麻烦并且不利于其它人使用,所以最终还是创建了软连接):

初探MySQL-小白的Linux安装笔记_bc_06

13. 解决第12步的报错

第12步的描述中,截图的最后有一个报错:

'Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)'
Check that mysqld is running and that the socket:'/tmp/mysql.sock' exists!

检查了my.cnf中配置的socket路径,socket=/var/lib/mysql/mysql.sock,并且该路径也已经存在mysql.sock文件。但是mysql仍去找/tmp/mysql.sock,没找到导致了上述报错信息。所以创建一个软连接来解决该问题,指令及结果如下图所示:

初探MySQL-小白的Linux安装笔记_mysql_07

之后继续修改密码,修改成功:

初探MySQL-小白的Linux安装笔记_mysql_08

14. 登录数据库

成功登录数据库

初探MySQL-小白的Linux安装笔记_mysql_09

15. Navicat登录

尝试用Navicat通过root账号登录,出现如下图所示的报错,

初探MySQL-小白的Linux安装笔记_bc_10

经排查为是mysql未开启mysql远程访问权限导致, 执行以下语句,修改root用户的权限,同样的报错依然存在。

初探MySQL-小白的Linux安装笔记_bc_11

但是第16步创建的新用户,可以成功通过Navicat访问数据库,又从安全角度考虑root账号权限过大,所以便未再深究此问题,还将root的权限收回了:update user set host='localhost' where user='root'。

16. 创建新用户

初探MySQL-小白的Linux安装笔记_MySQL_12

17. 创建数据库并给用户授权

最后的授权也很关键,

初探MySQL-小白的Linux安装笔记_mysql_13

至此,便可通过Navicat等第三方软件访问数据库执行增删改查等操作。

其实很多问题都是只知其然,不知所以然。会担心安装过程中改错了某个配置而导致最后安装失败或者消耗太多时间成本,但是对于技术的学习的确是需要时间和精力的付出才能更有收获。如果再有这方面的需求,应该能更大胆的研究这些配置文件,或者在以后的使用过程中尝试修改某项配置看其产生的影响。


标签:27,初探,Linux,64,usr,mysql,MySQL,local,x86
From: https://blog.51cto.com/u_13950417/6512407

相关文章

  • 小白学习MySQL - 闲聊聊
    众所周知,在DB-Engines的排行榜,一直占据前两位的数据库,就是Oracle和MySQL,Oracle作为关系型数据库的老大,在这个生态圈中,占据着绝对优势,MySQL作为一款面向“开源"的软件,虽然被Oracle曲线收购,相比之下,还是存在着“开源”的血统,而且有很多分支,无论是国外的MariaDB,还是国内的AliSQL,都在发......
  • 小白学习MySQL - MySQL会不会受到“高水位”的影响?
    前两天碰到了一个问题,MySQL的一张表,1220万数据量,需要删除1200万数据,仅存储20万数据,讨论了三种方案,1.00:00直接执行truncate,只存储新数据。2.将1220万中的20万采用CTAS存到一张中间表,再通过rename改这两张表的名称,实现替换操作。3.delete删除1200万数据。经过综合考虑,用的方案3,方......
  • 非Oracle Linux下Oracle 19c CDB数据库安装
    《非OracleLinux下安装Oracle19c》我们安装了non-cdb的19c数据库,通过这个脚本,还可以搭建cdb的数据库。1.修改安装脚本cp/etc/init.d/oracledb_ORCLCDB-19c/etc/init.d/oracledb_pdbisal-19c其中要改几处,ORACLE_SID改成新的,LISTENER_NAME改成新的,CREATE_AS_CDB之前我写的false,......
  • Linux时钟同步NTP配置
    一、基本操作hwclock--show#硬件时间时钟(RTC)date#还有一个称之为系统时钟(SystemClock)hwclock--hctosys #把硬件时间设置成系统时间 hwclock-shwclock--systohc......
  • php解决 mysql_connect(): The mysql extension is deprecated and will be removed i
    Themysqlextensionisdeprecatedandwillberemovedinthefuture:usemysq翻译:mysql_connect这个模块将在未来弃用,请你使用mysqli或者PDO来替代。解决方法:打开php.ini配置文件把display_errors=On改为display_errors=Off改完之后重启服务就可以了。  ......
  • python之mysql登录验证
    fromdotenvimportload_dotenvimportpymysqlimportosload_dotenv()connection=pymysql.connect(host=os.getenv("HOST"),database=os.getenv("DATABASE"),user=os.getenv("USERNAME"),password=os.getenv("PASSWORD......
  • 分布式与集群的概念以及Linux操作系统的概述
    分布式--多台机器,且每台机器上部署不同组件集群--多台机器,且每台机器上部署相同组件而对于大数据的存储而言,单机存储有瓶颈,多台机器进行分布式存储;对于大数据的计算,单机计算能力有限,多台机器进行分布式计算;Linux操作系统确实是没想到想要使用Hadoop还需要重新将Linux的相关知......
  • Linux日常使用命令
    netstat -tlnp  #找出目前系统上已在监听的网络连接及其PIDservice    XXXX     statusdmidecode -t 1#查看系统相关的硬件信息mkdirrmdirchmod     #更改文件权限useraddw       ......
  • Linux下的^M困惑
    我们有时在Windows编辑的文件,放到了Linux环境中,打开文件,可能发现每行结尾多了一个“^M”,导致一些在Windows下能执行的解析程序,放到了Linux中,执行就会报错,问题就出在这个"^M"。其实这个问题,和操作系统换行符相关。Dos、Windows格式的文件,用0D0A(CR+LF)作为换行符,而Linux/Unix的则是......
  • MySQL中SQL语句的执行顺序(详细)
    一:SQL语句的执行顺序作为一个开发人员,在开发中基本上每时每刻都要和数据库打交到;虽然写过无数的SQL语句,但是写好一个SQL可不是这么简单的,它涉及到各式各样的优化和书写方式;但下面我以MySQL中的SQL执行顺序来作为讲解,对其进行剖析。1:SQL数据的准备为了可以为下文做铺垫,......