DM数据库学习之路(一)Linux命令及DM数据库操作系统配置

​​​​​

  1. Linux命令
    1. 前言

最近几年,无论是商业、开源、分布式、云原生等越来越多的国产数据库如雨后春笋般悄然出现在公众的视野。面对这么多种国产数据库,无论对客户还是我们数据库从业人员,难免会产生一种眼花缭乱的现象。根据国产数据库流行度排行榜及市场占有率热度,个人认为数据库在市场上存在二条赛道,近10年可能会并行运行。

第一条赛道是传统数据库,国产达梦数据库是唯一一个可以跟国外Oracle抗衡的。经过近段时间的研究,DM8数据库不仅在语法、易用性、功能、性能上完全可以和Oracle媲美,甚至在某些功能、性能和配套工具上远远超过了国外的Oracle数据库,没有做实验之前觉的达梦数据库可能很一般,做完DM8单机、DMDataWatch主备集群、DMDSC共享存储集群、DMDPC分布式集群后改变了对它的认知,“国产传统数据库龙头第一把交椅非达梦莫属”。另一条赛道是基于开源的分布式数据库,像TiDBOceanBase PolarDBGaussDB等为代表的头部厂商,分布式数据库可有效解决现有互联网环境下海量数据、高并发计算的数据需求,成为国产数据库厂商的产品发展共识,也是未来主流架构之一。

    1. 适用范围

适用于所有技术人员,数据库爱好者,数据库初学者。

    1. Linux基础命令
      1. 查看命令:ls

语法格式:ls [选项] [文件]

常用参数

参数名

解释

-a

显示所有文件及目录 (包括以“.”开头的隐藏文件)

-l

显示文件和目录的详细资料 

-t

根据最后的修改时间排序

-trl

按时间显示所有文件及目录

-A

-a ,但不列出 “.” (当前目录) “…” (父目录)

-S

根据文件大小排序

-R

递归列出所有子目录

      1. 切换目录:cd

语法格式: cd [选项] [文件]

常用参数

参数名

解释

/dir

进入指定目录

~

进入用户主目录

-

返回之前所在的目录

..

返回上级目录

../..

返回上两级目录

      1. 建立目录:mkdir

语法格式 : mkdir [参数] [目录]

常用参数

参数名

解释

-p

建多级目录

-p /dir{a_dir,b_dir}

一次性建多个目录

-v

显示目录的创建过程

-R

强制创建目录

      1. 删除:rm

语法格式: rm [参数] [文件]

常用参数

参数名

解释

-f

忽略不存在的文件,不会出现警告信息

-i

删除前会询问用户是否操作

-r/R

递归删除

-v

显示指令的详细执行过程

      1. 复制文件:cp

语法格式: cp [参数] [文件]

常用参数

参数名

解释

cp file1 file2

复制一个文件 

-f

若目标文件已存在,则会强制覆盖原文件

-i

若目标文件已存在,则会询问是否覆盖

-p

保留源文件或目录的所有属性

-r

递归复制文件和目录

-rp

复制目录及文件

-v

详细显示cp命令执行的操作过程

      1. 分页显示:less

语法格式: less [参数] [文件]

常用参数

参数名

解释

-b

置缓冲区的大小

-e

当文件显示结束后,自动离开

-f

强制打开特殊文件

-g

只标志最后搜索的关键词

-i

忽略搜索时的大小写

-m

显示类似more命令

-N

显示每行的行号

-o

less 输出的内容在指定文件中保存起来

-Q

不使用警告音

-s

显示连续空行为一行

-S

在单行显示较长的内容,而不换行显示

-x

TAB字符显示为指定个数的空格字符

命令内部操作:

b 向后翻一页

d 向后翻半页

h 显示帮助界面

Q 退出less 命令

u 向前滚动半页

y 向前滚动一行

空格键 滚动一页

回车键 滚动一行

      1. 移动改名文件:mv

语法格式mv [参数]

常用参数:

参数名

解释

-i

若存在同名文件,则向用户询问是否覆盖

-f

覆盖已有文件时,不进行任何提示

-b

当文件存在时,覆盖前为其创建一个备份

-u

