ITPub博客

首页 > 数据库 > 数据库开发技术 > openEuler 22.03-LTS 搭建MySQL数据库服务器

openEuler 22.03-LTS 搭建MySQL数据库服务器

原创 数据库开发技术 作者:shuchaoyang 时间:2022-12-21 21:54:29 0 删除 编辑


1 软件介绍2 配置环境2.1 关闭防火墙并取消开机自启动2.2 修改SELINUX为disabled2.3 创建组和用户2.4 创建数据盘2.4.1 方法一:在root权限下使用fdisk进行磁盘管理2.4.1 方法二:在root权限下使用LVM进行磁盘管理2.5 创建数据库目录并且授权3 安装、运行和卸载3.1 安装3.2 运行3.3 卸载4 管理数据库用户4.1 创建用户示例4.2 查看用户示例4.3 修改用户4.3.1 修改用户名4.3.2 修改用户示例4.3.3 修改用户密码4.3.4 修改用户密码示例4.4 删除用户示例4.5 用户授权示例4.6 删除用户权限示例5 管理数据库5.1 创建数据库示例5.2 查看数据库示例5.3 选择数据库示例5.4 删除数据库示例5.5 备份数据库示例5.6 恢复数据库示例



1 软件介绍

MySQL是一个关系型数据库管理系统,由瑞典MySQL AB公司开发,目前属于Oracle旗下产品。MySQL是业界最流行的RDBMS (Relational Database Management System,关系数据库管理系统)之一,尤其在WEB应用方面。

关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就加快了速度并提高了灵活性。

MySQL所使用的SQL语言是用于访问数据库的最常用标准化语言。MySQL软件采用了双授权模式,分为社区版和商业版,由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型网站的开发都选择MySQL作为网站数据库。

2 配置环境

说明:以下环境配置仅为参考示例,具体配置视实际需求做配置

2.1 关闭防火墙并取消开机自启动

说明:测试环境下通常会关闭防火墙以避免部分网络因素影响,视实际需求做配置。

  1. 在root权限下停止防火墙。

    # systemctl stop firewalld

    例如示例命令如下:

    [root@superman-21 ~]# systemctl stop firewalld  
    [root@superman-21 ~]#
  2. 在root权限下关闭防火墙。

    # systemctl disable firewalld

    说明: 执行disable命令关闭防火墙的同时,也取消了开机自启动。

    例如示例命令如下:

    [root@superman-21 ~]# systemctl disable firewalld
    Removed /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
    Removed /etc/systemd/system/multi-user.target.wants/firewalld.service.
    [root@superman-21 ~]#

2.2 修改SELINUX为disabled

  1. 永久关闭,在root权限下修改配置文件。

    # sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux

    说明:

    重启后生效。

    例如示例命令如下:

    [root@superman-21 ~]# sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux
    [root@superman-21 ~]#
    [root@superman-21 ~]# cat /etc/sysconfig/selinux

    # This file controls the state of SELinux on the system.
    # SELINUX= can take one of these three values:
    #     enforcing - SELinux security policy is enforced.
    #     permissive - SELinux prints warnings instead of enforcing.
    #     disabled - No SELinux policy is loaded.
    SELINUX=disabled
    # SELINUXTYPE= can take one of these three values:
    #     targeted - Targeted processes are protected,
    #     minimum - Modification of targeted policy. Only selected processes are protected.
    #     mls - Multi Level Security protection.
    SELINUXTYPE=targeted


    [root@superman-21 ~]#
  2. 临时关闭

    # setenforce 0

    说明:

    即时生效,但重启后会自动开启。

    例如示例命令如下:

    [root@superman-21 ~]# setenforce 0
    setenforce: SELinux is permissive
    [root@superman-21 ~]#

2.3 创建组和用户

说明:服务器环境下,为了系统安全,通常会为进程分配单独的用户,以实现权限隔离。本章节创建的组和用户都是操作系统层面的,不是数据库层面的。

  1. 在root权限下创建MySQL用户(组)。

    # groupadd mysql
    # useradd -g mysql mysql

    例如示例命令如下:

    [root@superman-21 ~]# groupadd mysql
    [root@superman-21 ~]#
    [root@superman-21 ~]# useradd -g mysql mysql
    [root@superman-21 ~]#
  2. 在root权限下设置MySQL用户密码。

    # passwd mysql

    需要重复输入密码(根据实际需求设置密码)。

    例如示例命令如下:

    [root@superman-21 ~]# passwd mysql
    更改用户 mysql 的密码 。
    新的密码:
    重新输入新的密码:
    passwd:所有的身份验证令牌已经成功更新。
    [root@superman-21 ~]#

2.4 创建数据盘

说明:

  • 进行性能测试时,数据目录使用单独硬盘,需要对硬盘进行格式化并挂载,参考方法一或者方法二

  • 非性能测试时,在root权限下执行以下命令,创建数据目录即可。然后跳过本小节:# mkdir /data

