目录

MySQL - 安装

序言

本内容是 MySQL-8.0.25 版本在云服务器的 Linux 系统下的安装步骤,Linux 系统为 CentOS 7,所以也会涉及到 systemctl 关于 MySQL 服务的管理。

# 前言

MySQL 是一款安全、跨平台、高效的,并与 PHP、Java 等主流编程语言紧密结合的数据库系统。该数据库系统是由瑞典的 MySQL AB 公司开发、发布并支持,由 MySQL 的初始开发人员 David Axmark 和 Michael Monty Widenius 于 1995 年建立的。

本内容是 MySQL-8.0.25 版本在 Linux 系统下的安装步骤,Linux 系统为 CentOS 7,所以也会涉及到 systemctl 关于 MySQL 服务的管理。

如果在 Windows 下载安装包:MySQL新版下载地址 (opens new window)

连接云服务器的 Linux 软件:Xshell 官网 (opens new window)

上传文件到云服务器的 Linux 软件:Xftp官网 (opens new window)

# 安装

# 安装条件

  • CentOs 7 会有默认的 mariadb 数据库,和 MySQL 有冲突,所以需要进行卸载

    先查询 mariadb 版本,再卸载:

    rpm -qa | grep mariadb 
    yum remove mariadb-libs.x86_64  # 你的版本不一定是 mariadb-libs.x86_64
    
    1
    2
  • 安装 MySQL 需要的依赖包 libaio

    yum install -y libaio
    
    1

# 下载压缩包

  • 如果需要在 Linux 里直接下载,先进入自定义安装目录(我的是 /opt/mysql),然后执行安装命令:

    cd /opt/mysql
    wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.25-linux-glibc2.12-x86_64.tar.gz
    
    1
    2

    这里需要修的是版本号,即 mysql-8.0.25,根据需求决定

  • Windows 上传安装包到 Linux,我就是这一步

    首先需要连接 Linux 的文件上传工具,我的是 Xftp

    在右侧 Linux 选择一个目录,在左侧 Windows 选择压缩包,右键弹出选择列表后,选择传输,即可传输压缩包到 Linux。

    image-20211105154727114

# 解压压缩包

进入 MySQL 传输目录,然后解压压缩包到 /usr/local,解压目录根据需求决定

cd /opt/mysql
tar xvf mysql-8.0.25-linux-glibc2.12-x86_64.tar.xz -C /usr/local
1
2

不用 zxvf 是因为我的 MySQL 压缩包是 .xz 而不是 .gz

前往 /usr/local 目录,我解压后的文件夹名为 mysql-8.0.25-linux-glibc2.12-x86_64,太长,需要修改名字为 mysql-8.0.25

cd /usr/local
mv mysql-8.0.25-linux-glibc2.12-x86_64 mysql-8.0.25
1
2

image-20211105155933746

# 创建 MySQL 组和用户

如果已经创建 MySQL 组和用户,无需这一步,没有则创建

cat /etc/group | grep mysql
cat /etc/passwd | grep mysql
 
#创建用户组
groupadd mysql  
 
#创建用户,并添加该用户到组中
useradd -g mysql mysql
 
#设置密码
passwd mysql
# 输入自定义密码
1
2
3
4
5
6
7
8
9
10
11
12

我试过不创建 MySQL 组和用户,结果无法启动 MySQL。

# data目录和权限

进入 MySQL 目录并创建 data 目录,其中 data 目录存放数据相关的数据,可自定义名字

cd /usr/local/mysql-8.0.25
mkdir data
1
2

赋 MySQL 目录权限给 MySQL 组和用户

chown -R mysql.mysql /usr/local/mysql-8.0.25
1

如果想给所有用户和组拥有 MySQL 的目录可读、可写、执行权限,则赋予权限

chmod -R 777 /usr/local/mysql-8.0.25
1

第一个 7 表示该文件夹的所有者获得所有权限,这里是 mysql 用户;

第二个 7 表示该文件夹的所有组获得所有权限,这里是 mysql 组;

第三个 7 表示其他用户获得所有权限,这里是非 mysql 组的用户。

我没有执行 777 命令,如果后期出现 权限问题,可以执行该命令。

# 初始化

  • 配置 my.cnf,这是核心配置文件,默认放在 /etc

    vim /etc/my.cnf
    
    1

    并添加如下配置





     

     


















    [mysqld]
    # 设置 3306 端口
    port=3306
    # 设置 mysql 的安装目录
    basedir=/usr/local/mysql-8.0.25
    # 设置mysql数据库的数据的存放目录
    datadir=/usr/local/mysql/data
    # 允许最大连接数
    max_connections=10000
    # 允许连接失败的次数。这是为了防止有人从该主机试图攻击数据库系统
    max_connect_errors=10
    # 服务端使用的字符集默认为 UTF8
    character-set-server=utf8
    # 创建新表时将使用的默认存储引擎
    default-storage-engine=INNODB
    # 默认使用“mysql_native_password”插件认证
    default_authentication_plugin=mysql_native_password
    [mysql]
    # 设置 mysql 客户端默认字符集
    default-character-set=utf8
    [client]
    # 设置 mysql 客户端连接服务端时默认使用的端口
    port=3306
    default-character-set=utf8
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24

    需要修改的内容是第 5 行和第 7 行:basedir 请填写自己的 MySQL 根目录,datadir请填写数据 data 目录路径,其他不变。

  • 进行 初始化 操作,并记住初始化密码,登录需要

    首先进入 MySQL 根目录下的 bin 目录,里面有个 mysqld 命令,拿来初始化

    cd /usr/local/mysql-8.0.25/bin
    ./mysqld --initialize
    
    1
    2

    记住初始化密码

    image-20211105162919004