当源文件比目标文件新,或者目标文件不存在时,才执行移动此操作

      1. 显示文件:tail

语法格式:tail [文件]

参数名

解释

tail file

显示文件file的最后10行

tail +20 file

显示文件file的内容,从第20行至文件末尾

tail -c 10 file

显示文件file的最后10个字符

tail -f 10 file

一直变化的文件总是显示后10行

      1. 查看磁盘空间:df du

语法格式:df [文件]

参数名

解释

df -h

显示挂载分区及磁盘使用情况

df -Th

显示挂载分区类型及磁盘使用情况

ls -lSr |more

以尺寸大小排列文件和目录

du -sm dir

估算目录dir  #占用磁盘空间大小,单位MB

du -sh dir

估算目录dir占用磁盘空间大小,单位GB

du -sm * | sort -rn

以容量大小为依据依次显示文件和目录的大小,单位MB

      1. 编辑文件:vi

语法格式:vi  [参数] [文件]

参数名

解释

vi filename

打开或新建文件并将光标置于第一行首

vi +n filename

打开文件,并将光标置于第n行首

vi + filename

打开文件,并将光标置于最后一行首

vi -r filename

在上次正用vi编辑时发生系统崩溃,恢复 filename

:q

退出

:q!

强制退出

:w

保存编辑内容

:wq

保存并退出

:wq!

强制保存并退出

:set number或:set nu

显示行号

:set nonumber或:set nonu

取消显示行号

      1. 挂载文件系统:mount

语法格式:mount  [参数]

参数名

解释

mount /dev/hda2 /soft

挂载hda2的盘到soft目录

umount /dev/hda2

卸载hda2的盘

fuser -km /mnt/hda2

当设备繁忙时强制卸载

umount -n /mnt/hda2

运行卸载操作而不写入

mount /dev/fd0 /mnt/floppy

挂载一个软盘

mount /dev/cdrom /mnt/

挂载一个cdrom

mount -o loop file.iso /mnt

挂载一个ISO镜像文件

mount -t vfat /dev/hda5 /mnt/hda5

挂载一个Windows FAT32文件系统

mount /dev/sda1 /mnt/usbdisk

挂载一个usb 捷盘或闪存设备

      1. 用户和群组:useradd,groupadd

参数名

解释

groupadd dinstall

创建dinstall用户组

groupdel dinstall

删除dinstall用户组

groupmod -n new_group_name old_group_name

重命名一个用户组

useradd  -g dinstall -m -d /home/dmdba -s /bin/bash dmdba

创建dmdba用户属dinstall组

useradd dmdba

创建dmdba新用户

userdel dmdba

删除dmdba用户

passwd dmdba

设置/修改dmdba密码(只允许root执行)

chage -E 2028-12-31 dmdba

设置用户口令的失效期限

      1. 权限属组:chmod

参数名

解释

r

4

w

2

x

1

rwxrw-r-x(765)

所有者rwx=4+2+1=7

所属组rw=4+2=6

其它人r-x=4+1=5

rwxrwxrwx(777)

所有者rwx=4+2+1=7

所属组rwx=4+2+1=7

其它人rwx=4+2+1=7

rwxrwxr-x(775)

所有者rwx=4+2+1=7

所属组rwx=4+2+1=7

其它人r-x=4+1=5

chmod -R 775 /dm8

对dm8目录及下面子目录全部设置775权限

chown -R dmdba:dinstall /dm8

对dm8目录及下面子目录全部设置dmdba:dinstall属组

    1. Linux环境检查
      1. 操作系统版本检查
  1. 麒麟:

# nkvers

# cat /etc/.productinfo

# cat /etc/os-release | grep "PRETTY_NAME"

  1. Centos/Redhat

# cat /etc/redhat-release

      1. 操作系统内核检查
  1. 麒麟:

# cat /proc/version

Linux version 4.19.90-52.22.v2207.ky10.x86_64 ([email protected]) (gcc version 7.3.0 (GCC)) #1 SMP Tue Mar 14 12:19:10 CST 2023

# uname -a

Linux dm8db01 4.19.90-52.22.v2207.ky10.x86_64 #1 SMP Tue Mar 14 12:19:10 CST 2023 x86_64 x86_64 x86_64 GNU/Linux

