数据库环境搭建

数据库服务器准备

按照教程搭建数据库服务器,我这里选择的事ubuntu22.04server版,搭建过程按照教程一步一步来即可,搭建过程中遇到2个小问题

vm重装后网卡问题

重新配置网络后,虚拟机可以ping通主机,主机ping不通虚拟机,需要在编辑网络中,重新配置

image-20241215151246057

但点应用的时候会出现无响应的情况,这有可能事因为卸载vm的时候注册表没删感觉,用CCleaner卸载重装一下就好

Failed unmounting /cdrom.

出现这种情况,如果是用u盘重写系统,拔掉U盘重启即可,如果是vm,直接重启就行。

网络配置

服务器版的ubuntu的网络配置在

root@eraser:~# cat /etc/netplan/00-installer-config.yaml 
# This is the network config written by 'subiquity'
network:
ethernets:
ens33:
addresses:
- 192.168.174.249/24
gateway4: 192.168.174.2
nameservers:
addresses: [8.8.8.8,114.114.114.114]
search: []
version: 2

如果有进行修改,需要通过netplan命令应用

sudo netplan apply
sudo systemctl restart systemd-resolved.service

同样,在开始一个数据库的安装时记得打个快照

Mysql

我这里选择mysql8.0,然后安装之前记得更新一下软件包列表

sudo apt update

安装mysql服务器

查找一mysql安装包

sudo apt search mysql-server

image-20241215164011848

安装mysql服务器,我这里选择的是8.0版本

# 安装最新版本
sudo apt install -y mysql-server
# 安装指定版本
sudo apt install -y mysql-server-8.0

启动mysql服务,并设置开机自动启动

sudo systemctl start mysql
sudo systmctl enable mysql
sudo systemctl status mysql

image-20241215164322490

修改密码权限

# 登录mysql,在默认安装时如果没有让我们设置密码,则直接回车就能登录成功。
sudo mysql -uroot -p
# 设置密码 mysql8.0
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '新密码';
# 设置密码 mysql5.7
set password=password('新密码');
# 配置IP 5.7
grant all privileges on *.* to root@"%" identified by "密码";
# 刷新缓存
flush privileges;

image-20241215164605535

注意:配置8.0版本参考:我这里通过这种方式没有实现所有IP都能访问;我是通过直接修改配置文件才实现的,MySQL8.0版本把配置文件 my.cnf 拆分成mysql.cnf mysqld.cnf,我们需要修改的是mysqld.cnf文件:

root@eraser:~# vim /etc/mysql/mysql.conf.d/mysqld.cnf 
root@eraser:~# sudo systemctl restart mysql

image-20241215164758817

重启服务后,我们试试能不能在本机用navicat连接

image-20241215165009008

mysql Error 1130

这个被连接的数据不允许使用主机xxx.xxx.xxx.xxx访问,系统数据库mysql中user表中的host是localhost,只允许是用 localhost (127.0.0.1)连接;

我们试着修改一下相关配置,这里使用该表法

use mysql;
update user set host = '%' where user = 'root';
flush privileges;
select host, user from user

image-20241215165338040

再测试一下连接

image-20241215165405308

Oracle

用ubuntu搭建依赖一直搞不全,无法解决,决定换成CentOS了

查看swap分区大小

root@eraser:~# grep SwapTotal /proc/meminfo
SwapTotal: 7340024 kB

swap分区需要大于2G,如果小于2G,可以按照下面的方法扩容

free -m # 查看是否开启swap分区,如果都是0说明没有开启
mkswap /tmp/swapfile1 #创建swap分区文件
dd if=/dev/zero of=/tmp/swapfile1 bs=1G count=2 #创建交换文件
sudo chmod 600 /tmp/swapfile1
mkswap swapfile # 激活文件
echo /tmp/swapfile1 swap swap defaults 0 0 >> /etc/fstab # 设置系统开机启动
swapon --show #查看目前已存在的swap空间

修改系统标识

