Linux学习-83-MySQL安装过程

在人生的道路上,不管是潇洒走一回,或者是千山独行,皆须是自己想走的路,虽然,有的人并不是很快就能找到自己的方向和道路,不过,只要坚持到底,我相信,就一定可以找到自己的路,只要找到路,就不必怕路途遥远了。

导读:本篇文章讲解 Linux学习-83-MySQL安装过程,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

17.12 MySQL安装

  • 作为LAMP架构的后端,是一款流行的开源关系数据库系统。在企业网站、业务系统等应用中,各种账户信息、产品信息,客户资料、业务数据等都可以存储到MySQL数据库,其他程序可以通过SQL语句来查询,更改这些信息。
  • mysql5和 mysql8两版本安装方式不同,分别介绍下两种安装方式。推荐使用mysql8安装
17.12.1 mysql5安装

1.添加 mysql 用户和 mysql 用户组

#添加mysql用户组
[root@CncLucZK ~]# groupadd mysql
#创建普通用户管理mysql,指定mysql用户的初始组是mysql组
[root@CncLucZK ~]# useradd -s /sbin/nologin -g mysql mysql

这里添加的 mysql 用户和用户组是稍后用来给 MySQL 安装目录分配权限用的,所以并不需要设定密码,因为这个用户是不能直接登录 Linux 系统的。

2.进入 MySQL 解压缩目录,编译前配置,编译安装

#进入 MySQL 解压缩目录
[root@CncLucZK ~]# cd /usr/local/src/mysql-5.5.23
#编译前配置
[root@CncLucZK mysql-5.5.23]# cmake \ #命令
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \ #指定安装位置
-DMYSQL_UNIX_ADDR=/tmp/mysql.sock \ #指定socket(套接字)文件位置
-DEXTRA_CHARSETS=all \ #支持所有的扩展字符集
-DDEFAULT_CHARSET=utf8 \ #指定默认字符集
-DDEFAULT_COLLATION=utf8_general_ci \ #指定默认字符校对
-DWITH_MYISAM_STORAGE_ENGINE=1 \ #安装myisam存储引擎
-DWITH_INNOBASE_STORAGE_ENGINE=1 \ #安装innodb存储引擎
-DWITH_MEMORY_STORAGE_ENGINE=1 \ #安装memory存储引擎
-DWITH_READLINE=1 \ #支持readline库
-DENABLED_LOCAL_INFILE=1 \ #启用加载本地数据
-DMYSQL_USER=mysql \ #指定MySQL运行用户
-DMYSQL_TCP_PORT=3306 #指定MySQL端口

[root@CncLucZK  mysql-5.5.23]# make && make install

cmake编译配置期间如果发现:-bash: cmake: command not found问题说明cmake没有安装。

使用 yum -y install cmake进行安装。然后使用 cmake –version查看下安装版本;

然后若出现cmake: symbol lookup error: cmake: undefined symbol: archive_write_add_filter_zstd这个问题,那么需要安装libarchive开源压缩库来访问许多压缩文件格式;输入该命令yum install libarchive,然后再次查看cmake版本cmake –version文件解决。

对于cmake: symbol lookup error问题,还可以安装低版本或者高版本的 cmake

卸载cmake程序:yum remove cmake 或 rpm -e cmake
重新安装cmake:网址:https://cmake.org/download/
创建软连接:ln -s /xx-path/cmake /usr/bin/cmake

使用 cmake 进行编译。如果编译过程中出现了报错,则不再使用“make clean”命令清除缓存及临时文件,而是直接删除“rm-rf CMakeCache.txt”文件。

3.生成MySQL的配置文件,并修改配置文件

  • 这个配置文件不用手工建立,在 MySQL 安装目录中给我们准备了模板文件,只需把模板文件复制到指定位置并改名即可。命令如下:
[root@CncLucZK mysql-5.5.23]#cp /usr/local/mysql/share/mysql/my-medium.cnf  /etc/my.cnf
#或者是support-files文件下的/my-default.cnf作为模板文件
[root@CncLucZK mysql-5.5.23]#cp support-files/my-default.cnf /etc/my.cnf
#配置系统识别mysql 服务,可以使用service mysql start
[root@CncLucZK mysql-5.5.23]#cp support-files/mysql.server /etc/init.d/mysqld
#配置mysql开机自启动服务
[root@CncLucZK mysql-5.5.23]#chkconfig --add /etc/init.d/mysqld
[root@CncLucZK mysql-5.5.23]#chkconfig  mysqld --level 35 on

#设置环境变量,申明/宣告mysql命令便于系统识别
[root@localhost mysql-5.6.26]#echo "PATH=$PATH:/usr/local/mysql/bin" >> /etc/profile
#配置完环境变量后,需要执行source /etc/profile命令,使配置文件生效
[root@localhost mysql-5.6.26]#source /etc/profile
[root@localhost mysql-5.6.26]#echo $PATH			#测试变量值
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/usr/local/mysql/bin

4.修改 MySQL 安装目录的权限

[root@CncLucZK mysql-5.5.23]# cd /usr/local/mysql/
#进入MySQL安装目录
[root@CncLucZK mysql]# chown -R mysql.
#把当前目录下所有文件的所有者改为root用户
[root@CncLucZK mysql]# chgrp -R mysql.
#把当前目录下所有文件的所属组改为mysql组

5.初始化数据库

  • 源码包安装的 MySQL 中所有的数据库默认都保存在 /usr/local/mysql/data/ 目录中,MySQL 的初始数据库 mysql 库和 test 库也会保存在这个目录中。但是,如果我们仔细查看 /usr/local/mysql/data/ 目录,就会发现这个目录中只有两个空目录,并没有任何数据。也就是说,MySQL 中的所有数据库是不存在的,那么这个 MySQL 是不能使用的,因为 MySQL 的所有用户是要保存在 user 表中的,而 user 表保存在 mysql 库中,而 mysql 库是保存在 /usr/local/mysql/data/ 目录中的。 那么,我们现在需要在 data 目录中建立 MySQL 的初始数据库。命令如下:
#初始化数据库
[root@CncLucZK mysql]# /usr/local/mysql/bin/mysql_install_db \ 
> --user=mysql \
> --ldata=/var/lib/mysql \
> --basedir=/usr/local/mysql\
> --datadir=/usr/local/mysql/data
[root@CncLucZK mysql]#vim /etc/init.d/mysqld
#46-47行
basedir=/usr/local/mysql 
datadir=/usr/local/mysql/data
  • 这条命令的 –user 选项表示使用 mysql 用户来初始化数据库,这个用户要和我们在步骤一中建立的用户一致。命令执行完成之后,/usr/local/mysal/data/ 目录中应该会出现很多相应的数据,证明数据库初始化成功。

6.继续修改MySQL安装目录的权限

[root@CncLucZK mysql]# chown -R root.
#把当前目录下所有文件的所有者改为root用户
#注意:修改的目录依然是/usr/local/mysql/目录下的文件
[root@CncLucZK mysql]# chown -R mysql data
#把data目录的所有者改为mysql用户

7.启动 MySQL 服务器,并保证 mysql 服务开机自启动

  • MySQL 服务器的安装已经完成,我们可以尝试启动 MySQL 服务器,命令如下:
#启动命令
[root@CncLucZK mysql]# /usr/local/mysql/bin/mysqld_safe ——user=mysql &
#或者是
[root@CncLucZK mysql]# service mysqld start

#使用mysql用户启动MySQL服务器,并在后台持续运行
[root@CncLucZK mysql]# netstat -tlun | grep 3306
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN
#3306端口已经开启了
  • 当然,我们还要保证 mysql 服务开机自启动,命令如下:
[root@localhost mysql]# vi /etc/rc.local
#修改自启动配置文件,加入如下的mysql服务标准启动命令
/usr/local/mysql/bin/mysqld_safe ——user=mysql &

