MariaDB数据库管理系统是MySQL的一个分支,主要由开源社区在维护,采用GPL授权许可。MariaDB的目的是完全兼容MySQL,包括API和命令行,使之能轻松成为MySQL的代替品,MariaDB还提供了许多更好的新特性。
MariaDB的架构如图1所示。
图 1 MariaDB逻辑架构
当Mariadb接受到Sql语句时,其详细的执行过程如下:
当客户端连接到mariadb的时候,会认证客户端的主机名、用户、密码,认证功能可以做成插件。
如果登录成功,客户端发送sql命令到服务端。由解析器解析sql语句。
服务端检查客户端是否有权限去获取它想要的资源。
如果查询已经存储在query cache当中,那么结果立即返回。
优化器将会找出最快的执行策略,或者是执行计划,也就是说优化器可以决定什么表将会被读,以及哪些索引会被访问,哪些临时表会被使用,一个好的策略能够减少大量的磁盘访问和排序操作等。
存储引擎读写数据和索引文件,cache用来加速这些操作,其他的诸如事物和外键特性,都是在存储引擎层处理的。
存储引擎在物理层管控数据,它负责数据文件、数据、索引、cache等的管理,这使得管理和读取数据变得更高效,每一张表,都有一个.frm文件,这些文件包含着表的定义。
每一个存储引擎管理、存储数据的方式都是不同的,所支持的特性和性能也不尽相同。例如:
MyISAM,适合读多写少的环境,且不支持事务,支持全文索引等。
innoDB,支持事务,支持行锁和外键等。
MEMORY,将数据存储在内存当中。
CSV,将数据存储为CSV格式。
说明:以下环境配置仅为参考示例,具体配置视实际需求做配置。
说明:测试环境下通常会关闭防火墙以避免部分网络因素影响,视实际需求做配置。
在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/mariadb
# cd /data/mariadb
# mkdir data tmp run log
# chown -R mysql:mysql /data
例如示例命令如下:
[root@superman-21 ~]# mkdir -p /data/mariadb
[root@superman-21 ~]#
[root@superman-21 ~]# cd /data/mariadb
[root@superman-21 mariadb]#
[root@superman-21 mariadb]# mkdir data tmp run log
[root@superman-21 mariadb]#
[root@superman-21 mariadb]# chown -R mysql:mysql /data
[root@superman-21 mariadb]#
配置本地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 mariadb-server
例如示例命令如下:
[root@superman-21 ~]# dnf install mariadb-server
Last metadata expiration check: 0:01:18 ago on 2022年12月19日 星期一 21时18分58秒.
Dependencies resolved.
=============================================================================================================================
Package Architecture Version Repository Size
=============================================================================================================================
Installing:
mariadb-server x86_64 4:10.5.16-1.oe2203 update 18 M
Installing dependencies:
mariadb x86_64 4:10.5.16-1.oe2203 update 6.0 M
mariadb-common x86_64 4:10.5.16-1.oe2203 update 27 k
mariadb-config x86_64 4:10.5.16-1.oe2203 update 8.0 k
mariadb-errmsg x86_64 4:10.5.16-1.oe2203 update 231 k
mysql-selinux noarch 1.0.0-2.oe2203 everything 35 k
perl-DBD-MariaDB x86_64 1.21-3.oe2203 OS 122 k
perl-DBI x86_64 1.643-3.oe2203 update 462 k
Installing weak dependencies:
mariadb-backup x86_64 4:10.5.16-1.oe2203 update 6.6 M
mariadb-gssapi-server x86_64 4:10.5.16-1.oe2203 update 14 k
mariadb-server-utils x86_64 4:10.5.16-1.oe2203 update 1.1 M
Transaction Summary
=============================================================================================================================
Install 11 Packages
Total download size: 32 M
Installed size: 168 M
Is this ok [y/N]: y
Downloading Packages:
(1/11): mysql-selinux-1.0.0-2.oe2203.noarch.rpm 286 kB/s | 35 kB 00:00
(2/11): perl-DBD-MariaDB-1.21-3.oe2203.x86_64.rpm 617 kB/s | 122 kB 00:00
(3/11): mariadb-common-10.5.16-1.oe2203.x86_64.rpm 648 kB/s | 27 kB 00:00
(4/11): mariadb-config-10.5.16-1.oe2203.x86_64.rpm 205 kB/s | 8.0 kB 00:00
(5/11): mariadb-errmsg-10.5.16-1.oe2203.x86_64.rpm 2.7 MB/s | 231 kB 00:00
(6/11): mariadb-gssapi-server-10.5.16-1.oe2203.x86_64.rpm 328 kB/s | 14 kB 00:00
(7/11): mariadb-server-10.5.16-1.oe2203.x86_64.rpm 15 MB/s | 18 MB 00:01
(8/11): mariadb-server-utils-10.5.16-1.oe2203.x86_64.rpm 4.4 MB/s | 1.1 MB 00:00
(9/11): perl-DBI-1.643-3.oe2203.x86_64.rpm 8.9 MB/s | 462 kB 00:00
(10/11): mariadb-backup-10.5.16-1.oe2203.x86_64.rpm 2.9 MB/s | 6.6 MB 00:02
(11/11): mariadb-10.5.16-1.oe2203.x86_64.rpm 2.3 MB/s | 6.0 MB 00:02
-----------------------------------------------------------------------------------------------------------------------------
Total 12 MB/s | 32 MB 00:02
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transaction
Preparing : 1/1
Running scriptlet: perl-DBI-1.643-3.oe2203.x86_64 1/11
Installing : perl-DBI-1.643-3.oe2203.x86_64 1/11
Running scriptlet: perl-DBI-1.643-3.oe2203.x86_64 1/11
Installing : mariadb-config-4:10.5.16-1.oe2203.x86_64 2/11
Installing : mariadb-common-4:10.5.16-1.oe2203.x86_64 3/11
Installing : mariadb-errmsg-4:10.5.16-1.oe2203.x86_64 4/11
Installing : perl-DBD-MariaDB-1.21-3.oe2203.x86_64 5/11
Running scriptlet: mysql-selinux-1.0.0-2.oe2203.noarch 6/11
Installing : mysql-selinux-1.0.0-2.oe2203.noarch 6/11
Running scriptlet: mysql-selinux-1.0.0-2.oe2203.noarch 6/11
libsemanage.semanage_direct_install_info: Overriding mysql module at lower priority 100 with module at priority 200.
Installing : mariadb-4:10.5.16-1.oe2203.x86_64 7/11
Installing : mariadb-backup-4:10.5.16-1.oe2203.x86_64 8/11
Installing : mariadb-gssapi-server-4:10.5.16-1.oe2203.x86_64 9/11
Running scriptlet: mariadb-server-4:10.5.16-1.oe2203.x86_64 10/11
Installing : mariadb-server-4:10.5.16-1.oe2203.x86_64 10/11
Running scriptlet: mariadb-server-4:10.5.16-1.oe2203.x86_64 10/11
Installing : mariadb-server-utils-4:10.5.16-1.oe2203.x86_64 11/11
Running scriptlet: mysql-selinux-1.0.0-2.oe2203.noarch 11/11
Running scriptlet: mariadb-server-utils-4:10.5.16-1.oe2203.x86_64 11/11
/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 : perl-DBD-MariaDB-1.21-3.oe2203.x86_64 1/11
Verifying : mysql-selinux-1.0.0-2.oe2203.noarch 2/11
Verifying : mariadb-4:10.5.16-1.oe2203.x86_64 3/11
Verifying : mariadb-backup-4:10.5.16-1.oe2203.x86_64 4/11
Verifying : mariadb-common-4:10.5.16-1.oe2203.x86_64 5/11
Verifying : mariadb-config-4:10.5.16-1.oe2203.x86_64 6/11
Verifying : mariadb-errmsg-4:10.5.16-1.oe2203.x86_64 7/11
Verifying : mariadb-gssapi-server-4:10.5.16-1.oe2203.x86_64 8/11
Verifying : mariadb-server-4:10.5.16-1.oe2203.x86_64 9/11
Verifying : mariadb-server-utils-4:10.5.16-1.oe2203.x86_64 10/11
Verifying : perl-DBI-1.643-3.oe2203.x86_64 11/11
Installed:
mariadb-4:10.5.16-1.oe2203.x86_64 mariadb-backup-4:10.5.16-1.oe2203.x86_64
mariadb-common-4:10.5.16-1.oe2203.x86_64 mariadb-config-4:10.5.16-1.oe2203.x86_64
mariadb-errmsg-4:10.5.16-1.oe2203.x86_64 mariadb-gssapi-server-4:10.5.16-1.oe2203.x86_64
mariadb-server-4:10.5.16-1.oe2203.x86_64 mariadb-server-utils-4:10.5.16-1.oe2203.x86_64
mysql-selinux-1.0.0-2.oe2203.noarch perl-DBD-MariaDB-1.21-3.oe2203.x86_64
perl-DBI-1.643-3.oe2203.x86_64
Complete!
[root@superman-21 ~]#
查看安装后的rpm包。
# rpm -qa | grep mariadb
例如示例命令如下:
[root@superman-21 ~]# rpm -qa | grep mariadb
mariadb-errmsg-10.5.16-1.oe2203.x86_64
mariadb-common-10.5.16-1.oe2203.x86_64
mariadb-gssapi-server-10.5.16-1.oe2203.x86_64
mariadb-server-utils-10.5.16-1.oe2203.x86_64
mariadb-backup-10.5.16-1.oe2203.x86_64
mariadb-10.5.16-1.oe2203.x86_64
mariadb-server-10.5.16-1.oe2203.x86_64
mariadb-config-10.5.16-1.oe2203.x86_64
mariadb-connector-c-3.1.13-2.oe2203.x86_64
[root@superman-21 ~]#
设置mariadb数据库配置文件。
/etc/my.cnf的[client-server]下添加socket,[mysqld]下添加datadir、log-error,pid-file、socket;
/etc/my.cnf.d/mariadb-server.cnf的[mysqld]下添加datadir、log-error,pid-file、socket
# vi /etc/my.cnf
例如示例命令如下:
[root@superman-21 ~]# cat /etc/my.cnf
#
# This group is read both both by the client and the server
# use it for options that affect everything
#
[client-server]
socket = /data/mariadb/tmp/mysql.sock
#
# This group is read by the server
#
[mysqld]
datadir = /data/mariadb/data
log-error = /data/mariadb/log/mariadberr.log
pid-file = /data/mariadb/run/mariadb.pid
socket = /data/mariadb/tmp/mysql.sock
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
#
# include all files from the config directory
#
!includedir /etc/my.cnf.d
[root@superman-21 ~]#
[root@superman-21 ~]# cat /etc/my.cnf.d/mariadb-server.cnf
#
# These groups are read by MariaDB server.
# Use it for options that only the server (but not clients) should see
#
# See the examples of server my.cnf files in /usr/share/mysql/
#
# this is read by the standalone daemon and embedded servers
[server]
# this is only for the mysqld standalone daemon
# Settings user and group are ignored when systemd is used.
# If you need to run mysqld under a different user or group,
# customize your systemd unit file for mysqld/mariadb according to the
# instructions in http://fedoraproject.org/wiki/Systemd
[mysqld]
datadir = /data/mariadb/data
log-error = /data/mariadb/log/mariadberr.log
pid-file = /data/mariadb/run/mariadb.pid
socket = /data/mariadb/tmp/mysql.sock
#
# * Galera-related settings
#
[galera]
# Mandatory settings
#wsrep_on=ON
#wsrep_provider=
#wsrep_cluster_address=
#binlog_format=row
#default_storage_engine=InnoDB
#innodb_autoinc_lock_mode=2
#
# Allow server to accept connections on all interfaces.
#
#bind-address=0.0.0.0
#
# Optional setting
#wsrep_slave_threads=1
#innodb_flush_log_at_trx_commit=0
# this is only for embedded server
[embedded]
# This group is only read by MariaDB servers, not by MySQL.
# If you use the same .cnf file for MySQL and MariaDB,
# you can put MariaDB-only options here
[mariadb]
# This group is only read by MariaDB-10.5 servers.
# If you use the same .cnf file for MariaDB of different versions,
# use this group for options that older servers don't understand
[mariadb-10.5]
[root@superman-21 ~]#
在root权限下启动mariadb服务器。
# systemctl start mariadb
例如示例命令如下:
[root@superman-21 ~]# systemctl start mariadb.service
[root@superman-21 ~]#
[root@superman-21 ~]# ll /data/mariadb/data/
总用量 122920
-rw-rw---- 1 mysql mysql 24576 12月 20 17:03 aria_log.00000001
-rw-rw---- 1 mysql mysql 52 12月 20 17:03 aria_log_control
-rw-rw---- 1 mysql mysql 972 12月 20 17:03 ib_buffer_pool
-rw-rw---- 1 mysql mysql 12582912 12月 20 17:03 ibdata1
-rw-rw---- 1 mysql mysql 100663296 12月 20 17:03 ib_logfile0
-rw-rw---- 1 mysql mysql 12582912 12月 20 17:03 ibtmp1
-rw-rw---- 1 mysql mysql 0 12月 20 17:03 multi-master.info
drwx------ 2 mysql mysql 4096 12月 20 17:03 mysql
-rw-rw---- 1 mysql mysql 16 12月 20 17:03 mysql_upgrade_info
drwx------ 2 mysql mysql 20 12月 20 17:03 performance_schema
[root@superman-21 ~]#
[root@superman-21 ~]# ll /data/mariadb/log/
总用量 4
-rw-rw---- 1 mysql mysql 1578 12月 20 17:03 mariadberr.log
[root@superman-21 ~]#
[root@superman-21 ~]# ll /data/mariadb/run/
总用量 4
-rw-rw---- 1 mysql mysql 5 12月 20 17:03 mariadb.pid
[root@superman-21 ~]#
[root@superman-21 ~]# ll /data/mariadb/tmp/
总用量 0
srwxrwxrwx 1 mysql mysql 0 12月 20 17:03 mysql.sock
[root@superman-21 ~]#
设置socket软连接。
# ln -s /data/mariadb/tmp/mysql.sock /var/lib/mysql/mysql.sock
例如示例命令如下:
[root@superman-21 ~]# ln -s /data/mariadb/tmp/mysql.sock /var/lib/mysql/mysql.sock
[root@superman-21 ~]#
在root权限下安全初始化数据库。
# /usr/bin/mysql_secure_installation
命令执行过程中需要输入数据库的root设置的密码,若没有密码则直接按“Enter”。然后根据提示及实际情况进行设置。
例如示例命令如下:
[root@superman-21 ~]# /usr/bin/mysql_secure_installation
NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
SERVERS IN PRODUCTION USE! PLEASE READ EACH STEP CAREFULLY!
In order to log into MariaDB to secure it, we'll need the current
password for the root user. If you've just installed MariaDB, and
haven't set the root password yet, you should just press enter here.
Enter current password for root (enter for none):
OK, successfully used password, moving on...
Setting the root password or using the unix_socket ensures that nobody
can log into the MariaDB root user without the proper authorisation.
You already have your root account protected, so you can safely answer 'n'.
Switch to unix_socket authentication [Y/n] n
... skipping.
You already have your root account protected, so you can safely answer 'n'.
Change the root password? [Y/n] Y
New password:
Re-enter new password:
Password updated successfully!
Reloading privilege tables..
... Success!
By default, a MariaDB installation has an anonymous user, allowing anyone
to log into MariaDB without having to have a user account created for
them. This is intended only for testing, and to make the installation
go a bit smoother. You should remove them before moving into a
production environment.
Remove anonymous users? [Y/n] Y
... Success!
Normally, root should only be allowed to connect from 'localhost'. This
ensures that someone cannot guess at the root password from the network.
Disallow root login remotely? [Y/n] Y
... Success!
By default, MariaDB comes with a database named 'test' that anyone can
access. This is also intended only for testing, and should be removed
before moving into a production environment.
Remove test database and access to it? [Y/n] Y
- Dropping test database...
... Success!
- Removing privileges on test database...
... Success!
Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.
Reload privilege tables now? [Y/n] Y
... Success!
Cleaning up...
All done! If you've completed all of the above steps, your MariaDB
installation should now be secure.
Thanks for using MariaDB!
[root@superman-21 ~]#
登录数据库。
# mysql -u root -p
命令执行后提示输入密码。密码为4中设置的密码。
说明:执行 \q 或者 exit 可退出数据库。
例如示例命令如下:
[root@superman-21 ~]# mysql -u root -p
Enter password:
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 11
Server version: 10.5.16-MariaDB MariaDB Server
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]>
MariaDB [(none)]> \q
Bye
[root@superman-21 ~]#
[root@superman-21 ~]# mysql -u root -p
Enter password:
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 12
Server version: 10.5.16-MariaDB MariaDB Server
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]> exit
Bye
[root@superman-21 ~]#
在root权限下关闭数据库进程。
# ps -ef | grep mysql
# kill -9 进程ID
在root权限下执行dnf remove mariadb-server命令卸载mariadb。
# dnf remove mariadb-server
可以使用CREATE USER语句来创建一个或多个用户,并设置相应的口令。
CREATE USER 'username'@'hostname' IDENTIFIED BY 'password';
其中:
username:用户名。
hostname:主机名,即用户连接数据库时所在的主机的名字。若是本地用户可用localhost,若在创建的过程中,未指定主机名,则主机名默认为“%”,表示一组主机。
password:用户的登陆密码,密码可以为空,如果为空则该用户可以不需要密码登陆服务器,但从安全的角度而言,不推荐这种做法。
使用CREATE USER语句必须拥有数据库的INSERT权限或全局CREATE USER权限。
使用CREATE USER语句创建一个用户账号后,会在系统自身的数据库的user表中添加一条新记录。若创建的账户已经存在,则语句执行时会出现错误。
新创建的用户拥有的权限很少,只允许进行不需要权限的操作,如使用SHOW语句查询所有存储引擎和字符集的列表等。
例如示例命令如下:
创建密码为123456,用户名为testuser1的本地用户。
MariaDB [(none)]> CREATE USER 'testuser1'@'localhost' IDENTIFIED BY '123456';
Query OK, 0 rows affected (0.001 sec)
MariaDB [(none)]>
创建密码为123456,用户名为testuser2,主机名为192.168.0.100的用户。
MariaDB [(none)]> CREATE USER 'testuser2'@'192.168.0.100' IDENTIFIED BY '123456';
Query OK, 0 rows affected (0.001 sec)
MariaDB [(none)]>
可以使用SHOW GRANTS语句或SELECT语句查看一个或多个用户。
查看特定用户:
SHOW GRANTS [FOR 'username'@'hostname'];
SELECT USER,HOST,PASSWORD FROM mysql.user WHERE USER='username';
查看所有用户:
SELECT USER,HOST,PASSWORD FROM mysql.user;
其中:
username:用户名。
hostname:主机名。
例如示例命令如下:
查看testuser1用户。
MariaDB [(none)]> SHOW GRANTS FOR 'testuser1'@'localhost';
+------------------------------------------------------------------------------------------------------------------+
| Grants for testuser1@localhost |
+------------------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO `testuser1`@`localhost` IDENTIFIED BY PASSWORD '*6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9' |
+------------------------------------------------------------------------------------------------------------------+
1 row in set (0.000 sec)
MariaDB [(none)]>
查看mysql数据库中所有用户。
MariaDB [(none)]> SELECT USER,HOST,PASSWORD FROM mysql.user;
+-------------+---------------+-------------------------------------------+
| User | Host | Password |
+-------------+---------------+-------------------------------------------+
| mariadb.sys | localhost | |
| root | localhost | *E20F17D9FA1E9A6203D3EA047C3A949897E6A01D |
| mysql | localhost | invalid |
| testuser1 | localhost | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
| testuser2 | 192.168.0.100 | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
+-------------+---------------+-------------------------------------------+
5 rows in set (0.001 sec)
MariaDB [(none)]>
可以使用RENAME USER语句修改一个或多个已经存在的用户名。
RENAME USER 'oldusername'@'hostname' TO 'newusername'@'hostname';
其中:
oldusername:旧的用户名。
newusername:新的用户名。
hostname:主机名。
RENAME USER语句用于对原有的账号进行重命名。若系统中旧账号不存在或者新账号已存在,则该语句执行时会出现错误。
使用RENAME USER语句,必须拥有数据库的UPDATE权限或全局CREATE USER权限。
将用户名testuser1修改为testuser2,主机名为locahost。
MariaDB [(none)]> RENAME USER 'testuser1'@'localhost' TO 'testuser2'@'localhost';
Query OK, 0 rows affected (0.001 sec)
MariaDB [(none)]>
可以使用SET PASSWORD语句修改一个用户的登录密码。
SET PASSWORD FOR 'username'@'hostname' = PASSWORD('newpassword');
其中:
FOR 'username'@'hostname':FOR字句,可选项,指定欲修改密码的用户名及主机名。
PASSWORD('newpassword'):表示使用函数PASSWORD()设置新口令,即新口令必须传递到函数PASSWORD()中进行加密。
注意:PASSWORD()函数为单向加密函数,一旦加密后不能解密出原明文。
在SET PASSWORD语句中,若不加上FOR子句,表示修改当前用户的密码。
FOR字句中必须以'username'@'hostname'的格式给定,username为账户的用户名,hostname为账户的主机名。
欲修改密码的账号必须在系统中存在,否则语句执行时会出现错误。
将用户名为testuser2的密码修改为0123456,主机名为locahost。
MariaDB [(none)]> SET PASSWORD FOR 'testuser2'@'localhost' = PASSWORD('0123456') ;
Query OK, 0 rows affected (0.001 sec)
MariaDB [(none)]>
可以使用DROP USER语句来删除一个或多个用户账号以及相关的权限。
DROP USER 'username1'@'hostname1' [,'username2'@'hostname2']…;
注意:用户的删除不会影响他们之前所创建的表、索引或其他数据库对象,因为数据库并不会记录创建了这些对象的账号。
DROP USER语句可用于删除一个或多个数据库账号,并删除其原有权限。
使用DROP USER语句必须拥有数据库的DELETE权限或全局CREATE USER权限。
在DROP USER语句的使用中,若没有明确地给出账号的主机名,则该主机名默认为“%”。
例如示例命令如下:
删除用户名为testuser2的本地用户。
MariaDB [(none)]> DROP USER 'testuser2'@'localhost';
Query OK, 0 rows affected (0.001 sec)
MariaDB [(none)]>
可以使用GRANT语句来对新建用户的授权。
GRANT privileges ON databasename.tablename TO 'username'@'hostname';
其中:
ON字句:用于指定权限授予的对象和级别。
privileges:用户的操作权限,如SELECT,INSERT,UPDATE等,如果要授予所有的权限则使用ALL。
databasename:数据库名。
tablename:表名。
TO字句:用来设定用户密码,以及指定被赋予权限的用户。
username:用户名。
hostname:主机名。
如果要授予该用户对所有数据库和表的相应操作权限则可用表示,如.*。
如果在TO子句中给系统中存在的用户指定密码,则新密码会将原密码覆盖。
如果权限被授予给一个不存在的用户,则会自动执行一条CREATE USER语句来创建这个用户,但同时必须为该用户指定密码。
例如示例命令如下:
对本地用户testuser2授予SELECT和INSERT权限。
MariaDB [(none)]> GRANT SELECT,INSERT ON *.* TO 'testuser2'@'192.168.0.100';
Query OK, 0 rows affected (0.001 sec)
MariaDB [(none)]>
可以使用REVOKE语句来删除一个用户的权限,但此用户不会被删除。
REVOKE privilege ON databasename.tablename FROM 'username'@'hostname';
其中REVOKE语句的参数与GRANT语句的参数含义相同。
要使用 REVOKE 语句,必须拥有数据库的全局CREATE USER权限或UPDATE权限。
例如示例命令如下:
删除本地用户testuser2的INSERT权限。
MariaDB [(none)]> REVOKE INSERT ON *.* FROM 'testuser2'@'192.168.0.100';
Query OK, 0 rows affected (0.001 sec)
MariaDB [(none)]>
可以使用CREATE DATABASE语句来创建数据库。
CREATE DATABASE databasename;
其中:databasename为数据库名称,且数据库名称不区分大小写。
例如示例命令如下:
创建数据库名为testdb的数据库。
MariaDB [(none)]> CREATE DATABASE testdb;
Query OK, 1 row affected (0.000 sec)
MariaDB [(none)]>
可以使用SHOW DATABASES语句来查看数据库。
SHOW DATABASES;
例如示例命令如下:
查看所有数据库。
MariaDB [(none)]> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| testdb |
+--------------------+
4 rows in set (0.000 sec)
MariaDB [(none)]>
一般创建表,查询表等操作首先需要选择一个目标数据库。可以使用USE语句来选择数据库。
USE databasename;
其中:databasename为数据库名称。
例如示例命令如下:
选择testdb数据库。
MariaDB [(none)]> USE testdb;
Database changed
MariaDB [testdb]>
可以使用DROP DATABASE语句来删除数据库。
注意:删除数据库要谨慎操作,一旦删除,数据库中的所有表和数据都会删除。
DROP DATABASE databasename;
其中:databasename为数据库名称。
DROP DATABASE命令用于删除创建过(已存在)的数据库,且会删除数据库中的所有表,但数据库的用户权限不会自动删除。
要使用DROP DATABASE,您需要数据库的DROP权限。
DROP SCHEMA是DROP DATABASE的同义词。
例如示例命令如下:
删除testdb数据库。
MariaDB [testdb]> DROP DATABASE testdb;
Query OK, 0 rows affected (0.001 sec)
MariaDB [(none)]>
可以在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中。
# mysqldump -h 192.168.0.21 -P 3306 -uroot -p123456 --all-databases > alldb.sql
备份主机为192.168.0.21,端口为3306,root用户下的db1数据库到db1.sql中。
# mysqldump -h 192.168.0.21 -P 3306 -uroot -p123456 --databases db1 > db1.sql
备份主机为192.168.0.21,端口为3306,root用户下的db1数据库的tb1表到db1tb1.sql中。
# mysqldump -h 192.168.0.21 -P 3306 -uroot -p123456 db1 tb1 > db1tb1.sql
只备份主机为192.168.0.21,端口为3306,root用户下的db1数据库的表结构到db1_str.sql中。
# mysqldump -h 192.168.0.21 -P 3306 -uroot -p123456 -d db1 > db1_str.sql
只备份主机为192.168.0.21,端口为3306,root用户下的db1数据库的数据到db1_data.sql中。
# mysqldump -h 192.168.0.21 -P 3306 -uroot -p123456 -t db1 > db1_data.sql
可以在root权限下使用mysql命令恢复数据库。
恢复一个或多个表:
# mysql -h hostname -P portnumber -u username -ppassword databasename < infile
其中:
hostname:主机名。
portnumber:端口号。
username:用户名。
password:密码。
databasename:数据库名。
infile:mysqldump命令中的outfile参数。
例如示例命令如下:
恢复数据库。
# mysql -h 192.168.0.21 -P 3306 -uroot -p123456 -t db1 < db1_data.sql
原文作者:超哥的IT私房菜;如有侵权,请联系管理员删除。