[root@localhost ~]# cat /etc/redhat-release 
CentOS Linux release 7.9.2009 (Core)
[root@localhost ~]# echo redhat-7 > /etc/redhat-release
[root@localhost ~]# cat /etc/redhat-release
redhat-7

配置环境

用下面的命令查询系统的参数

/sbin/sysctl -a | grep sem >> 1.txt 
/sbin/sysctl -a | grep file-max >> 1.txt
/sbin/sysctl -a | grep aio-max >> 1.txt
/sbin/sysctl -a | grep ip_local_port_range >> 1.txt
/sbin/sysctl -a | grep rmem_default >> 1.txt
/sbin/sysctl -a | grep rmem_max >> 1.txt
/sbin/sysctl -a | grep wmem_default >> 1.txt
/sbin/sysctl -a | grep wmem_max >> 1.txt
/sbin/sysctl -a | grep shmall >> 1.txt
/sbin/sysctl -a | grep shmmax >> 1.txt
/sbin/sysctl -a | grep shmmni >> 1.txt
fs.aio-max-nr=1048576
fs.file-max= 6815744
kernel.shmmni = 4096
kernel.sem=250 32000 100 128
kernel.shmall = 2097152
kernel.shmmax=2147483648
net.ipv4.ip_local_port_range = 9000 65500
net.ipv4.icmp_echo_ignore_broadcasts =1
net.ipv4.conf.all.rp_filter =1
net.core.rmem_default = 262144
net.core.rmem_max= 4194304
net.core.wmem_default= 262144
net.core.wmem_max= 1048576

image-20241217160733365

将内容复制到/etc/sysctl.conf

root@eraser:~# vim /etc/sys
sysctl.conf sysctl.d/ sysstat/ systemd/
root@eraser:~# vim /etc/sysctl.conf
root@eraser:~# sysctl -p #更新内核参数

安装依赖与软件包

还是用Cent安的顺

[root@localhost ~]# yum -y install binutils* compat-libcap1* compat-libstdc++* gcc* gcc-c++* glibc* glibc-devel* ksh* libaio* libaio-devel* libgcc* libstdc++* libstdc++-devel* libXi* libXtst* make* sysstat* elfutils* unixODBC* unzip lrzsz

image-20241217161202180

创建用户

[root@localhost ~]# groupadd oinstall
[root@localhost ~]# groupadd dba
[root@localhost ~]# useradd -g dba -m oracle
[root@localhost ~]# usermod -a -G oinstall oracle
[root@localhost ~]# passwd oracle
[root@localhost ~]# id oracle
uid=1000(oracle) gid=1001(dba) 组=1001(dba),1000(oinstall)

创建目录

[root@localhost ~]# mkdir -p /opt/oracle //安装目录
[root@localhost ~]# mkdir -p /opt/inventory //配置目录
[root@localhost ~]# mkdir -p /opt/src //解压缩目录

# 授权
[root@localhost ~]# chown -R oracle:oinstall /opt/oracle
[root@localhost ~]# chown -R oracle:oinstall /opt/inventory/
[root@localhost ~]# chown -R oracle:oinstall /opt/src
[root@localhost ~]# ll /opt
总用量 0
drwxr-xr-x. 2 oracle oinstall 6 12月 17 16:19 inventory
drwxr-xr-x. 2 oracle oinstall 6 12月 17 16:16 oracle
drwxr-xr-x. 2 oracle oinstall 6 12月 17 16:20 src

配置限制文件

[root@localhost ~]# vi + /etc/security/limits.conf 
# 输入下面内容
oracle soft nproc 2047
oracle hard nproc 16384
oracle soft nofile 1024
oracle hard nofile 65536

配置oracle的bash配置文件

https://blog.csdn.net/weixin_57208584/article/details/135868555

[root@localhost ~]# vim + /home/oracle/.bashrc 
# 在文件末尾添加下面这些内容
export PATH
export ORACLE_BASE=/opt/oracle
export ORACLE_HOME=$ORACLE_BASE/product/11.2.0/db_1
export ORACLE_SID=orcl
export ORACLE_UNQNAME=orcl
export PATH=$ORACLE_HOME/bin:/usr/sbin:$PATH
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib
export LANG=C
export NLS_LANG=AMERICAN_AMERICA.AL32UTF8
# 激活配置
[root@localhost ~]# source /home/oracle/.bashrc