# uname -r

4.19.90-52.22.v2207.ky10.x86_64

  1. Centos/Redhat

# cat /proc/version

Linux version 3.10.0-957.el7.x86_64 ([email protected]) (gcc version 4.8.5 20150623 (Red Hat 4.8.5-36) (GCC) ) #1 SMP Thu Oct 4 20:48:51 UTC 2018

# uname -a

Linux dm8db02 3.10.0-957.el7.x86_64 #1 SMP Thu Oct 4 20:48:51 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux

# uname -r

3.10.0-957.el7.x86_64

      1. 操作系统位数检查
  1. 麒麟:

# getconf LONG_BIT

64

  1. Centos/Redhat

# getconf LONG_BIT

64

      1. 系统架构检查
  1. 麒麟:

# uname -m

x86_64

  1. Centos/Redhat

# uname -m

x86_64

      1. CPU型号检查

命令:

#cat /proc/cpuinfo |grep "model name"|sort|uniq

model name  : Intel(R) Core(TM) i7-9750H CPU @ 2.60GHz

# lscpu

参数说明:

Architecture:服务器架构

CPU op-mode(s):CPU模式

CPU(S):CPU颗数

Core(s) per socket: CPU核数

Model name:CPU详细信息

cpu个数

# lscpu | grep "CPU(s):"

# cat /proc/cpuinfo|grep "physical id"|sort|uniq|wc -l

1

      1. 网卡设备及速率检查

命令:

# ifconfig -a

# ip -a

# ethtool ens33

      1. 磁盘分区类型及使用情况

#df -h

#df -Th

      1. 磁盘调度算法

# lsblk

# cat /sys/block/sda/queue/scheduler

      1. 磁盘缓存

# swapon -s

磁盘缓存策略是否开启

      1. 磁盘性能测试

--直接写

# dd if=/dev/zero of=/tmp/test01.dbf bs=32k count=10k

--缓存写

# dd if=/dev/zero of=/tmp/test01.dbf bs=32k count=10k oflag=sync

--直接读

dd if=/dev/zero of=/tmp/test01.dbf if=/tmp/test01.dbf bs=32k count=10k

--缓存读

# dd if=/dev/zero of=/tmp/test01.dbf if=/tmp/test01.dbf bs=32k count=10k oflag=sync

注:测试命令不要在生产环境运行。

      1. CPU利用率

#top

      1. 内存利用率

# free -m   #单位M

# free -h   #单位G

      1. 查看网络读写速率

# sar -n DEV 1 100

      1. 关闭swap分区

临时修改

#临时关闭 swap 分区,重启后失效

# swapoff  -a

永久修改

#永久关闭 swap 分区

# sed -ri 's/.*swap.*/#&/' /etc/fstab  

#重启操作系统

# reboot

#再次确认

# free -m

    1. DM8操作系统参数配置
      1. 手动修改系统时间

# date -s "yyyy-mm-dd HH:MM:SS"

# date -s "2024-01-05 15:28:00"

      1. host配置

cat >> /etc/hosts << EOF

xx.xx.xx.xx    dm8db01

EOF

      1. 主机名修改

vi /etc/hostname

或者

hostnamectl set-hostname  [主机名]

      1. 关闭防火墙

systemctl stop firewalld

systemctl disable firewalld

sed -i 's/enforcing/disabled/' /etc/selinux/config

#临时

setenforce 0 

      1. 添加端口到白名单

#查看防火墙端口开放情况:

##redhat 6

iptables -L

#redhat 7/8

firewall-cmd --zone=public --list-ports

        1. Redhat6 添加端口到防火墙(iptables)

方式一:修改系统文件,永久更改,需重启防火墙服务

# vi /etc/sysconfig/iptables

  -A INPUT -p tcp -m tcp --dport 5236 -j ACCEPT   #添加 5236 端口到防火墙

# service iptables save;service iptables restart; #保存后重启防火墙

方式二:命令行添加端口,永久更改,需重启防火墙服务

# iptables -A INPUT -s 0.0.0.0/0.0.0.0 -p tcp --dport 5236 -j ACCEPT