2.4.1 方法一:在root权限下使用fdisk进行磁盘管理

  1. 创建分区(以/dev/sdb为例,根据实际情况创建)

    # fdisk /dev/sdb
  2. 输入n,按回车确认。

  3. 输入p,按回车确认。

  4. 输入1,按回车确认。

  5. 采用默认配置,按回车确认。

  6. 采用默认配置,按回车确认。

  7. 输入w,按回车保存。

    例如示例命令如下:

    [root@superman-21 ~]# fdisk /dev/sdb

    欢迎使用 fdisk (util-linux 2.37.2)。
    更改将停留在内存中,直到您决定将更改写入磁盘。
    使用写入命令前请三思。

    设备不包含可识别的分区表。
    创建了一个磁盘标识符为 0x9ac1f07b 的新 DOS 磁盘标签。

    命令(输入 m 获取帮助):n
    分区类型
      p   主分区 (0 primary, 0 extended, 4 free)
      e   扩展分区 (逻辑分区容器)
    选择 (默认 p):p
    分区号 (1-4, 默认  1): 1
    第一个扇区 (2048-41943039, 默认 2048):
    最后一个扇区,+/-sectors 或 +size{K,M,G,T,P} (2048-41943039, 默认 41943039):

    创建了一个新分区 1,类型为“Linux”,大小为 20 GiB。

    命令(输入 m 获取帮助):w
    分区表已调整。
    将调用 ioctl() 来重新读分区表。
    正在同步磁盘。

    [root@superman-21 ~]#
  8. 创建文件系统(以xfs为例,根据实际需求创建文件系统)

    # mkfs.xfs /dev/sdb1

    例如示例命令如下:

    [root@superman-21 ~]# mkfs.xfs /dev/sdb1
    meta-data=/dev/sdb1              isize=512    agcount=4, agsize=1310656 blks
            =                       sectsz=512   attr=2, projid32bit=1
            =                       crc=1        finobt=1, sparse=1, rmapbt=0
            =                       reflink=1    bigtime=0 inobtcount=0
    data     =                       bsize=4096   blocks=5242624, imaxpct=25
            =                       sunit=0      swidth=0 blks
    naming   =version 2              bsize=4096   ascii-ci=0, ftype=1
    log      =internal log           bsize=4096   blocks=2560, version=2
            =                       sectsz=512   sunit=0 blks, lazy-count=1
    realtime =none                   extsz=4096   blocks=0, rtextents=0
    [root@superman-21 ~]#
  9. 创建“/data”文件夹以供操作系统挂载分区使用。

    # mkdir /data

    例如示例命令如下:

    [root@superman-21 ~]# mkdir /data    
    [root@superman-21 ~]#
  10. 执行命令编辑“/etc/fstab”使重启后自动挂载数据盘。

    # echo "/dev/sdb1 /data                       xfs    defaults        1 1" >> /etc/fstab

    例如示例命令如下:

    [root@superman-21 ~]# cat /etc/fstab 

    #
    # /etc/fstab
    # Created by anaconda on Mon Nov 28 13:29:03 2022
    #
    # Accessible filesystems, by reference, are maintained under '/dev/disk/'.
    # See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info.
    #
    # After editing this file, run 'systemctl daemon-reload' to update systemd
    # units generated from this file.
    #
    /dev/mapper/vg00-lv_root /                       ext4   defaults        1 1
    UUID=70c4f6e0-20be-46f8-93ba-97c8083bc37a /boot                   ext4   defaults        1 2
    /dev/mapper/vg00-lv_swap none                   swap   defaults        0 0
    [root@superman-21 ~]#
    [root@superman-21 ~]# echo "/dev/sdb1 /data                       xfs   defaults       1 1" >> /etc/fstab
    [root@superman-21 ~]#
    [root@superman-21 ~]# cat /etc/fstab

    #
    # /etc/fstab
    # Created by anaconda on Mon Nov 28 13:29:03 2022
    #
    # Accessible filesystems, by reference, are maintained under '/dev/disk/'.
    # See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info.
    #
    # After editing this file, run 'systemctl daemon-reload' to update systemd
    # units generated from this file.
    #
    /dev/mapper/vg00-lv_root /                       ext4   defaults        1 1
    UUID=70c4f6e0-20be-46f8-93ba-97c8083bc37a /boot                   ext4   defaults        1 2
    /dev/mapper/vg00-lv_swap none                   swap   defaults        0 0
    /dev/sdb1 /data                       xfs   defaults        1 1
    [root@superman-21 ~]#
  11. 挂载数据盘。

    # mount -a

    例如示例命令如下:

    [root@superman-21 ~]# df -h
    文件系统                 容量 已用 可用 已用% 挂载点
    devtmpfs                  4.0M     0  4.0M    0% /dev
    tmpfs                     1.7G   12K  1.7G    1% /dev/shm
    tmpfs                     677M  9.1M 668M    2% /run
    tmpfs                     4.0M     0  4.0M    0% /sys/fs/cgroup
    /dev/mapper/vg00-lv_root   41G  2.9G   36G    8% /
    tmpfs                     1.7G     0  1.7G    0% /tmp
    /dev/sda1                 974M 249M 659M   28% /boot
    [root@superman-21 ~]#
    [root@superman-21 ~]# mount -a
    [root@superman-21 ~]#
    [root@superman-21 ~]# df -h
    文件系统                 容量 已用 可用 已用% 挂载点
    devtmpfs                  4.0M     0  4.0M    0% /dev
    tmpfs                     1.7G   12K  1.7G    1% /dev/shm
    tmpfs                     677M  9.1M 668M    2% /run
    tmpfs                     4.0M     0  4.0M    0% /sys/fs/cgroup
    /dev/mapper/vg00-lv_root   41G  2.9G   36G    8% /
    tmpfs                     1.7G     0  1.7G    0% /tmp
    /dev/sda1                 974M 249M 659M   28% /boot
    /dev/sdb1                 20G 175M   20G    1% /data
    [root@superman-21 ~]#

2.4.1 方法二:在root权限下使用LVM进行磁盘管理