上传数据库文件

[root@localhost ~]# unzip -q linux.x64_11gR2_database_1of2.zip -d /opt/src
[root@localhost ~]# unzip -q linux.x64_11gR2_database_2of2.zip -d /opt/src
[root@localhost ~]# ls -l /opt/src
total 0
drwxr-xr-x. 8 oracle oinstall 128 Aug 21 2009 database

修改SELinux配置文件

[root@localhost ~]# vim /etc/selinux/config 
# 修改完后重启一下

image-20241217181429829

登陆oracle用户,修改数据库配置文件

[root@localhost ~]# su oracle
[oracle@localhost root]$ vi /opt/src/database/response/db_install.rsp
# 找到下面的配置项,一一配置
oracle.install.option=INSTALL_DB_SWONLY:指定安装类型为仅软件安装,不包括数据库实例。
ORACLE_HOSTNAME=oracle.server:设置Oracle数据库服务器的主机名为oracle.server。
UNIX_GROUP_NAME=oinstall:指定安装过程中使用的UNIX组为oinstall。
INVENTORY_LOCATION=/opt/inventory:指定Oracle库存目录的位置。
SELECTED_LANGUAGES=en,zh_CN:选择安装过程中支持的语言,这里选择了英文和简体中文。
ORACLE_HOME=/opt/oracle/product/11.2.0/db_1:设置Oracle数据库的安装目录。
ORACLE_BASE=/opt/oracle:设置Oracle数据库的基础目录。
oracle.install.db.InstallEdition=EE:指定安装的企业版(Enterprise Edition)。
oracle.install.db.DBA_GROUP=dba:指定数据库管理员(DBA)组为dba。
oracle.install.db.OPER_GROUP=oinstall:指定操作员组为oinstall。
oracle.install.db.config.starterdb.type=GENERAL_PURPOSE:指定创建的数据库类型为通用型。
oracle.install.db.config.starterdb.globalDBName=orcl:设置全局数据库名为orcl。
oracle.install.db.config.starterdb.SID=orcl:设置系统标识符(SID)为orcl。
oracle.install.db.config.starterdb.memoryLimit=800:设置数据库内存限制为800MB。
oracle.install.db.config.starterdb.password.ALL=oracle:设置数据库所有用户的默认密码为oracle。
DECLINE_SECURITY_UPDATES=true:拒绝安装过程中的安全更新。

开始静默安装

[oracle@localhost root]$ /opt/src/database/runInstaller -silent -responseFile /opt/src/database/response/db_install.rsp -ignorePrereq

image-20241217183444486

如果卡在这里很久,我们就再开一个窗口,执行命令,有时候可能没有信息,稍等一会,再执行一下即可

[root@localhost ~]# /opt/oracle/product/11.2.0/db_1/root.sh 
Check /opt/oracle/product/11.2.0/db_1/install/root_localhost.localdomain_2024-12-17_18-35-34.log for the output of root script

image-20241217183547114

再回去刚刚的界面看一下,会有新的信息出现

image-20241217183739006

出现successfully就可以停了

修改监听配置文件

[oracle@localhost root]$ vi /opt/src/database/response/netca.rsp 
INSTALL_TYPE=""custom""

image-20241217184156865

执行监听命令,我这里报错了,没有GUI

[oracle@localhost root]$ /opt/oracle/product/11.2.0/db_1/bin/netca /slient /responseFile /opt/src/database/response/netca.rsp

image-20241217184500138

换了一个终端,Xterm,可以发现

image-20241217184712040

解决方法

# 查看SSH的客户端地址
[oracle@localhost root]$ env | grep SSH
SSH_CLIENT=192.168.174.1 38882 22
SSH_TTY=/dev/pts/0
SSH_CONNECTION=192.168.174.1 38882 192.168.174.142 22
# 设置DISPLAY变了