# service iptables save;service iptables restart; --保存后重启防火墙

注意

修改文件配置后,需重启防火墙服务。

        1. Redhat7/8 添加端口到防火墙(Firewall)

#添加(--permanent 永久生效,没有此参数重启后失效)

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

#重新载入

firewall-cmd --reload

#查看

firewall-cmd --zone=public --query-port=5236/tcp

#删除

firewall-cmd --zone=public --remove-port=5236/tcp --permanent

注意

添加端口到防火墙时,使用  --permanent 后才能永久生效,否则重启后失效。

      1. 关闭numa

NUMA(Non-Uniform Memory Access)架构是为了解决多 CPU 下内存访问冲突,即不再将整个物理内存作为一个整体,而是根据不同的 CPU 区分不同的内存块,如 2 颗 CPU 每颗 CPU 使用 64G 内存。

当 NUMA 参数 zone_reclaim_mode 设置为 1 时,内核将要求多路 CPU 尽量从距离较近的系统内存节点(服务器的整体内存在 numa 架构下将被分成若干个节点)分配内存,而不是在整个服务器可访问内存的范围内进行内存分配。因此,在较高内存占用压力下,内存申请会触发内存频繁回收整理的机制,严重影响系统整体性能(长期处于内核态 sys 很高),进而可能导致 SQL 卡顿问题的发生。

# vi /etc/default/grub

加上:numa=off

#新生成 /etc/grub2.cfg 配置文件:

grub2-mkconfig -o /etc/grub2.cfg

#重启操作系统

# reboot

#重启之后进行确认

# dmesg | grep -i numa

#再次确认

# cat /proc/cmdline

      1. 禁用透明大页

Transparent HugePages (透明大页)对系统的性能产生影响的原因:

在 khugepaged 进行扫描进程占用内存,并将 4k Page 交换为 Huge Pages 的这个过程中,对于操作的内存的各种分配活动都需要各种内存锁,直接影响程序的内存访问性能。并且,这个过程对于应用是透明的,在应用层面不可控制,对于专门为 4k page 优化的程序来说,可能会造成随机的性能下降现象。

        1. Centos 系统

#临时修改

#查看是否启用透明大页

# cat /sys/kernel/mm/transparent_hugepage/enabled

[always]表示透明大页启用  

[never] 表示透明大页禁用

#禁用透明大页(临时)

# echo never > /sys/kernel/mm/transparent_hugepage/enabled

#禁用透明大页(永久)

# vi /sys/kernel/mm/transparent_hugepage/enabled

[always] madvise never

#加入grub

# vi /etc/default/grub

添加

transparent_hugepage=never

#重新生成 /etc/grub2.cfg 配置文件:

# grub2-mkconfig -o /etc/grub2.cfg

#重启操作系统

# reboot

#再次确认

# cat /sys/kernel/mm/transparent_hugepage/enabled

        1. 鲲鹏 arm+银河麒麟操作系统 V10SP1

(1) 查看透明大页内存

#使用下图中命令查看当前操作系统透明大页内存配置

# grep -i huge /proc/meminfo

# cat /sys/kernel/mm/transparent_hugepage/enabled

从上面输出可以看到,每个页的大小为 2MB(Hugepagesize),并且系统中目前有 0 个“大内存页”(HugePages_Total)。而当前的透明大页内存配置是开启的(always)。

(2) 关闭透明大页内存。

#通过修改 grub 配置,在 “GRUB_CMDLINE_LINUX=” 配置参数结尾加入 “transparent_hugepage=never”,可以永久关闭透明大页内存。

# vim /etc/default/grub

(3) 重新生成 grub 配置。

#如果操作系统安装时,使用 Legacy 模式引导安装,则使用以下命令重新生成 grub。

# grub2-mkconfig -o /boot/grub2/grub.cfg

#如果操作系统安装时,使用 UEFI 模式引导安装,则使用以下命令重新生成 grub。

# grub2-mkconfig -o /boot/efi/EFI/kylin/grub.cfg

(4) 生成 grub 后,重启操作系统查看配置。