说明:此步骤需要安装镜像中的lvm2相关包,步骤如下:

  1. 配置本地yum源,详细信息请参考《openEuler 22.03-LTS 搭建repo服务器》。如果已经执行,则可跳过此步。

  2. 在root权限下执行命令安装lvm2。# yum install lvm2

  1. 创建物理卷(sdb为硬盘名称,具体名字以实际为准)。

    # pvcreate /dev/sdb

    例如示例命令如下:

    [root@superman-21 ~]# pvcreate /dev/sdb
    Physical volume "/dev/sdb" successfully created.
    [root@superman-21 ~]#
  2. 创建物理卷组(其中datavg为创建的卷组名称,具体名字以实际规划为准)。

    # vgcreate vg_data /dev/sdb

    例如示例命令如下:

    [root@superman-21 ~]# vgcreate vg_data /dev/sdb
    Volume group "vg_data" successfully created
    [root@superman-21 ~]#
  3. 创建逻辑卷(其中600G为规划的逻辑卷大小,具体大小以实际情况为准;datalv为创建的逻辑卷的名字,具体名称以实际规划为准。)。

    # lvcreate -L 20476M -n lv_data vg_data

    例如示例命令如下:

    [root@superman-21 ~]# lvcreate -L 20476M -n lv_data vg_data 
    Logical volume "lv_data" created.
    [root@superman-21 ~]#
  4. 创建文件系统。

    # mkfs.xfs /dev/vg_data/lv_data

    例如示例命令如下:

    [root@superman-21 ~]# mkfs.xfs /dev/vg_data/lv_data
    meta-data=/dev/vg_data/lv_data   isize=512    agcount=4, agsize=1310464 blks
            =                       sectsz=512   attr=2, projid32bit=1
            =                       crc=1        finobt=1, sparse=1, rmapbt=0
            =                       reflink=1    bigtime=0 inobtcount=0
    data     =                       bsize=4096   blocks=5241856, imaxpct=25
            =                       sunit=0      swidth=0 blks
    naming   =version 2              bsize=4096   ascii-ci=0, ftype=1
    log      =internal log           bsize=4096   blocks=2560, version=2
            =                       sectsz=512   sunit=0 blks, lazy-count=1
    realtime =none                   extsz=4096   blocks=0, rtextents=0
    [root@superman-21 ~]#
  5. 创建“/data”文件夹以供操作系统挂载分区使用。

    # mkdir /data

    例如示例命令如下:

    [root@superman-21 ~]# mkdir /data    
    [root@superman-21 ~]#
  6. 执行命令编辑“/etc/fstab”使重启后自动挂载数据盘。

    # echo "/dev/vg_data/lv_data /data                       xfs    defaults        1 1" >> /etc/fstab

    例如示例命令如下:

    [root@superman-21 ~]# cat /etc/fstab 

    #
    # /etc/fstab
    # Created by anaconda on Mon Nov 28 13:29:03 2022
    #
    # Accessible filesystems, by reference, are maintained under '/dev/disk/'.
    # See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info.
    #
    # After editing this file, run 'systemctl daemon-reload' to update systemd
    # units generated from this file.
    #
    /dev/mapper/vg00-lv_root /                       ext4   defaults        1 1
    UUID=70c4f6e0-20be-46f8-93ba-97c8083bc37a /boot                   ext4   defaults        1 2
    /dev/mapper/vg00-lv_swap none                   swap   defaults        0 0
    [root@superman-21 ~]#
    [root@superman-21 ~]# echo "/dev/vg_data/lv_data /data                       xfs   defaults       1 1" >> /etc/fstab
    [root@superman-21 ~]#
    [root@superman-21 ~]# cat /etc/fstab

    #
    # /etc/fstab
    # Created by anaconda on Mon Nov 28 13:29:03 2022
    #
    # Accessible filesystems, by reference, are maintained under '/dev/disk/'.
    # See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info.
    #
    # After editing this file, run 'systemctl daemon-reload' to update systemd
    # units generated from this file.
    #
    /dev/mapper/vg00-lv_root /                       ext4   defaults        1 1
    UUID=70c4f6e0-20be-46f8-93ba-97c8083bc37a /boot                   ext4   defaults        1 2
    /dev/mapper/vg00-lv_swap none                   swap   defaults        0 0
    /dev/vg_data/lv_data /data                       xfs   defaults        1 1
    [root@superman-21 ~]#
  7. 挂载数据盘。

    # mount -a

    例如示例命令如下:

    [root@superman-21 ~]# df -h
    文件系统                 容量 已用 可用 已用% 挂载点
    devtmpfs                  4.0M     0  4.0M    0% /dev
    tmpfs                     1.7G   12K  1.7G    1% /dev/shm
    tmpfs                     677M  9.1M 668M    2% /run
    tmpfs                     4.0M     0  4.0M    0% /sys/fs/cgroup
    /dev/mapper/vg00-lv_root   41G  2.9G   36G    8% /
    tmpfs                     1.7G     0  1.7G    0% /tmp
    /dev/sda1                 974M 249M 659M   28% /boot
    [root@superman-21 ~]#
    [root@superman-21 ~]# mount -a
    [root@superman-21 ~]#
    [root@superman-21 ~]# df -h
    文件系统                     容量 已用 可用 已用% 挂载点
    devtmpfs                     4.0M     0  4.0M    0% /dev
    tmpfs                        1.7G   12K  1.7G    1% /dev/shm
    tmpfs                       677M  9.1M 668M    2% /run
    tmpfs                        4.0M     0  4.0M    0% /sys/fs/cgroup
    /dev/mapper/vg00-lv_root     41G  2.9G   36G    8% /
    tmpfs                        1.7G     0  1.7G    0% /tmp
    /dev/sda1                   974M 249M 659M   28% /boot
    /dev/mapper/vg_data-lv_data   20G 175M   20G    1% /data
    [root@superman-21 ~]#

2.5 创建数据库目录并且授权

在已创建的数据目录 /data 基础上,使用root权限继续创建进程所需的相关目录并授权MySQL用户(组)。

# mkdir -p /data/mysql
# cd /data/mysql
# mkdir data tmp run log
# chown -R mysql:mysql /data

例如示例命令如下:

[root@superman-21 ~]# mkdir -p /data/mysql
[root@superman-21 ~]#
[root@superman-21 ~]# cd /data/mysql
[root@superman-21 mysql]#
[root@superman-21 mysql]# mkdir data tmp run log
[root@superman-21 mysql]#
[root@superman-21 mysql]# chown -R mysql:mysql /data
[root@superman-21 mysql]#


3 安装、运行和卸载

