MySQL是一个关系型数据库管理系统,由瑞典MySQL AB公司开发,目前属于Oracle旗下产品。MySQL是业界最流行的RDBMS (Relational Database Management System,关系数据库管理系统)之一,尤其在WEB应用方面。
关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就加快了速度并提高了灵活性。
MySQL所使用的SQL语言是用于访问数据库的最常用标准化语言。MySQL软件采用了双授权模式,分为社区版和商业版,由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型网站的开发都选择MySQL作为网站数据库。
说明:以下环境配置仅为参考示例,具体配置视实际需求做配置
说明:测试环境下通常会关闭防火墙以避免部分网络因素影响,视实际需求做配置。
在root权限下停止防火墙。
# systemctl stop firewalld
例如示例命令如下:
[root@superman-21 ~]# systemctl stop firewalld
[root@superman-21 ~]#
在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 ~]#
永久关闭,在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 ~]#
临时关闭
# setenforce 0
说明:
即时生效,但重启后会自动开启。
例如示例命令如下:
[root@superman-21 ~]# setenforce 0
setenforce: SELinux is permissive
[root@superman-21 ~]#
说明:服务器环境下,为了系统安全,通常会为进程分配单独的用户,以实现权限隔离。本章节创建的组和用户都是操作系统层面的,不是数据库层面的。
在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 ~]#
在root权限下设置MySQL用户密码。
# passwd mysql
需要重复输入密码(根据实际需求设置密码)。
例如示例命令如下:
[root@superman-21 ~]# passwd mysql
更改用户 mysql 的密码 。
新的密码:
重新输入新的密码:
passwd:所有的身份验证令牌已经成功更新。
[root@superman-21 ~]#
说明:
进行性能测试时,数据目录使用单独硬盘,需要对硬盘进行格式化并挂载,参考方法一或者方法二
非性能测试时,在root权限下执行以下命令,创建数据目录即可。然后跳过本小节:# mkdir /data
创建分区(以/dev/sdb为例,根据实际情况创建)
# fdisk /dev/sdb
输入n,按回车确认。
输入p,按回车确认。
输入1,按回车确认。
采用默认配置,按回车确认。
采用默认配置,按回车确认。
输入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 ~]#
创建文件系统(以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 ~]#
创建“/data”文件夹以供操作系统挂载分区使用。
# mkdir /data
例如示例命令如下:
[root@superman-21 ~]# mkdir /data
[root@superman-21 ~]#
执行命令编辑“/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 ~]#
挂载数据盘。
# 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 ~]#
说明:此步骤需要安装镜像中的lvm2相关包,步骤如下:
配置本地yum源,详细信息请参考《openEuler 22.03-LTS 搭建repo服务器》。如果已经执行,则可跳过此步。
在root权限下执行命令安装lvm2。# yum install lvm2
创建物理卷(sdb为硬盘名称,具体名字以实际为准)。
# pvcreate /dev/sdb
例如示例命令如下:
[root@superman-21 ~]# pvcreate /dev/sdb
Physical volume "/dev/sdb" successfully created.
[root@superman-21 ~]#
创建物理卷组(其中datavg为创建的卷组名称,具体名字以实际规划为准)。
# vgcreate vg_data /dev/sdb
例如示例命令如下:
[root@superman-21 ~]# vgcreate vg_data /dev/sdb
Volume group "vg_data" successfully created
[root@superman-21 ~]#
创建逻辑卷(其中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 ~]#
创建文件系统。
# 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 ~]#
创建“/data”文件夹以供操作系统挂载分区使用。
# mkdir /data
例如示例命令如下:
[root@superman-21 ~]# mkdir /data
[root@superman-21 ~]#
执行命令编辑“/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 ~]#
挂载数据盘。
# 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 ~]#
在已创建的数据目录 /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]#
配置本地yum源,详细信息请参考《openEuler 22.03-LTS 搭建repo服务器》。
清除缓存。
# dnf clean all
例如示例命令如下:
[root@superman-21 ~]# dnf clean all
45 files removed
[root@superman-21 ~]#
创建缓存。
# 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 ~]#
在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 ~]#
查看安装后的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 ~]#
修改配置文件。
在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
确保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 ~]#
设置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 ~]#
在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”为初始密码。
启动数据库。
注意:如果第一次启动数据库服务,以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 ~]#
登录数据库。
说明:
# 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目录下。登录数据库的命令根据实际情况修改。
配置数据库帐号密码。
登录数据库以后,修改通过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>
创建全域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>
进行授权。
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 ~]#
在root权限下关闭数据库进程。
# systemctl stop mysqld
例如示例命令如下:
[root@superman-21 ~]# systemctl stop mysqld
[root@superman-21 ~]#
在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 ~]#
可以使用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>
可以使用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>
可以使用RENAME USER语句修改一个或多个已经存在的用户名。
RENAME USER 'oldusername'@'hostname' TO 'newusername'@'hostname';
其中:
oldusername:旧的用户名。
newusername:新的用户名。
hostname:主机名。
RENAME USER语句用于对原有的账号进行重命名。若系统中旧账号不存在或者新账号已存在,则该语句执行时会出现错误。
使用RENAME USER语句,必须拥有数据库的UPDATE权限或全局CREATE USER权限。
将用户名testuser1修改为testuser2,主机名为locahost。
mysql> RENAME USER 'testuser1'@'localhost' TO 'testuser2'@'localhost';
Query OK, 0 rows affected (0.00 sec)
mysql>
可以使用SET PASSWORD语句修改一个用户的登录密码。
SET PASSWORD FOR 'username'@'hostname' = 'newpassword';
其中:
FOR 'username'@'hostname':FOR字句,可选项,指定欲修改密码的用户名及主机名。
'newpassword':新密码。
在SET PASSWORD语句中,若不加上FOR子句,表示修改当前用户的密码。
FOR字句中必须以'username'@'hostname'的格式给定,username为账户的用户名,hostname为账户的主机名。
欲修改密码的账号必须在系统中存在,否则语句执行时会出现错误。
将用户名为testuser2的密码修改为0123456,主机名为locahost。
mysql> SET PASSWORD FOR 'testuser2'@'localhost' = '0123456';
Query OK, 0 rows affected (0.00 sec)
mysql>
可以使用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>
可以使用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>
可以使用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>
可以使用CREATE DATABASE语句来创建数据库。
CREATE DATABASE databasename;
其中:databasename为数据库名称,且数据库名称不区分大小写。
创建数据库名为testdb的数据库。
mysql> CREATE DATABASE testdb;
Query OK, 1 row affected (0.00 sec)
mysql>
可以使用SHOW DATABASES语句来查看数据库。
SHOW DATABASES;
查看所有数据库。
mysql> SHOW DATABASES;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
| testdb |
+--------------------+
5 rows in set (0.00 sec)
mysql>
一般创建表,查询表等操作首先需要选择一个目标数据库。可以使用USE语句来选择数据库。
USE databasename;
其中:databasename为数据库名称。
选择testdb数据库。
mysql> USE testdb;
Database changed
mysql>
可以使用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>
可以在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 ~]#
可以在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私房菜;如有侵权,请联系管理员删除。