可以看到系统中目前透明大页内存为 0,并且禁用透明大页内存(never)。查看 /sys/kernel/mm/transparent_hugepage/defrag 配置文件缺省配置为 “madvise”

如需永久修改配置为 “never”,需在 /etc/rc.local 中添加如下内容。

if test -f /sys/kernel/mm/transparent_hugepage/defrag; then

   echo never > /sys/kernel/mm/transparent_hugepage/defrag

fi

      1. sysctl.conf参数配置
        1. 参数文件介绍

/etc/sysctl.conf 是一个允许改变正在运行中的 Linux 系统接口,它包含一些 TCP/IP 堆栈和虚拟内存系统的高级选项,修改内核参数永久生效。/proc/sys 下内核文件与配置文件 sysctl.conf 中变量存在着对应关系。

        1. 调整项介绍

配置参数 overcommit_memory 表示系统的内存分配策略可以选值为 0,1,2。

0:表示内核将检查是否有足够的可用内存供应用进程使用;如果有足够的可用内存,内存申请允许;否则,内存申请失败,并把错误返回给应用进程。

1:表示内核允许分配所有的物理内存,不管当前的内存状态如何。

2:表示内核允许分配超过所有物理内存和交换空间总和的内存。

        1. 具体命令

临时生效和永久生效:

#临时生效

#使用 root 执行命令:

# echo 0 > /proc/sys/vm/overcommit_memory

#查看执行结果:

# cat /proc/sys/vm/overcommit_memory

#永久生效

#用root用户编辑配置文件编辑/etc/sysctl.conf

# vim /etc/sysctl.conf

#修改vm.overcommit_memory=0

然后执行 sysctl -p 使配置文件生效:

      1. 调整 limits.conf 参数
        1. 参数文件介绍

在 Linux、Solaris、AIX 和 HP-UNIX 等系统中,操作系统默认会对程序使用资源进行限制。如果不取消对应的限制,则数据库的性能将会受到影响。

        1. 调整项介绍
  1. core file size 建议设置为 unlimited。并将 core 文件目录放到大的空间目录存放。
  2. data seg size 建议设置为 1048576 以上或 unlimited,此参数过小将导致数据库启动失败。
  3. file size 建议设置 unlimited (无限制),此参数过小导致数据库安装或初始化失败。
  4. open files 建议设置为 65536 以上或 unlimited。
  5. virtual memory 建议设置为 1048576 以上或 unlimited,此参数过小将导致数据库启动失败。
  6. max user processes 最大线程数这个参数建议修改为 10240。
        1. 具体命令

临时修改

#查询当前系统资源限制

# ulimit -a

 
  

#设置open files 65536 以上或 unlimited、设置 max user processes为10240

# ulimit -n 65535   #临时修改 open files 为65535

# ulimit -u 10240   #临时修改 max user processes为10240

#  ulimit -a  #查看修改是否生效

永久修改

#编辑 limits.conf 文件

# vi /etc/security/limits.conf

#在最后面添加以下内容

* soft nproc 10240

* hard nproc 10240

dmdba soft nproc 10240

dmdba hard nproc 10240

dmdba soft nofile 65536

dmdba hard nofile 65536

dmdba hard data unlimited

dmdba soft data unlimited

dmdba hard fsize unlimited

dmdba soft fsize unlimited

dmdba soft core unlimited

dmdba hard core unlimited

# ulimit -a #确认是否生效

#重启操作系统

[root@]# reboot

#再次确认

# ulimit -a

        1. 参数使用说明

1.data seg size

data seg size (kbytes, -d)

建议用户设置为 1048576(即 1GB)以上或 unlimited(无限制),此参数过小将导致数据库启动失败。

2. file size

file size(blocks, -f)

建议用户设置为 unlimited(无限制),此参数过小将导致数据库安装或初始化失败。

3. open files

open files(-n)

建议用户设置为 65536 以上或 unlimited(无限制)。

4.virtual memory

virtual memory (kbytes, -v)

建议用户设置为 1048576(即 1GB)以上或 unlimited(无限制),此参数过小将导致数据库启动失败。

如果用户需要为当前安装用户更改 ulimit 的资源限制,请修改文件/etc/security/limits.conf。

      1. 调整 system.conf 参数
        1. 参数文件介绍