8.设定 MySQL 中 root 用户的密码,并登录

  • MySQL 的管理员也是 root,不过这只是数据库的管理员,不要和 Linux 的 root 用户混淆了。我们需要给 MySQL 的本地用户设定一个密码。设定密码的方式有很多种,我们使用 Linux 的命令 mysqladmin 设定 MySQL 的 root 用户的密码。命令如下:
[root@localhost mysql]# /usr/local/mysql/bin/mysqladmin -u root password 123
#给MySQL的root用户设定密码为123
[root@localhost mysql]# /usr/local/mysql/bin/mysql -u root -p
#使用root用户登录mysql
Enter password: #输入正确的密码
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 2
Server version:5.1.59-community-log Source distribution
Copyright (c) 2000, 2011, Oracle and/or its affiliates.All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates.Other names may be trademarks of their respective owners.
Type 'help;' or '\h' for help.Type '\c' to clear the current input statement.
mysql>
#看到了MySQL的交互界面
mysql> \s #查询服务器状态信息
…省略部分输出…
Server characterset: utf8
Db characterset: utf8
Client characterset: utf8
Conn. characterset: utf8
#编码格式已经修改为UTF-8
…省略部分输出…
mysql> exit
#退出MySQL
17.12.2 mysql8安装

1.卸载mysql

#检查是否安装
[root@CncLucZK src]# rpm -qa | grep mysql
#如已安装mysql,则删除
#rpm -e --nodeps +包名			#--nodeps可以不检测依赖性直接卸载,但此方式不推荐大家使用
#按依赖顺序卸载
[root@CncLucZK src]# rpm -e --nodeps mysql-8.0.21-1.module_el8.2.0+493+63b41e36.x86_64
[root@CncLucZK src]# rpm -e mysql-server-8.0.21-1.module_el8.2.0+493+63b41e36.x86_64
[root@CncLucZK src]# rpm -e mysql-errmsg-8.0.21-1.module_el8.2.0+493+63b41e36.x86_64
[root@CncLucZK src]# rpm -e mysql-devel-8.0.21-1.module_el8.2.0+493+63b41e36.x86_64
[root@CncLucZK src]# rpm -e mysql-libs-8.0.21-1.module_el8.2.0+493+63b41e36.x86_64
[root@CncLucZK src]# rpm -e mysql-common-8.0.21-1.module_el8.2.0+493+63b41e36.x86_64
#再次检查安装包是否全部删除
[root@CncLucZK src]# rpm -qa | grep mysql
#搜索mysql文件夹
[root@CncLucZK src]# find / -name mysql
#若有mysql文件夹,则删除
[root@CncLucZK src]# rm -rf +包名
#再次检查文件夹是否全部删除
[root@CncLucZK src]# find / -name mysql

2.在 /usr/local/src下 创建mysql文件夹,并在里面下载mysql,然后在此文件中解压缩

#进入源码下载目录
[root@CncLucZK ~]# cd /usr/local/src
创建mysql文件夹
[root@CncLucZK ~]# mkdir mysql
#切换到mysql文件夹下
[root@CncLucZK ~]# cd mysql
#下载mysql,根据自己需要的mysql版本进行输入版本号。也可以直接在官方下载最新版本官方下载选择linux系统对应的mysql版本
[root@CncLucZK ~]# wget https://cdn.mysql.com/archives/mysql-8.0/mysql-8.0.18-el7-x86_64.tar.gz
#解压mysql源码包,解压后查看是否存在bin文件,有些源码包不包含bin文件,是需要编译安装的
[root@CncLucZK ~]#tar zxvf mysql-8.0.18-el7-x86_64.tar.gz

3.将mysql-8.0.18解压缩文件移动到/usr/local/mysql下

[root@CncLucZK src]#  mv /usr/local/src/mysql/mysql-8.0.18-el7-x86_64  /usr/local/mysql