[oracle@localhost root]$ export DISPLAY=192.168.174.1:0.0
[oracle@localhost root]$ yum -y install xeyes
[oracle@localhost root]$ xeyes #会跳出个小眼睛,关了就行

然后再执行刚刚的命令

image-20241217185700884

配置数据库实例文件

[oracle@localhost root]$ vim /opt/src/database/response/dbca.rsp
# 添加下面的配置文件
GDBNAME = "orcl":全局数据库名(Global Database Name)设置为orcl。这是一个唯一的名称,用于在网络中标识数据库。
SID = "orcl":系统标识符(System Identifier)设置为orcl。SID是Oracle数据库的一个独特标识符,用于区分不同的Oracle数据库实例。
SYSPASSWORD = "oracle":SYS用户的密码设置为oracle。SYS是Oracle数据库中的一个特权账户,用于执行数据库管理任务。
SYSTEMPASSWORD = "oracle":SYSTEM用户的密码设置为oracle。SYSTEM用户也是数据库中的一个特权账户,通常用于创建和管理数据库对象。
SYSMANPASSWORD = "oracle":SYSMAN用户的密码设置为oracle。SYSMAN用户用于管理Oracle企业管理器(Oracle Enterprise Manager)。
DBSNMPPASSWORD = "oracle":DBSNMP用户的密码设置为oracle。DBSNMP用户用于Oracle的Simple Network Management Protocol(SNMP)服务。
DATAFILEDESTINATION = /opt/oracle/oradata:数据文件的目标位置设置为/opt/oracle/oradata。这是数据库数据文件存储的目录。
RECOVERYAREADESTINATION=/opt/oracle/flash_recovery_area:闪回恢复区的目标位置设置为/opt/oracle/flash_recovery_area。这是Oracle闪回恢复和备份文件存储的目录。
CHARACTERSET = "AL32UTF8":字符集设置为AL32UTF8。这是一个多字节字符集,支持多种语言和字符。
NATIONALCHARACTERSET= "AL16UF16":国家字符集设置为AL16UF16。这是一个用于存储国家特定字符的字符集,通常用于Unicode数据。
TOTALMEMORY = "1638":为数据库配置的总内存设置为1638MB。这个参数指定了数据库可以使用的最大内存量。
# 生效文件
[oracle@localhost root]$ /opt/oracle/product/11.2.0/db_1/bin/dbca -silent -responseFile /opt/src/database/response/dbca.rsp

image-20241217191227725

查看进程是否启动

[oracle@localhost root]$ ps -ef | grep ora_ | grep -v grep

image-20241217191452390

修改启动或关闭实例的命令

[oracle@localhost root]$ vi /opt/oracle/product/11.2.0/db_1/bin/dbstart
[oracle@localhost root]$ vi /opt/oracle/product/11.2.0/db_1/bin/dbshut

# 将这两个文件的配置修改为下面这个
ORACLE_HOME_LISTNER=/opt/oracle/product/11.2.0/db_1

再配置一下oratab文件

[oracle@localhost root]$ vi /etc/oratab

image-20241217192140853

启动实例

[root@localhost ~]# /opt/oracle/product/11.2.0/db_1/bin/dbstart
Processing Database instance "orcl": log file /opt/oracle/product/11.2.0/db_1/startup.log
[root@localhost ~]# chmod +x /etc/rc.d/rc.local
[root@localhost ~]# vi /etc/rc.d/rc.local
# 添加下面这两项配置
su oracle -lc "opt/oracle/product/11.2.0/db_1/bin/lsnrctl_start"
su oracle -lc "opt/oracle/product/11.2.0/db_1/bin/dbstart"

image-20241217192607982

连接数据库

[oracle@localhost root]$ sqlplus / as sysdba

image-20241217192643024

用navicat连接试试

image-20241217194955247

ORA-12170

这个一般是因为系统上的防火墙限制了,可以先关了试试

sudo firewall-cmd --state //查看防火墙状态
sudo systemctl stop firewalld //关闭防火墙

PostgreSQL

下载安装