3.1 安装

  1. 配置本地yum源,详细信息请参考《openEuler 22.03-LTS 搭建repo服务器》。

  2. 清除缓存。

    # dnf clean all

    例如示例命令如下:

    [root@superman-21 ~]# dnf clean all
    45 files removed
    [root@superman-21 ~]#
  3. 创建缓存。

    # dnf makecache

    例如示例命令如下:

    [root@superman-21 ~]# dnf makecache
    OS                                                                                           6.5 MB/s | 3.4 MB     00:00    
    everything                                                                                    18 MB/s |  16 MB     00:00    
    EPOL                                                                                         5.4 MB/s | 2.6 MB     00:00    
    debuginfo                                                                                    3.2 MB/s | 3.9 MB     00:01    
    source                                                                                       3.9 MB/s | 1.7 MB     00:00    
    update                                                                                        15 MB/s |  29 MB     00:01    
    Metadata cache created.
    [root@superman-21 ~]#
  4. 在root权限下安装mariadb服务器。

    # dnf install mysql-server

    例如示例命令如下:

    [root@superman-21 ~]# dnf install mysql-server
    Last metadata expiration check: 0:45:47 ago on 2022年12月21日 星期三 17时18分58秒.
    Dependencies resolved.
    ====================================================================================================================================
    Package                         Architecture             Version                               Repository                   Size
    ====================================================================================================================================
    Installing:
    mysql-server                     x86_64                   8.0.28-1.oe2203                       everything                    23 M
    Installing dependencies:
    mariadb-config                   x86_64                   4:10.5.16-1.oe2203                   update                       8.0 k
    mecab                           x86_64                   0.996-2.oe2203                       everything                   371 k
    mysql                           x86_64                   8.0.28-1.oe2203                       OS                            10 M
    mysql-common                     x86_64                   8.0.28-1.oe2203                       OS                            30 k
    mysql-errmsg                     x86_64                   8.0.28-1.oe2203                       everything                   545 k
    mysql-selinux                   noarch                   1.0.0-2.oe2203                       everything                    35 k
    protobuf-lite                   x86_64                   3.14.0-6.oe2203                       update                       217 k

    Transaction Summary
    ====================================================================================================================================
    Install  8 Packages

    Total download size: 35 M
    Installed size: 188 M
    Is this ok [y/N]: y
    Downloading Packages:
    (1/8): mysql-common-8.0.28-1.oe2203.x86_64.rpm                                                      241 kB/s |  30 kB     00:00    
    (2/8): mecab-0.996-2.oe2203.x86_64.rpm                                                              1.2 MB/s | 371 kB     00:00    
    (3/8): mysql-selinux-1.0.0-2.oe2203.noarch.rpm                                                      784 kB/s |  35 kB     00:00    
    (4/8): mysql-errmsg-8.0.28-1.oe2203.x86_64.rpm                                                      1.3 MB/s | 545 kB     00:00    
    (5/8): mariadb-config-10.5.16-1.oe2203.x86_64.rpm                                                   113 kB/s | 8.0 kB     00:00    
    (6/8): protobuf-lite-3.14.0-6.oe2203.x86_64.rpm                                                     1.2 MB/s | 217 kB     00:00    
    (7/8): mysql-8.0.28-1.oe2203.x86_64.rpm                                                             7.6 MB/s |  10 MB     00:01    
    (8/8): mysql-server-8.0.28-1.oe2203.x86_64.rpm                                                      5.1 MB/s |  23 MB     00:04    
    ------------------------------------------------------------------------------------------------------------------------------------
    Total                                                                                               7.1 MB/s |  35 MB     00:04    
    Running transaction check
    Transaction check succeeded.
    Running transaction test
    Transaction test succeeded.
    Running transaction
    Preparing       :                                                                                                            1/1
    Installing       : mariadb-config-4:10.5.16-1.oe2203.x86_64                                                                   1/8
    Installing       : mysql-common-8.0.28-1.oe2203.x86_64                                                                        2/8
    Installing       : mysql-8.0.28-1.oe2203.x86_64                                                                               3/8
    Installing       : mysql-errmsg-8.0.28-1.oe2203.x86_64                                                                        4/8
    Installing       : protobuf-lite-3.14.0-6.oe2203.x86_64                                                                       5/8
    Running scriptlet: mysql-selinux-1.0.0-2.oe2203.noarch                                                                        6/8
    Installing       : mysql-selinux-1.0.0-2.oe2203.noarch                                                                        6/8
    Running scriptlet: mysql-selinux-1.0.0-2.oe2203.noarch                                                                        6/8
    libsemanage.semanage_direct_install_info: Overriding mysql module at lower priority 100 with module at priority 200.

    Installing       : mecab-0.996-2.oe2203.x86_64                                                                                7/8
    Running scriptlet: mecab-0.996-2.oe2203.x86_64                                                                                7/8
    Running scriptlet: mysql-server-8.0.28-1.oe2203.x86_64                                                                        8/8
    Installing       : mysql-server-8.0.28-1.oe2203.x86_64                                                                        8/8
    Running scriptlet: mysql-server-8.0.28-1.oe2203.x86_64                                                                        8/8
    Running scriptlet: mysql-selinux-1.0.0-2.oe2203.noarch                                                                        8/8
    Running scriptlet: mysql-server-8.0.28-1.oe2203.x86_64                                                                        8/8
    /usr/lib/tmpfiles.d/pesign.conf:1: Line references path below legacy directory /var/run/, updating /var/run/pesign → /run/pesign; please update the tmpfiles.d/ drop-in file accordingly.

    Verifying       : mysql-8.0.28-1.oe2203.x86_64                                                                               1/8
    Verifying       : mysql-common-8.0.28-1.oe2203.x86_64                                                                        2/8
    Verifying       : mecab-0.996-2.oe2203.x86_64                                                                                3/8
    Verifying       : mysql-errmsg-8.0.28-1.oe2203.x86_64                                                                        4/8
    Verifying       : mysql-selinux-1.0.0-2.oe2203.noarch                                                                        5/8
    Verifying       : mysql-server-8.0.28-1.oe2203.x86_64                                                                        6/8
    Verifying       : mariadb-config-4:10.5.16-1.oe2203.x86_64                                                                   7/8
    Verifying       : protobuf-lite-3.14.0-6.oe2203.x86_64                                                                       8/8

    Installed:
    mariadb-config-4:10.5.16-1.oe2203.x86_64     mecab-0.996-2.oe2203.x86_64               mysql-8.0.28-1.oe2203.x86_64            
    mysql-common-8.0.28-1.oe2203.x86_64           mysql-errmsg-8.0.28-1.oe2203.x86_64       mysql-selinux-1.0.0-2.oe2203.noarch    
    mysql-server-8.0.28-1.oe2203.x86_64           protobuf-lite-3.14.0-6.oe2203.x86_64    

    Complete!
    [root@superman-21 ~]#
  5. 查看安装后的rpm包。

    # rpm -qa | grep mysql

    例如示例命令如下:

    [root@superman-21 ~]# rpm -qa | grep mysql
    mysql-server-8.0.28-1.oe2203.x86_64
    mysql-selinux-1.0.0-2.oe2203.noarch
    mysql-errmsg-8.0.28-1.oe2203.x86_64
    mysql-common-8.0.28-1.oe2203.x86_64
    mysql-8.0.28-1.oe2203.x86_64
    [root@superman-21 ~]#