4.进入/usr/local/mysql文件后,创建data文件夹来存储数据

[root@CncLucZK src]# cd  /usr/local/mysql
[root@CncLucZK mysql]# mkdir data

5.创建用户组以及用户和密码

[root@CncLucZK src]# groupadd mysql		#有些linux版本,mysql用户及用户组已存在

[root@CncLucZK src]# useradd -g mysql mysql

6.将安装包授权用户

[root@CncLucZK mysql]# chown -R mysql.mysql /usr/local/mysql
[root@CncLucZK local]# ll -d mysql
drwxr-xr-x 12 mysql mysql 4096 Nov  2 23:33 mysql
#配置环境,编辑/etc/profile文件
[root@CncLucZK ~]# vi /etc/profile
export PATH=$PATH:/usr/local/mysql/bin:/usr/local/mysql/lib


[root@CncLucZK ~]# source /etc/profile

注意:配置完环境变量后,需要执行source /etc/profile命令,使配置文件生效

7.切换到/usr/local/mysql/bin目录下,初始化基础信息

[root@CncLucZK local]# cd /usr/local/mysql/bin
[root@CncLucZK local]#./mysqld --user=mysql --basedir=/usr/local/mysql/ --datadir=/usr/local/mysql/data/ --lower-case-table-names=1 --initialize		#示表名不区分大小写

如果初始化中报错lc-messages-dir,则需要提前在/etc/my.cnf文件中添加以下配置

lc-messages=en_US
lc-messages-dir=/usr/local/mysql8/share/english/

然后再执行上述初始化指令:执行之前进入data目录,清空里面的文件数据

注意:MYSQL8以后,修改配置是无效的,如果缺少配置项,只能删除data目录,然后重新初始化

  • 得到临时密码
-datadir=/usr/local/mysql/data/ --lower-case-table-names=1 --initialize
2022-11-02T15:51:38.724390Z 0 [System] [MY-013169] [Server] /usr/local/mysql/bin/mysqld (mysqld 8.0.18) initializing of server in progress as process 107484
2022-11-02T15:51:42.990431Z 5 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: :s%tnwCcp6,,

在这里插入图片描述
8.在/etc/目录下编辑my.cnf配置文件,若my.cnf不存在,直接新增

[root@CncLucZK bin]# vi /etc/my.cnf
[mysql]
default-character-set=utf8mb4

[client]
port=3306       
default-character-set=utf8mb4 

[mysqld]
port=3306
user=mysql
max_connections=200  
max_connect_errors=10
basedir=/usr/local/mysql/
datadir=/usr/local/mysql/data/
socket=/tmp/mysql.sock
character-set-server=utf8mb4
default-storage-engine=INNODB
lower_case_table_names=1
general_log = 1
general_log_file= /var/log/mysql/mysql.log
innodb_data_home_dir=/usr/local/mysql/data
innodb_log_group_home_dir=/usr/local/mysql/data/
symbolic-links=0

#如果初始化中报错lc-messages-dir,则需要添加以下配置
lc-messages=en_US
lc-messages-dir=/usr/local/mysql/share/english/


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

9.退出bin目录,回到=/usr/local/mysql目录下,将mysqld服务复制到/etc/init.d目录下系统,使系统识别服务

[root@CncLucZK mysql]# cp -a ./support-files/mysql.server /etc/init.d/mysql
[root@CncLucZK mysql]# cp -a ./support-files/mysql.server /etc/init.d/mysqld

#若/etc/init.d/mysql文件没有x权限,需要授权
[root@CncLucZK mysql]# chmod +x /etc/init.d/mysql
[root@CncLucZK mysql]# chmod +x /etc/init.d/mysqld

[root@CncLucZK mysql]# ll -d /etc/init.d/mysql
-rwxr-xr-x 1 mysql mysql 10576 Sep 20  2019 /etc/init.d/mysql
[root@CncLucZK mysql]# ll /etc/init.d/mysqld
-rwxr-xr-x 1 mysql mysql 10576 Sep 20  2019 /etc/init.d/mysqld