打开官方地址:选择我们想要的版本,我们使用的是Linux7.x版本,如下

image-20241218164015047

复制执行即可

# PostgreSQL的官方YUM仓库
sudo yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm
sudo yum install -y postgresql14-server
sudo /usr/pgsql-14/bin/postgresql-14-setup initdb
sudo systemctl enable postgresql-14
sudo systemctl start postgresql-14

image-20241218164448763

验证

PostgreSQL不推荐使用root管理,在安装成功postgreSQL后,他默认会给你创建一个用户:postgres,无密码,
可以修改密码:ALTER USER postgres WITH PASSWORD '新密码'

[root@localhost ~]# sudo -u postgres psql
postgres=# \l
postgres=# alter user postgres with password '123456'

image-20241218164725635

配置

远程连接配置

配置postgresql.conf
[root@localhost ~]# vim /var/lib/pgsql/14/data/postgresql.conf 

image-20241218164940201

配置pg_hba.conf
[root@localhost ~]# vim /var/lib/pgsql/14/data/pg_hba.conf 

image-20241218165209855

重启服务

[root@localhost ~]# systemctl restart postgresql-14

远程连接测试

致命错误

后面发现是,之前改密码没加分号,导致语句没有生效。。。

# 先创建数据库用户dbuser
postgres=# create user dbuser with password '密码';
# 创建系统用户
adduser dbuser
# 修改系统用户密码
passwd dbuser
# 切换用户为postgre
su postgres
# 登录
psql
# 修改dbuser的密码
postgres=# alter user dbuser with password '自己的password';
# 或者
postgres=# \password dbuser
# 创建数据库时分配
postgres=# create database 数据库名称 owner dbuser;
# 创建数据库后赋予用户postgres权限
postgres=# grant all privileges on database 数据库名称 to dbuser;

image-20241218170344682

配置数据库的日志

[root@localhost ~]# vim /var/lib/pgsql/14/data/postgresql.conf 
# 代表日志是开启的。
logging_collector = on
# 日志存放的路径,默认放到当前目录下的log里
log_directory = 'log'
# 日志的文件名,默认是postgresql为前缀,%a表示把星期作为后缀
log_filename = 'postgresql-%a.log'
# 日志文件会被覆盖
log_truncate_on_rotation = on
# 一天一个日志文件
log_rotation_age = 1d
# 日志文件,没有大小限制
log_rotation_size = 0

image-20241218170729589

Redis

下载redis

# 创建一个存放redis的目录
[root@localhost ~]# cd /usr/local/soft/
# 下载
[root@localhost soft]# wget https://download.redis.io/releases/redis-6.0.9.tar.gz
[root@localhost soft]# ls
redis-6.0.9.tar.gz

解压

[root@localhost soft]# tar -zxvf redis-6.0.9.tar.gz 

安装gcc依赖

Redis 是C语言编写的,编译需要 GCC。

Redis6.x.x版本支持了多线程,需要 gcc 的版本大于 4.9

因为之前安oracle时安过,但可能版本不合适,我们查看下版本

[root@localhost soft]# gcc -v
......
gcc 版本 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC)

需要升级一下

但好像因为停止维护的原因,我们需要手动升级一下,或者换Debian的系统。。。

下载GCC9.3.0源码并解压

wget -c /opt/tmp/ https://mirrors.tuna.tsinghua.edu.cn/gnu/gcc/gcc-9.3.0/gcc-9.3.0.tar.gz --user-agent="Mozilla"
#考虑到安装失败的可能性,创建一个临时文件夹来安装GCC
sudo mkdir /opt/tmp
cd /opt/tmp
#解压安装包到临时文件夹里
sudo tar -zxvf /home/paul/Downloads/gcc-9.3.0.tar.gz

下载依赖文件

# 要用到bzip包,可以先下一个
yum install -y bizp2

cd gcc-9.3.0/
#下载gmp mpfr mpc等供编译需求的依赖项
./contrib/download_prerequisites

image-20241219172913102

创建预编译目录

mkdir build && cd build

设置编译选项并编译