3.2 运行

  1. 修改配置文件。

    1. 在root权限下创建my.cnf文件,其中文件路径(包括软件安装路径basedir、数据路径datadir等)根据实际情况修改。

      # vi /etc/my.cnf

      编辑my.cnf内容如下:

      log-error=/data/mysql/log/mysqlerr.log
      pid-file=/data/mysql/run/mysqld.pid
      [mysqldump]
      quick
      [mysql]
      no-auto-rehash
      [client]
      default-character-set=utf8
      [mysqld]
      basedir=/usr/share/mysql
      socket=/data/mysql/run/mysql.sock
      tmpdir=/data/mysql/tmp
      datadir=/data/mysql/data
      lc-messages-dir=/usr/share/mysql
      authentication_policy=mysql_native_password
      port=3306
      user=mysql
    2. 确保my.cnf配置文件修改正确。

      # cat /etc/my.cnf

      注意:其中basedir为软件安装路径,请根据实际情况修改。

      例如示例命令如下:

      [root@superman-21 ~]# cat /etc/my.cnf
      [mysqld_safe]
      log-error=/data/mysql/log/mysqlerr.log
      pid-file=/data/mysql/run/mysqld.pid
      [mysqldump]
      quick
      [mysql]
      no-auto-rehash
      [client]
      default-character-set=utf8
      [mysqld]
      basedir=/usr/share/mysql
      socket=/data/mysql/run/mysql.sock
      tmpdir=/data/mysql/tmp
      datadir=/data/mysql/data
      lc-messages-dir=/usr/share/mysql
      authentication_policy=mysql_native_password
      port=3306
      user=mysql
      [root@superman-21 ~]#
    3. 设置socket软连接。

      # ln -s /data/mysql/run/mysql.sock /var/lib/mysql/mysql.sock

      例如示例命令如下:

      [root@superman-21 ~]# ln -s /data/mysql/run/mysql.sock /var/lib/mysql/mysql.sock
      [root@superman-21 ~]#
  2. 在root权限下初始化数据库。

    说明:本步骤倒数第2行中有初始密码,请注意保存,登录数据库时需要使用。

    # mysqld --defaults-file=/etc/my.cnf --initialize

    例如示例命令如下:

    [root@superman-21 ~]# mysqld --defaults-file=/etc/my.cnf --initialize
    2022-12-21T11:46:52.711486Z 0 [System] [MY-013169] [Server] /usr/libexec/mysqld (mysqld 8.0.28) initializing of server in progress as process 9296
    2022-12-21T11:46:52.719415Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started.
    2022-12-21T11:46:52.929564Z 1 [System] [MY-013577] [InnoDB] InnoDB initialization has ended.
    2022-12-21T11:46:53.791786Z 6 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: +KmMm/t/q8x4
    [root@superman-21 ~]#

    查看打印信息,打印信息中包括“initializing of server has completed”表示初始化数据库完成,且打印信息中“A temporary password is generated for root@localhost: +KmMm/t/q8x4”的“+KmMm/t/q8x4”为初始密码。

  3. 启动数据库。

    注意:如果第一次启动数据库服务,以root用户启动数据库,则启动时会提示缺少mysql.log文件而导致失败。使用mysql用户启动之后,会在/data/mysql/log目录下生成mysql.log文件,再次使用root用户启动则不会报错。

    在root权限下启动MySQL数据库。

    # systemctl start mysqld

    例如示例命令如下:

    [root@superman-21 ~]# systemctl start mysqld 
    [root@superman-21 ~]#
    [root@superman-21 ~]# systemctl status mysqld
    ● mysqld.service - MySQL 8.0 database server
        Loaded: loaded (/usr/lib/systemd/system/mysqld.service; disabled; vendor preset: disabled)
        Active: active (running) since Wed 2022-12-21 19:51:29 CST; 6s ago
      Process: 9349 ExecStartPre=/usr/libexec/mysql-check-socket (code=exited, status=0/SUCCESS)
      Process: 9372 ExecStartPre=/usr/libexec/mysql-prepare-db-dir mysqld.service (code=exited, status=0/SUCCESS)
      Main PID: 9408 (mysqld)
        Status: "Server is operational"
        Tasks: 38 (limit: 21420)
        Memory: 362.6M
        CGroup: /system.slice/mysqld.service
                └─ 9408 /usr/libexec/mysqld --basedir=/usr

    12月 21 19:51:20 superman-21 systemd[1]: Starting MySQL 8.0 database server...
    12月 21 19:51:24 superman-21 mysqld[9408]: 2022-12-21T11:51:24.402543Z 0 [System] [MY-010116] [Server] /usr/libexec/mysqld (mysqld >
    12月 21 19:51:24 superman-21 mysqld[9408]: 2022-12-21T11:51:24.447428Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has st>
    12月 21 19:51:28 superman-21 mysqld[9408]: 2022-12-21T11:51:28.034838Z 1 [System] [MY-013577] [InnoDB] InnoDB initialization has en>
    12月 21 19:51:29 superman-21 mysqld[9408]: 2022-12-21T11:51:29.808010Z 0 [Warning] [MY-010068] [Server] CA certificate ca.pem is se>
    12月 21 19:51:29 superman-21 mysqld[9408]: 2022-12-21T11:51:29.808074Z 0 [System] [MY-013602] [Server] Channel mysql_main configure>
    12月 21 19:51:29 superman-21 mysqld[9408]: 2022-12-21T11:51:29.830258Z 0 [System] [MY-010931] [Server] /usr/libexec/mysqld: ready f>
    12月 21 19:51:29 superman-21 mysqld[9408]: 2022-12-21T11:51:29.830320Z 0 [System] [MY-011323] [Server] X Plugin ready for connectio>
    12月 21 19:51:29 superman-21 systemd[1]: Started MySQL 8.0 database server.
    [root@superman-21 ~]#
  4. 登录数据库。

    说明:

    # mysql -uroot -p

    例如示例命令如下:

    [root@superman-21 ~]# mysql -uroot -p                                           
    Enter password:
    Welcome to the MySQL monitor. Commands end with ; or \g.
    Your MySQL connection id is 8
    Server version: 8.0.28

    Copyright (c) 2000, 2022, Oracle and/or its affiliates.

    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>
  • 提示输入密码时,请输入2产生的初始密码。

  • 如果采用官网RPM安装方式,则mysql文件在/usr/bin目录下。登录数据库的命令根据实际情况修改。

  • 配置数据库帐号密码。

    1. 登录数据库以后,修改通过root用户登录数据库的密码。

      mysql> alter user 'root'@'localhost' identified by "123456";

      例如示例命令如下:

      mysql> alter user 'root'@'localhost' identified by "123456";
      Query OK, 0 rows affected (0.01 sec)

      mysql>
    2. 创建全域root用户(允许root从其他服务器访问)。

      mysql> create user 'root'@'%' identified by '123456';

      例如示例命令如下:

      mysql> create user 'root'@'%' identified by '123456';
      Query OK, 0 rows affected (0.00 sec)

      mysql>
    3. 进行授权。

      mysql> grant all privileges on *.* to 'root'@'%';
      mysql> flush privileges;

      例如示例命令如下:

      mysql> grant all privileges on *.* to 'root'@'%';
      Query OK, 0 rows affected (0.01 sec)

      mysql> flush privileges;
      Query OK, 0 rows affected (0.00 sec)

      mysql>
  • 退出数据库。

    执行 \q 或者 exit 退出数据库。

    mysql> \q
    mysql> exit

    例如示例命令如下:

    mysql> \q
    Bye
    [root@superman-21 ~]#
    mysql> exit
    Bye
    [root@superman-21 ~]#
  • 3.3 卸载

    1. 在root权限下关闭数据库进程。

      # systemctl stop mysqld

      例如示例命令如下:

      [root@superman-21 ~]# systemctl stop mysqld
      [root@superman-21 ~]#
    2. 在root权限下执行dnf remove mysql命令卸载MySQL。

      # dnf remove mysql

      例如示例命令如下:

      [root@superman-21 ~]# dnf remove mysql
      Dependencies resolved.
      ====================================================================================================================================
      Package                         Architecture             Version                             Repository                     Size
      ====================================================================================================================================
      Removing:
      mysql                           x86_64                   8.0.28-1.oe2203                     @OS                            59 M
      Removing dependent packages:
      mysql-server                     x86_64                   8.0.28-1.oe2203                     @everything                   117 M
      Removing unused dependencies:
      mariadb-config                   x86_64                   4:10.5.16-1.oe2203                   @update                       345  
      mecab                           x86_64                   0.996-2.oe2203                       @everything                   2.1 M
      mysql-common                     x86_64                   8.0.28-1.oe2203                     @OS                           185 k
      mysql-errmsg                     x86_64                   8.0.28-1.oe2203                     @everything                   9.1 M
      mysql-selinux                   noarch                   1.0.0-2.oe2203                       @everything                    49 k
      protobuf-lite                   x86_64                   3.14.0-6.oe2203                     @update                       779 k

      Transaction Summary
      ====================================================================================================================================
      Remove  8 Packages

      Freed space: 188 M
      Is this ok [y/N]: y
      Running transaction check
      Transaction check succeeded.
      Running transaction test
      Transaction test succeeded.
      Running transaction
      Preparing       :                                                                                                            1/1
      Running scriptlet: mysql-server-8.0.28-1.oe2203.x86_64                                                                        1/1
      Running scriptlet: mysql-server-8.0.28-1.oe2203.x86_64                                                                        1/8
      Erasing         : mysql-server-8.0.28-1.oe2203.x86_64                                                                        1/8
      Running scriptlet: mysql-server-8.0.28-1.oe2203.x86_64                                                                        1/8
      Erasing         : mysql-errmsg-8.0.28-1.oe2203.x86_64                                                                        2/8
      Erasing         : mysql-8.0.28-1.oe2203.x86_64                                                                               3/8
      Erasing         : mysql-common-8.0.28-1.oe2203.x86_64                                                                        4/8
      Erasing         : mariadb-config-4:10.5.16-1.oe2203.x86_64                                                                   5/8
      警告:/etc/my.cnf 已另存为 /etc/my.cnf.rpmsave

      Erasing         : mysql-selinux-1.0.0-2.oe2203.noarch                                                                        6/8
      Running scriptlet: mysql-selinux-1.0.0-2.oe2203.noarch                                                                        6/8
      libsemanage.semanage_direct_remove_key: mysql module at priority 100 is now active.

      Erasing         : mecab-0.996-2.oe2203.x86_64                                                                                7/8
      Running scriptlet: mecab-0.996-2.oe2203.x86_64                                                                                7/8
      Erasing         : protobuf-lite-3.14.0-6.oe2203.x86_64                                                                       8/8
      Running scriptlet: protobuf-lite-3.14.0-6.oe2203.x86_64                                                                       8/8
      Verifying       : mariadb-config-4:10.5.16-1.oe2203.x86_64                                                                   1/8
      Verifying       : mecab-0.996-2.oe2203.x86_64                                                                                2/8
      Verifying       : mysql-8.0.28-1.oe2203.x86_64                                                                               3/8
      Verifying       : mysql-common-8.0.28-1.oe2203.x86_64                                                                        4/8
      Verifying       : mysql-errmsg-8.0.28-1.oe2203.x86_64                                                                        5/8
      Verifying       : mysql-selinux-1.0.0-2.oe2203.noarch                                                                        6/8
      Verifying       : mysql-server-8.0.28-1.oe2203.x86_64                                                                        7/8
      Verifying       : protobuf-lite-3.14.0-6.oe2203.x86_64                                                                       8/8

      Removed:
      mariadb-config-4:10.5.16-1.oe2203.x86_64     mecab-0.996-2.oe2203.x86_64               mysql-8.0.28-1.oe2203.x86_64            
      mysql-common-8.0.28-1.oe2203.x86_64           mysql-errmsg-8.0.28-1.oe2203.x86_64       mysql-selinux-1.0.0-2.oe2203.noarch    
      mysql-server-8.0.28-1.oe2203.x86_64           protobuf-lite-3.14.0-6.oe2203.x86_64    

      Complete!
      [root@superman-21 ~]#


    4 管理数据库用户

    4.1 创建用户

    可以使用CREATE USER语句来创建一个或多个用户,并设置相应的口令。

    CREATE USER 'username'@'hostname' IDENTIFIED BY 'password';

    其中:

    • username:用户名。

    • hostname:主机名,即用户连接数据库时所在的主机的名字。若是本地用户可用localhost,若在创建的过程中,未指定主机名,则主机名默认为“%”,表示一组主机。

    • password:用户的登陆密码,密码可以为空,如果为空则该用户可以不需要密码登陆服务器,但从安全的角度而言,不推荐这种做法。

    使用CREATE USER语句必须拥有数据库的INSERT权限或全局CREATE USER权限。

    使用CREATE USER语句创建一个用户账号后,会在系统自身的数据库的user表中添加一条新记录。若创建的账户已经存在,则语句执行时会出现错误。

    新创建的用户拥有的权限很少,只允许进行不需要权限的操作,如使用SHOW语句查询所有存储引擎和字符集的列表等。

    示例

    创建密码为123456,用户名为testuser1的本地用户。

    mysql> CREATE USER 'testuser1'@'localhost' IDENTIFIED BY '123456';
    Query OK, 0 rows affected (0.01 sec)

    mysql>

    创建密码为123456,用户名为testuser2,主机名为192.168.0.100的用户。

    mysql> CREATE USER 'testuser2'@'192.168.0.100' IDENTIFIED BY '123456';
    Query OK, 0 rows affected (0.00 sec)

    mysql>

    4.2 查看用户

    可以使用SHOW GRANTS语句或SELECT语句查看一个或多个用户。

    查看特定用户:

    SHOW GRANTS [FOR 'username'@'hostname'];
    SELECT USER,HOST,PASSWORD FROM mysql.user WHERE USER='username';

    查看所有用户:

    SELECT USER,HOST FROM mysql.user;

    其中:

    • username:用户名。

    • hostname:主机名。

    示例

    查看testuser1用户。

    mysql> SHOW GRANTS FOR 'testuser1'@'localhost';
    +-----------------------------------------------+
    | Grants for testuser1@localhost               |
    +-----------------------------------------------+
    | GRANT USAGE ON *.* TO `testuser1`@`localhost` |
    +-----------------------------------------------+
    1 row in set (0.00 sec)

    mysql>

    查看mysql数据库中所有用户。

    mysql> SELECT USER,HOST FROM mysql.user;
    +------------------+---------------+
    | USER             | HOST         |
    +------------------+---------------+
    | root             | %             |
    | testuser2       | 192.168.0.100 |
    | mysql.infoschema | localhost     |
    | mysql.session   | localhost     |
    | mysql.sys       | localhost     |
    | root             | localhost     |
    | testuser1       | localhost     |
    +------------------+---------------+
    7 rows in set (0.00 sec)

    mysql>

    4.3 修改用户

    4.3.1 修改用户名

    可以使用RENAME USER语句修改一个或多个已经存在的用户名。

    RENAME USER 'oldusername'@'hostname' TO 'newusername'@'hostname';

    其中:

    • oldusername:旧的用户名。

    • newusername:新的用户名。

    • hostname:主机名。

    RENAME USER语句用于对原有的账号进行重命名。若系统中旧账号不存在或者新账号已存在,则该语句执行时会出现错误。

    使用RENAME USER语句,必须拥有数据库的UPDATE权限或全局CREATE USER权限。

    4.3.2 修改用户示例

    将用户名testuser1修改为testuser2,主机名为locahost。

    mysql> RENAME USER 'testuser1'@'localhost' TO 'testuser2'@'localhost';
    Query OK, 0 rows affected (0.00 sec)

    mysql>

    4.3.3 修改用户密码

    可以使用SET PASSWORD语句修改一个用户的登录密码。

    SET PASSWORD FOR 'username'@'hostname' = 'newpassword';

    其中:

    • FOR 'username'@'hostname':FOR字句,可选项,指定欲修改密码的用户名及主机名。

    • 'newpassword':新密码。

    在SET PASSWORD语句中,若不加上FOR子句,表示修改当前用户的密码。

    FOR字句中必须以'username'@'hostname'的格式给定,username为账户的用户名,hostname为账户的主机名。

    欲修改密码的账号必须在系统中存在,否则语句执行时会出现错误。

    4.3.4 修改用户密码示例

    将用户名为testuser2的密码修改为0123456,主机名为locahost。

    mysql> SET PASSWORD FOR 'testuser2'@'localhost' = '0123456';
    Query OK, 0 rows affected (0.00 sec)

    mysql>

    4.4 删除用户

    可以使用DROP USER语句来删除一个或多个用户账号以及相关的权限。

    DROP USER 'username1'@'hostname1' [,'username2'@'hostname2']…;

    注意:用户的删除不会影响他们之前所创建的表、索引或其他数据库对象,因为数据库并不会记录创建了这些对象的账号。

    DROP USER语句可用于删除一个或多个数据库账号,并删除其原有权限。

    使用DROP USER语句必须拥有数据库的DELETE权限或全局CREATE USER权限。

    在DROP USER语句的使用中,若没有明确地给出账号的主机名,则该主机名默认为“%”。

    示例

    删除用户名为userexample的本地用户。

    mysql> DROP USER 'testuser2'@'localhost';
    Query OK, 0 rows affected (0.00 sec)

    mysql>

    4.5 用户授权

    可以使用GRANT语句来对新建用户的授权。

    GRANT privileges ON databasename.tablename TO 'username'@'hostname';

    其中:

    • ON字句:用于指定权限授予的对象和级别。

    • privileges:用户的操作权限,如SELECT,INSERT,UPDATE等,如果要授予所有的权限则使用ALL。

    • databasename:数据库名。

    • tablename:表名。

    • TO字句:用来设定用户密码,以及指定被赋予权限的用户。

    • username:用户名。

    • hostname:主机名。

    如果要授予该用户对所有数据库和表的相应操作权限则可用表示,如.*。

    如果在TO子句中给系统中存在的用户指定密码,则新密码会将原密码覆盖。

    如果权限被授予给一个不存在的用户,则会自动执行一条CREATE USER语句来创建这个用户,但同时必须为该用户指定密码。

    示例

    对本地用户userexample授予SELECT和INSERT权限。

    mysql> GRANT SELECT,INSERT ON *.* TO 'testuser2'@'192.168.0.100'; 
    Query OK, 0 rows affected (0.00 sec)

    mysql>

    4.6 删除用户权限

    可以使用REVOKE语句来删除一个用户的权限,但此用户不会被删除。

    REVOKE privilege ON databasename.tablename FROM 'username'@'hostname';

    其中REVOKE语句的参数与GRANT语句的参数含义相同。

    要使用 REVOKE 语句,必须拥有数据库的全局CREATE USER权限或UPDATE权限。

    示例

    删除本地用户testuser2的INSERT权限。

    mysql> REVOKE INSERT ON *.* FROM 'testuser2'@'192.168.0.100';
    Query OK, 0 rows affected (0.00 sec)

    mysql>


    5 管理数据库

    5.1 创建数据库

    可以使用CREATE DATABASE语句来创建数据库。

    CREATE DATABASE databasename;

    其中:databasename为数据库名称,且数据库名称不区分大小写。

    示例

    创建数据库名为testdb的数据库。

    mysql> CREATE DATABASE testdb;
    Query OK, 1 row affected (0.00 sec)

    mysql>

    5.2 查看数据库

    可以使用SHOW DATABASES语句来查看数据库。

    SHOW DATABASES;

    示例

    查看所有数据库。

    mysql> SHOW DATABASES;
    +--------------------+
    | Database           |
    +--------------------+
    | information_schema |
    | mysql             |
    | performance_schema |
    | sys               |
    | testdb             |
    +--------------------+
    5 rows in set (0.00 sec)

    mysql>

    5.3 选择数据库

    一般创建表,查询表等操作首先需要选择一个目标数据库。可以使用USE语句来选择数据库。

    USE databasename;

    其中:databasename为数据库名称。

    示例

    选择testdb数据库。

    mysql> USE testdb;
    Database changed
    mysql>

    5.4 删除数据库

    可以使用DROP DATABASE语句来删除数据库。

    注意:删除数据库要谨慎操作,一旦删除,数据库中的所有表和数据都会删除。

    DROP DATABASE databasename;

    其中:databasename为数据库名称。

    DROP DATABASE命令用于删除创建过(已存在)的数据库,且会删除数据库中的所有表,但数据库的用户权限不会自动删除。

    要使用DROP DATABASE,您需要数据库的DROP权限。

    DROP SCHEMA是DROP DATABASE的同义词。

    示例

    删除testdb数据库。

    mysql> DROP DATABASE testdb;
    Query OK, 0 rows affected (0.00 sec)

    mysql>

    5.5 备份数据库

    可以在root权限下使用mysqldump命令备份数据库。

    备份一个或多个表:

    # mysqldump [options] databasename [tablename ...] > outfile

    备份一个或多个库:

    # mysqldump [options] -databases databasename ... > outfile

    备份所有库:

    # mysqldump [options] -all-databases > outputfile

    其中:

    • databasename:数据库名称。

    • tablename:数据表名称。

    • outfile:数据库备份的文件。

    • options:mysqldump命令参数选项,多个参数之间可以使用空格分隔。常用的mysqldump命令参数选项如下:

      • -u, --user= username :指定用户名。

      • -p, --password[= password]:指定密码。

      • -P, --port= portnumber :指定端口。

      • -h, --host= hostname :指定主机名。

      • -r, --result-file= filename :将导出结果保存到指定的文件中,等同于“>”。

      • -t:只备份数据。

      • -d:只备份表结构。

    示例

    备份主机为192.168.0.21,端口为3306,root用户下的所有数据库到alldb.sql中。

    [root@superman-21 ~]# mysqldump -h 192.168.0.21 -P 3306 -uroot -p123456 --all-databases > alldb.sql
    mysqldump: [Warning] Using a password on the command line interface can be insecure.
    [root@superman-21 ~]#

    备份主机为192.168.0.21,端口为3306,root用户下的db1数据库到db1.sql中。

    [root@superman-21 ~]# mysqldump -h 192.168.0.21 -P 3306 -uroot -p123456 --databases db1 > db1.sql
    mysqldump: [Warning] Using a password on the command line interface can be insecure.
    [root@superman-21 ~]#

    备份主机为192.168.0.21,端口为3306,root用户下的db1数据库的tb1表到db1tb1.sql中。

    [root@superman-21 ~]# mysqldump -h 192.168.0.21 -P 3306 -uroot -p123456 db1 tb1 > db1tb1.sql
    mysqldump: [Warning] Using a password on the command line interface can be insecure.
    [root@superman-21 ~]#

    只备份主机为192.168.0.21,端口为3306,root用户下的db1数据库的表结构到db1_str.sql中。

    [root@superman-21 ~]# mysqldump -h 192.168.0.21 -P 3306 -uroot -p123456 -d db1 > db1_str.sql
    mysqldump: [Warning] Using a password on the command line interface can be insecure.
    [root@superman-21 ~]#

    只备份主机为192.168.0.21,端口为3306,root用户下的db1数据库的数据到db1.sql中。

    [root@superman-21 ~]# mysqldump -h 192.168.0.21 -P 3306 -uroot -p123456 -t db1 > db1_data.sql
    mysqldump: [Warning] Using a password on the command line interface can be insecure.
    [root@superman-21 ~]#

    5.6 恢复数据库

    可以在root权限下使用mysql命令恢复数据库。

    恢复一个或多个表:

    # mysql -h hostname -P portnumber -u username -ppassword databasename < infile

    其中:

    • hostname:主机名。

    • portnumber:端口号。

    • username:用户名。

    • password:密码。

    • databasename:数据库名。

    • infile:mysqldump命令中的outfile参数。

    示例

    恢复数据库。

    [root@superman-21 ~]# mysql -h 192.168.0.21 -P 3306 -uroot -p123456 -t db1 < db1_data.sql
    mysql: [Warning] Using a password on the command line interface can be insecure.
    [root@superman-21 ~]# 


    有什么吐槽或反馈意见,直接告诉我!

    温馨提示:如出现二维码失效也可直接添加微信号:ysc13803862469。

    原文作者:超哥的IT私房菜;如有侵权,请联系管理员删除。

    请登录后发表评论 登录
    全部评论
    专注于IT系统集成、运维、架构二十年的IT职场老兵,拥有CCNA、OCA、OCP、PGCA、PGCE认证证书,公众号:超哥的IT私房菜,知识星球:超哥的IT私房菜,目前是多家IT厂商的咨询顾问。

    注册时间:2021-08-27

    • 博文量
      552
    • 访问量
      303480