#让源码包安装的mysql服务能被chkconfig命令管理,才能开机自启动
[root@CncLucZK mysql]# chkconfig --add mysql
[root@CncLucZK ~]# chkconfig --list | grep mysql		#3,5on确实是开机自启动
mysql          	0:off	1:off	2:on	3:on	4:on	5:on	6:off

10.启动mysql,查看启动状态,并将mysql命令添加到服务

#启动mysql
[root@CncLucZK mysql]# service mysql start
#查看运行启动状态
[root@CncLucZK mysql]# service mysql status
 SUCCESS! MySQL running (112228)
#将mysql命令添加到服务,建立链接
[root@CncLucZK mysql]# ln -s /usr/local/mysql/bin/mysql /usr/bin

如果发现启动失败,可以先查看data里面的mysql.log,如果有提示3306这样的字样,第一个想到的应该是端口被占用,使用lsof -i:端口号,查看是哪个PID(进程号)占用了该端口,然后使用kill PID(进程号)杀掉进程,重新执行service mysql start

11.登录mysql -uroot -p 密码使用之前随机生成的密码

在 vim /etc/my.cnf文件中,在[mysqld]的段中加上一句:skip-grant-tables –跳过密码验证

然后保存退出,重启MySQL服务

[root@CncLucZK bin]# mysql -uroot -p :s%tnwCcp6,,	#密码使用之前随机生成的密码

#若登录过程中缺少libncurses.so.5,libtinfo.so.5文件,则先find查询系统中是否有这两个包,然后建立链接
[root@CncLucZK bin]# ln -s /usr/lib64/libncurses.so.6 libncurses.so.5
[root@CncLucZK bin]# ln -s /usr/lib64/libtinfo.so.6 libtinfo.so.5
#进入数据库
mysql> USE mysql ; 
#修改root密码
mysql> alter user 'root'@'localhost' identified with mysql_native_password by '你的密码';
#修改远程连接并生效.
#root用户的localhost表示只允许本机访问,要实现远程连接,可以将用户的host改为%,表示允许任意主机访问,如果需要设置只允许特定ip访问,则应改为对应的ip。
mysql> update mysql.user set host="%" where user="root";
#刷新配置
mysql> flush privileges;

存在问题1:连接mysql数据库报错:

mysql: error while loading shared libraries: libncurses.so.5: cannot open shared object file: No such file or directory

问题原因:没有libncurses.so.5文件

解决办法:

  1. 查找系统中存在的libncurses.so不同版本的文件,使用命令
[root@CncLucZK bin]# find / -name libncurses*
...
/usr/lib64/libncurses.so.6.1
/usr/lib64/libncursesw.so
/usr/lib64/libncurses++w.so.6
/usr/lib64/libncurses++.so.6
/usr/lib64/libncurses++w.so.6.1
/usr/lib64/libncurses++.so.6.1
/usr/lib64/libncurses.so.6
/usr/lib64/libncursesw.so.6
/usr/lib64/libncurses++w.so
/usr/lib64/libncurses.so
/usr/lib64/libncurses++.so
/usr/lib64/libncursesw.so.6.1
..

2.建立链接

ln -s /usr/lib64/libncurses.so.6 libncurses.so.5

3.如果没有找到的话,使用yum或apt安装即可

12.查看端口

mysql> show global variables like 'port';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| port          | 3306  |
+---------------+-------+
1 row in set (0.01 sec)

#退出
mysql> exit

13.MySQL8创建新用户及授权方式

create user ‘test’@‘%’ identified by ‘123456’;
grant all privileges on *.* to ‘test’@‘%’;
flush privileges;

14.远程连接mysql数据库

  • 查询访问权限