system.conf为系统和服务管理的配置文件,当运行系统实例时,systemd 将读取这个配置文件system.conf,相反读取user.conf。

达梦数据库服务注册为系统服务的进程,如通过 systemctl 或者 service 方式设定随机自启动的数据库服务,其能打开的最大文件描述符、proc 数量等不受limits.conf控制需要修改/etc/systemd/system.conf文件。

        1. 调整项介绍
  1. DefaultLimitNOFILE:用户默认最大打开文件数。
  2. DefaultLimitNPROC:用户默认最大进程数。
        1. 具体命令

#编辑配置文件 /etc/systemd/system.conf

# vim /etc/systemd/system.conf

#添加配置:

DefaultLimitNOFILE=65536

DefaultLimitNPROC=10240

注意

保存退出后需要重启服务器才能生效。

      1. 调整 nproc.conf 参数
        1. 参数文件介绍

nproc是操作系统级别对每个用户创建的进程数的限制。文件路径为/etc/security/limits.d/nproc。不同操作系统文件名略有不同,其中

麒麟 10 中是 nproc.conf

centos6 中是  90-nproccentos

centos7 中是 20-nproc.conf

/etc/security/limits.conf可配置限制文件打开数,系统进程等资源在该文件配置中写的最大用户进程数是受/etc/security/limits.d/proc.conf配置上限影响的。

        1. 调整项介绍

soft 表示软限制,hard 表示硬限制,nproc 进程数,nofile 文件数

#cd /etc/security/limits.d

#cat nproc.conf

dmdba soft nproc 65536

dmdba hard nproc 65536

        1. 具体命令

#编辑配置文件nproc.conf

# vi /etc/security/limits.d/nproc.conf

#添加配置:

dmdba soft nproc 65536

dmdba hard nproc 65536

#确定是否生效:

# ulimit -u

65536

若在/etc/security/limits.conf修改最大用户进程数,则注释掉/etc/security/limits.d/90-nproc.conf文件中的相关内容即可。

      1. 配置profile环境变量
        1. 参数文件介绍

/etc/profile文件与环境变量相关,修改后对所有用户起作用。登录 Linux 时,会首先启动 /etc/profile文件,然后再启动用户目录下的 ~/.bash_profile、 ~/.bash_login 或 ~/.profile 文件中的其中一个。

/etc/profile 为全局(公有)配置,不管是哪个用户,登录时都会读取该文件.~/.profile 若 bash 是以 login 方式执行时,读取 ~/.bash_profile,若它不存在,则读取 ~/.bash_login,若前两者不存在,则读取 ~/.profile。

        1. 调整项介绍

调整 dmdba 用户下的环境变量文件 .bash_profile。

(1) LD_LIBRARY_PATH 主要用于指定查找共享库(动态链接库)时除了默认路径之外的其他路径。

(2) PATH 环境变量定义了用于进行命令和程序查找的目录, PATH 中的目录使用冒号分隔。

(3) DM_HOME 定义达梦数据库的软件目录。

        1. 具体命令

su - dmdba

vi .bash_profile

export DM_HOME="/dm8"

export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/dm8/bin"

export PATH=$PATH:$DM_HOME/bin:$DM_HOME/tool

注意

保存文件后执行 source .bash_profile 生效。

      1. 建用户及组
        1. 创建数据库用户说明
  1. 数据库运行依赖该用户
  2. 普通用户不能修改系统关键配置文件,若要查看其他用户的文件则需要相应的权限
  3. 防止使用 root 权限过大导致误操作及一些纠纷
        1. 创建用户组和用户

# groupadd -g 10021 dinstall

# useradd -u 10022 -g dinstall -m -d /home/dmdba -s /bin/bash dmdba

# passwd dmdba

# --<输入密码>

# --<再次输入密码>

        1. 创建目录及属组

mkdir -p /dm8/dmdbms

chown -R dmdba:dinstall /dm8

chmod -R 775 /dm8

日拱一卒,水滴石穿,循序渐进,将达梦数据库测试到底,下篇见。

你可能感兴趣的:(国产数据库,数据库,学习,linux)