# systemctl 管理服务

创建 systemctl 管理 MySQL 的配置文件:

  • 创建配置文件:

    vim /usr/lib/systemd/system/mysqld.service
    
    1

    systemctl 对配置文件的后缀名有所要求、这个文件的后缀名要是以 .service 结尾的;当然由于它默认可以省略后缀,所以你也可以不指定后缀名。

  • 配置文件填入如下内容:














     





    [Unit]
    Description=MySQL Server
    Documentation=man:mysqld(8)
    Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html
    After=network.target
    After=syslog.target
    
    [Install]
    WantedBy=multi-user.target
    
    [Service]
    User=mysql
    Group=mysql
    ExecStart=/usr/local/mysql-8.0.25/bin/mysqld --defaults-file=/etc/my.cnf
    LimitNOFILE = 5000
    #Restart=on-failure
    #RestartPreventExitStatus=1
    #PrivateTmp=false
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18

    这里面需要修改的是第 14 行:ExecStart 请改为自己的 MySQL 目录

  • 重新加载配置文件,让 systemctl 识别更新的内容

    systemctl daemon-reload
    
    1
  • 启动 MySQL 服务

    systemctl start mysqld
    ps -ef | grep mysql
    
    1
    2
  • 开机自启 MySQL 服务

    systemctl enable mysqld
    
    1

自此 MySQL 的服务由 systemctl 管理。

# 设置环境变量

每次登录 MySQL 都需要 bin 目录下的 mysql 命令。配置好环境变量,无论在哪里,都可以直接输入 mysql 进行登录。

进入环境变量文件,其他命令如果也要全局使用,也是如此配置

vi /etc/profile
1

去到最后一行,添加如下内容:MySQL 根目录下的 bin 目录

export PATH=$PATH:/usr/local/mysql-8.0.25/bin
1

重新载入文件

source /etc/profile 
1

# 登录并修改密码

配置好环境变量后,登录 MySQL

mysql -uroot -p
# 输入你的密码
1
2

修改密码

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '新密码';
1

# 远程连接配置

让其他地方能连接到你的 MySQL 服务器。

确保成功登录到 MySQL。

切换到 MySQL 数据库,并配置远程连接,并刷新重启:

use mysql
update user set host ='%' where user='root';
FLUSH PRIVILEGES;
1
2
3

# 问题

  1. 启动 MySQL 服务时,报错:

    /usr/local/mysql-8.0.25/bin/mysqld start
    [ERROR] Fatal error: Please read "Security" section of the manual to find out how to run mysqld as root!
    
    1
    2

    分析:此处 MySQL 是出于安全考虑,默认拒绝用 root 账号启动 MySQL 服务

    解决:

    1. 通过在命令后面加上 --user=root 进行强制使用root账号启动。这样是最快的

      /usr/local/mysql-8.0.25/bin/mysqld start --user=root
      
      1
    2. 登录到 mysql 用户,启动 MySQL 服务,需要在 my.cnf 文件的底部,添加 user=mysql

      vim /etc/my.cnf
      
      1

      image-20211105172231086

# 导入文件

不登录 MySQL

mysql -u userName -p dabaseName < /opt/mysql/fileName.sql
1

userName 为用户名

dabaseName 为数据库名

在 < 后填入 sql 文件所在的路径。

登录 MySQL

  • 登录到 MySQL

    mysql -u userName -p
    # 你的密码
    
    1
    2
  • 选择或者创建数据库

    create database glrepair;
    use glrepair;
    
    1
    2
  • 导入sql文件

    source /opt/mysql/fileName.sql
    
    1

    source 后填入 sql 文件所在的路径

# 导出文件

  • 导出整个数据库中的所有数据

    mysqldump -u userName -p dabaseName > fileName.sql
    
    1
  • 导出数据库中的某个表的数据

    mysqldump -u userName -p dabaseName tableName > fileName.sql
    
    1
  • 导出整个数据库中的所有的表结构

    mysqldump -u userName -p -d dabaseName > fileName.sql
    
    1
  • 导出整个数据库中某个表的表结构

    mysqldump -u userName -p -d dabaseName tableName > fileName.sql
    
    1

userName:用户名

dabaseName:数据库名

tableName:表名

fileName.sql 最好加上路径名

笔记

记得放行 MySQL 端口,即 3306 端口

更新时间: 2024/01/17, 05:48:13
最近更新
01
JVM调优
12-10
02
jenkins
12-10
03
Arthas
12-10
更多文章>