../configure --prefix=/usr/local/gcc-9.3.0 --enable-bootstrap --enable-checking=release --enable-languages=c,c++ --disable-multilib
  • –-enable-languages表示你要让你的gcc支持哪些编程语言;
  • -–disable-multilib表示编译器不编译成其他平台的可执行代码;
  • -–disable-checking表示生成的编译器在编译过程中不做额外检查
  • –-enable-checking=xxx 表示编译过程中增加XXX检查
  • –prefix=/usr/local/gcc-9.3.0 指定安装路径
  • –enable-bootstrap 表示用第一次编译生成的程序进行第二次编译,然后用再次生成的程序进行第三次编译,并且检查比较第二次和第三次结果的正确性,也就是进行冗余的编译检查工作。 非交叉编译环境下,默认已经将该值设为 enable,可以不用显示指定;交叉编译环境下,需要显示将其值设为 disable。

安装

#编译生成makefile文件
make
#安装GCC
sudo make install

超级久这个过程,大概3个小时左右

image-20241219190954709

安装后的设置

#设置环境变量
touch /etc/profile.d/gcc.sh
sudo chmod 777 /etc/profile.d/gcc.sh
sudo echo -e ``'\nexport PATH=/usr/local/gcc-9.3.0/bin:$PATH\n'` `>> /etc/profile.d/gcc.sh && source /etc/profile.d/gcc.sh
#设置头文件
sudo ln -sv /usr/local/gcc/include/ /usr/include/gcc
#设置库文件
touch /etc/ld.so.conf.d/gcc.conf
sudo chmod 777 /etc/ld.so.conf.d/gcc.conf
sudo echo -e ``"/usr/local/gcc/lib64"` `>> /etc/ld.so.conf.d/gcc.conf
#加载动态连接库
sudo ldconfig -v
ldconfig -p |grep gcc
#测试
gcc -v
# 还需要修改/usr/bin/下的gcc
cd /usr/bin/
mv gcc gcc_4.8.5
ln -s /usr/local/gcc-9.3.0/bin/gcc /usr/bin/gcc

image-20241219191135782

编译安装

image-20241219200355858

提示tcl版本较低,直接安过新的就i行

# 安装新版tcl
yum install -y tcl-devel
# 清楚make缓存命令
make distclean
# 重新编译
make
# 测试
make test

image-20241219201801381

安装成功的结果是 src 目录下面出现服务端和客户端的脚本

  • redis-server
  • redis-cli
  • redis-sentinel

image-20241219201852191

修改配置文件

默认的配置文件是/usr/local/soft/redis-6.0.9/redis.conf后台启动,不然窗口一关服务就挂了

image-20241219202017490

image-20241219202106152

image-20241219203232792

如果需要密码访问,取消 requirepass 的注释,在外网(比如阿里云)这个必须要配置,这里我们保持默认即可

requirepass yourpassword

image-20241219203738603

使用指定配置文件启动redis

/usr/local/soft/redis-6.0.9/srg/redis-server
/usr/local/soft/redis-6.0.9/redis.conf

查看是否启动

netstat -lntup | grep 6379

但命令太长了,我们可以通过alies配置别名启动

[root@localhost redis-6.0.9]# vim ~/.bashrc
# .bashrc

# User specific aliases and functions

alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'
alias rcli='/usr/local/soft/redis-6.0.9/src/redis-cli'
alias redis='/usr/local/soft/redis-6.0.9/src/redis-server /usr/local/soft/redis-6.0.9/redis.conf'

# Source global definitions
if [ -f /etc/bashrc ]; then
. /etc/bashrc
fi
[root@localhost redis-6.0.9]# source ~/.bashrc
然后记得新开个窗口,不然不会生效

image-20241219203317326

如果还没有多半是防火墙的问题

systemctl stop firewalld 

连接测试

之前用kali安装过redis的客户端,Debian安起来容易的多,没那么多办错

redis-cli -h 192.168.174.142 -p 6379

image-20241219204137629

也是成功连上了,还有一个好用的图形化工具Another Redis Desktop Manager

image-20241220002049588