mysql> select user,host from mysql.user;
+------------------+-----------+
| user             | host      |
+------------------+-----------+
| root             | %         |
| mysql.infoschema | localhost |
| mysql.session    | localhost |
| mysql.sys        | localhost |
+------------------+-----------+
4 rows in set (0.00 sec)
  • 若root用户的host是localhost表示只允许本机访问,要实现远程连接,可以将用户的host改为%,表示允许任意主机访问,如果需要设置只允许特定ip访问,则应改为对应的ip。修改root用户的host字段为%
mysql> update mysql.user set host='%' where user='root';
  • 刷新配置
mysql> flush privileges;
  • 开放端口号:

    • ****如果是物理服务器:****查询3306端口是否开放
firewall-cmd --query-port=3306/tcp

没有开放则添加3306端口

firewall-cmd --zone=public --add-port=3306/tcp --permanent

添加端口后刷新防火墙

firewall-cmd --reload
    • **如果是云服务器:**配置安全组入站访问规则,增加3306端口号。
      在这里插入图片描述
  • navicat测试能否连接
    在这里插入图片描述
    存在问题2:远程能否连接

  • 使用mysql8.0搭建起数据库之后,在本地连接mysql的时候遇到报错:Client does not support authtication protocol requested by server;consider upgrading mysql client ,我这里是用的navicat for mysql客户端。这是由于mysql8.0更新了加密规则,mysql8 之前的版本中加密规则是mysql_native_password,而在mysql8之后,加密规则是caching_sha2_password。而navicat当前版本还不支持最新的加密规则。

    • 可以在mysql的启动文件中配置加密规则
[mysqld]
default_authentication_plugin=mysql_native_password
    • 创建用户密码的时候指定加密规则,这个方便简单。
use mysql;	#选择数据库

create user '用户名'@'%' identified WITH mysql_native_password by '密码';

grant all privileges on 数据库名.* to '用户名'@'%' with grant option;

flush privileges;
    • 对于已经创建的用户修改一下加密规则即可。
ALTER USER '用户名'@'%' IDENTIFIED WITH mysql_native_password BY '密码';
FLUSH PRIVILEGES;
    • 另外记得之前在操作mysql8.0遇到不能直接使用grant privileges授权的同时创建用户,在8.0中这两步必须分开,即先创建用户然后再授权。常用的mysql相关配置如下(添加到mysql8中的/etc/my.cnf):
    [mysql]
    default-character-set=utf8mb4	
    
    [client]
    port=3306	#设置mysql客户端默认端口
    default-character-set=utf8mb4 #mysql客户端默认字符集
    
    [mysqld]
    port=3306	#端口
    user=mysql
    max_connections=200  # 允许最大连接数
    max_connect_errors=10 # 允许连接失败的次数
    character-set-server=utf8mb4  # 服务端默认字符集
    default-storage-engine=INNODB  # 创建表时默认存储引擎
    general_log = 1
    general_log_file= /var/log/mysql/mysql.log
    socket=/var/lib/mysql/mysql.sock
    lower_case_table_names=1
    basedir=/usr/local/mysql
    datadir=/usr/local/mysql/data
    #log-bin=/usr/local/mysql/data/mysql-bin
    innodb_data_home_dir=/usr/local/mysql/data
    innodb_log_group_home_dir=/usr/local/mysql/data/
    default_authentication_plugin=mysql_native_password # 默认使用加密规则
    sql_mode = ‘STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION‘
    symbolic-links=0
    #autocommit=1
    
    [mysqld_safe]
    log-error=/usr/local/mysql/data/mysql.log
    pid-file=/usr/local/mysql/data/mysql.pid
    
    • 最后使用systemctl status 和systemctl restart查看和重启mysql8。

      systemctl status mysqld.service
      systemctl restart mysqld.service
      
  • 存在问题3:在进入mysql命令行执行sql时,报错Ignoring query to other database,原因登录mysql时没有带u参数

[root@CncLucZK bin]# mysql -uroot -p

下一篇:Linux学习-84-安装PHP

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/123708.html

(0)
飞熊的头像飞熊bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!