遇到的基本问题
文章目录
- 遇到的基本问题
- Linux常用操作
- 1、关闭防火墙、配置本地yum源、添加静态网卡
- 2、进程间的通讯靠的是共享内存段,如果共享内存段过小导致服务开启不了,添加共享内存段方法
- 3、会死循环的脚本
- 4、修改Oracle数据库的编码方式
- 5、windows激活管理员账户,和使用命令行修改密码
- 6、VMware不与物理机的粘贴板互通,安装个小工具
- 7、解决内存不足的情况
- 8、使用逻辑卷的扩充操作
- 9、描述Oracle数据库如果滚动升级失败后,怎么回到还原点
- 10、配置静态网卡
- 11、OracleLinux没有软件包的问题
- 12、根目录内存不足时增加逻辑卷
- 13、配置docker镜像仓库
- 14、Linux内存调度的概念
- 15、yum源报错1
- 16、可以正常使用的yum源镜像
- 17、本地的上传的iso镜像文件,挂载到yum库
- 18、重新安装yum源
- 19、在PG数据库主备库上快速生成大量的数据
- 数据库、操作系统、前端
- 1、Oracle数据库常用的命令
- 2、MySQL常见的问题
- 3、数据库专业毕业答辩常见问题
- 4、Linux网卡不能成功开启常见问题
- 5、Linux系统无法通过图形化去登录
- 6、使用scp批量从windows上获取文件
- 7、使用wget命令从网站获取安装包
- 8、MySQL数据库禁用只监听ipv6,不监听ipv4的解决方法
- 9、杀死某个端口下的全部进程
- 10、Linux系统根目录爆满的解决方法
- 11、监控zabbix对于某个脚本无法执行的情况
- 12、处理一个PG数据库误删除wal文件导致无法开机的情况
- 13、PG数据库配置完白名单后还是无法访问的情况
- 14、Linux系统添加SWAP交换分区,`一般情况下不要去动客户给定的磁盘大小`
- 15、PG数据库主备恢复日志重做,由于时间线不一致导致主备不能正常运行。
- 16、MySQL数据库使用第三方工具自动生成ER图表格基础
- 17、前端开发里边各种妖魔鬼怪的图片加载路径
- 18 、前端VUE安装
- 19、Oracle数据库高可用理论
- 20、Oracle数据库dba和sysdba的区别
- Oracle、MySQL数据库体系结构的知识点
Linux常用操作
1、关闭防火墙、配置本地yum源、添加静态网卡
systemctl stop firewalld
if [ `getenforce` == "Enforcing" ];then
setenforce 0
fi
sleep 3
echo "防火墙和selinux高级权限管理已关闭"
############
#添加静态网卡
############
nmcli connection add type ethernet con-name ens38 ifname ens38 ipv4.method manual ipv4.addresses 192.168.177.6/24 autoconnect yes
#########################################
## 配置yum源
##
########################################
mount /dev/cdrom /mnt
rm -rf /etc/yum.repos.d/rhel-source.repo
touch /etc/yum.repos.d/rhel-source.repo
cat >> /etc/yum.repos.d/rhel-source.repo << EOF
[rhel-source]
name=Red Hat Enterprise
baseurl=file:///mnt
enabled=1
gpgcheck=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release
EOF
###########################################
service network restart 启动网络
2、进程间的通讯靠的是共享内存段,如果共享内存段过小导致服务开启不了,添加共享内存段方法
vim /etc/fstab
tmpfs /dev/shm tmpfs defaults,size=12G 0 0
mount /dev/shm #生效命令
3、会死循环的脚本
cat /root/test
#!/bin/bash
echo "我你 hello world"
cat 1.sh
#!/bin/bash
echo "1.txt" > /root/1.txt
bash /root/test.sh > /root/2.txt
cat test.sh
#!/bin/bash
echo "hello world"
exit
或者
cat 1.sh
#!/bin/bash
echo "1.txt" > /root/1.txt
/root/test.sh > /root/2.txt
cat test.sh
#!/bin/bash
echo "hello world"
否则会死循环
systemctl stop crond.service
00 10 10 * * /root/test > /root/1.txt
改时间时要把服务关掉,不然识别不到时间
4、修改Oracle数据库的编码方式
export NLS_LANG=AMERICAN_AMERICA.AL32UTF8
注册表
计算机\HKEY_LOCAL_MACHINE\SOFTWARE\Oracle\KEY_OraClient12Home1
linux系统中:
PATH=$PATH:$HOME/.local/bin:$HOME/bin
export PATH
export TMP=/tmp
export TMPDIR=$TMP
export ORACLE_HOSTNAME=jtxy
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/12.2.0/db_1
export ORACLE_UNQNAME=orcl
export ORACLE_SID=orcl
export ORACLE_TERM=xterm
export PATH=/usr/sbin:$PATH
export PATH=$ORACLE_HOME/bin:$PATH
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib
export CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib
alias sqlplus='rlwrap sqlplus'
alias rman='rlwrap rman'
export NLS_LANG=AMERICAN_AMERICA.AL32UTF8
5、windows激活管理员账户,和使用命令行修改密码
windows+L可以切换登录用户
修改管理员用户密码为linux:net user administrator linux
激活管理员账户:net user administrator /active:yes
net start sshd
netstat -a 查看端口使用情况
6、VMware不与物理机的粘贴板互通,安装个小工具
[root@jtxy ~]# cd /mnt
[root@jtxy mnt]# ls
hgfs
[root@jtxy mnt]# mount /dev/cdrom /mnt
mount: /dev/sr0 is write-protected, mounting read-only
[root@jtxy mnt]# ls
hgfs
[root@jtxy mnt]# cd /mnt
[root@jtxy mnt]# ls
manifest.txt VMwareTools-10.3.22-15902021.tar.gz vmware-tools-upgrader-64
run_upgrader.sh vmware-tools-upgrader-32
[root@jtxy mnt]# cd /root
[root@jtxy ~]# ls
anaconda-ks.cfg initial-setup-ks.cfg Templates
core.2811 install_oracle.sh Videos
Desktop Music VMwareTools-10.3.22-15902021.tar.gz
Documents Pictures vmware-tools-distrib
Downloads Public
[root@jtxy ~]# cd vmware-tools-distrib/
[root@jtxy vmware-tools-distrib]# ls
bin caf doc etc FILES INSTALL installer lib vgauth vmware-install.pl
[root@jtxy vmware-tools-distrib]# ./vmware-install.pl
7、解决内存不足的情况
[root@rac2 rules.d]# vim /etc/fstab
[root@rac2 rules.d]# mount /dev/shm
[root@rac2 rules.d]# cat /etc/fstab
#
# /etc/fstab
# Created by anaconda on Mon Aug 21 10:06:05 2023
#
# 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
#
/dev/mapper/ol-root / xfs defaults 0 0
UUID=3bdb9ad5-768a-48eb-9b18-a61e31e08781 /boot xfs defaults 0 0
/dev/mapper/ol-swap swap swap defaults 0 0
tmpfs /dev/shm tmpfs defaults,size=12G 0 0
8、使用逻辑卷的扩充操作
[root@standby ~]# fdisk /dev/sda
Welcome to fdisk (util-linux 2.23.2).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
Command (m for help): m
Command action
a toggle a bootable flag
b edit bsd disklabel
c toggle the dos compatibility flag
d delete a partition
g create a new empty GPT partition table
G create an IRIX (SGI) partition table
l list known partition types
m print this menu
n add a new partition
o create a new empty DOS partition table
p print the partition table
q quit without saving changes
s create a new empty Sun disklabel
t change a partition's system id
u change display/entry units
v verify the partition table
w write table to disk and exit
x extra functionality (experts only)
Command (m for help): p
Disk /dev/sda: 64.4 GB, 64424509440 bytes, 125829120 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x000aa52b
Device Boot Start End Blocks Id System
/dev/sda1 * 2048 411647 204800 83 Linux
/dev/sda2 411648 83886079 41737216 8e Linux LVM
Command (m for help): n
Partition type:
p primary (2 primary, 0 extended, 2 free)
e extended
Select (default p): p
Partition number (3,4, default 3):
First sector (83886080-125829119, default 83886080):
Using default value 83886080
Last sector, +sectors or +size{K,M,G} (83886080-125829119, default 125829119):
Using default value 125829119
Partition 3 of type Linux and of size 20 GiB is set
Command (m for help): p
Disk /dev/sda: 64.4 GB, 64424509440 bytes, 125829120 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x000aa52b
Device Boot Start End Blocks Id System
/dev/sda1 * 2048 411647 204800 83 Linux
/dev/sda2 411648 83886079 41737216 8e Linux LVM
/dev/sda3 83886080 125829119 20971520 83 Linux
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
WARNING: Re-reading the partition table failed with error 16: Device or resource busy.
The kernel still uses the old table. The new table will be used at
the next reboot or after you run partprobe(8) or kpartx(8)
Syncing disks.
[root@standby ~]# partprobe /dev/sda3
Error: Could not stat device /dev/sda3 - No such file or directory.
[root@standby ~]# partprobe /dev/sda
[root@standby ~]# partprobe /dev/sda3
[root@standby ~]# resize2fs /dev/sda3
resize2fs 1.42.9 (28-Dec-2013)
resize2fs: Bad magic number in super-block while trying to open /dev/sda3
Couldn't find valid filesystem superblock.
[root@standby ~]# mkfs.ext4 /dev/sda3
mke2fs 1.42.9 (28-Dec-2013)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
1310720 inodes, 5242880 blocks
262144 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=2153775104
160 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
4096000
Allocating group tables: done
Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done
[root@standby ~]# resize2fs /dev/sda3
resize2fs 1.42.9 (28-Dec-2013)
The filesystem is already 5242880 blocks long. Nothing to do!
[root@standby ~]# df -h --type=shm
df: no file systems processed
[root@standby ~]# vim /etc/fstab
[root@standby ~]# mount -o remount /dev/shm
[root@standby ~]# df -h --type=shm
df: no file systems processed
[root@standby ~]# vim /etc/fstab
[root@standby ~]#
[root@standby ~]# su - oracle
Last login: Sat Aug 19 00:06:17 CST 2023 on pts/0
[oracle@standby ~]$ exit
logout
[root@standby ~]# fdisk -l
Disk /dev/sda: 64.4 GB, 64424509440 bytes, 125829120 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x000aa52b
Device Boot Start End Blocks Id System
/dev/sda1 * 2048 411647 204800 83 Linux
/dev/sda2 411648 83886079 41737216 8e Linux LVM
/dev/sda3 83886080 125829119 20971520 83 Linux
Disk /dev/mapper/rhel-root: 38.4 GB, 38440796160 bytes, 75079680 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk /dev/mapper/rhel-swap: 4294 MB, 4294967296 bytes, 8388608 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
[root@standby ~]# df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 894M 0 894M 0% /dev
tmpfs 12G 0 12G 0% /dev/shm
tmpfs 910M 11M 900M 2% /run
tmpfs 910M 0 910M 0% /sys/fs/cgroup
/dev/mapper/rhel-root 36G 20G 17G 55% /
/dev/sda1 197M 160M 37M 82% /boot
tmpfs 182M 4.0K 182M 1% /run/user/42
tmpfs 182M 24K 182M 1% /run/user/0
/dev/sr0 4.2G 4.2G 0 100% /run/media/root/OL-7.5 Server.x86_64
[root@standby ~]# fdisk -l
Disk /dev/sda: 64.4 GB, 64424509440 bytes, 125829120 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x000aa52b
Device Boot Start End Blocks Id System
/dev/sda1 * 2048 411647 204800 83 Linux
/dev/sda2 411648 83886079 41737216 8e Linux LVM
/dev/sda3 83886080 125829119 20971520 83 Linux
Disk /dev/mapper/rhel-root: 38.4 GB, 38440796160 bytes, 75079680 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk /dev/mapper/rhel-swap: 4294 MB, 4294967296 bytes, 8388608 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
[root@standby ~]# partprobe /dev/sda
[root@standby ~]# mkfs.xfs /dev/sda3
mkfs.xfs: /dev/sda3 appears to contain an existing filesystem (ext4).
mkfs.xfs: Use the -f option to force overwrite.
[root@standby ~]# mkfs.xfs -f /dev/sda3
meta-data=/dev/sda3 isize=512 agcount=4, agsize=1310720 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0, sparse=0
data = bsize=4096 blocks=5242880, 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@standby ~]# file -sL /dev/sda3
/dev/sda3: SGI XFS filesystem data (blksz 4096, inosz 512, v2 dirs)
[root@standby ~]# fdisk -l
Disk /dev/sda: 64.4 GB, 64424509440 bytes, 125829120 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x000aa52b
Device Boot Start End Blocks Id System
/dev/sda1 * 2048 411647 204800 83 Linux
/dev/sda2 411648 83886079 41737216 8e Linux LVM
/dev/sda3 83886080 125829119 20971520 83 Linux
Disk /dev/mapper/rhel-root: 38.4 GB, 38440796160 bytes, 75079680 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk /dev/mapper/rhel-swap: 4294 MB, 4294967296 bytes, 8388608 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
[root@standby ~]# xfs_growfs /dev/sda3
xfs_growfs: /dev/sda3 is not a mounted XFS filesystem
[root@standby ~]# partprobe /dev/sda
[root@standby ~]# partprobe /dev/sda3
[root@standby ~]# xfs_growfs /dev/sda3
xfs_growfs: /dev/sda3 is not a mounted XFS filesystem
[root@standby ~]# pvcreate /dev/sda3
WARNING: xfs signature detected on /dev/sda3 at offset 0. Wipe it? [y/n]: y
Wiping xfs signature on /dev/sda3.
Physical volume "/dev/sda3" successfully created.
[root@standby ~]# vgextend rhel /dev/sda3
Volume group "rhel" successfully extended
[root@standby ~]# lvextend -l +100%FREE /dev/mapper/rhel-root
Size of logical volume rhel/root changed from 35.80 GiB (9165 extents) to <55.80 GiB (14284 extents).
Logical volume rhel/root successfully resized.
[root@standby ~]# resize2fs /dev/mapper/rhel-root
resize2fs 1.42.9 (28-Dec-2013)
resize2fs: Bad magic number in super-block while trying to open /dev/mapper/rhel-root
Couldn't find valid filesystem superblock.
[root@standby ~]# lvextend -r -f -l +100%FREE /dev/mapper/rhel-root
Size of logical volume rhel/root unchanged from <55.80 GiB (14284 extents).
Logical volume rhel/root successfully resized.
meta-data=/dev/mapper/rhel-root isize=512 agcount=4, agsize=2346240 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0 spinodes=0
data = bsize=4096 blocks=9384960, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal bsize=4096 blocks=4582, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
data blocks changed from 9384960 to 14626816
[root@standby ~]# resize2fs /dev/mapper/rhel-root
resize2fs 1.42.9 (28-Dec-2013)
resize2fs: Bad magic number in super-block while trying to open /dev/mapper/rhel-root
Couldn't find valid filesystem superblock.
[root@standby ~]# df -hl
Filesystem Size Used Avail Use% Mounted on
devtmpfs 894M 0 894M 0% /dev
tmpfs 12G 0 12G 0% /dev/shm
tmpfs 910M 11M 900M 2% /run
tmpfs 910M 0 910M 0% /sys/fs/cgroup
/dev/mapper/rhel-root 56G 20G 37G 35% /
/dev/sda1 197M 160M 37M 82% /boot
tmpfs 182M 4.0K 182M 1% /run/user/42
tmpfs 182M 24K 182M 1% /run/user/0
/dev/sr0 4.2G 4.2G 0 100% /run/media/root/OL-7.5 Server.x86_64
[root@standby ~]#
9、描述Oracle数据库如果滚动升级失败后,怎么回到还原点
SQL> select * from v$dataguard_config;
DB_UNIQUE_NAME PARENT_DBUN DEST_ROLE
------------------------------ ------------------------------ -----------------
CURRENT_SCN CON_ID
----------- ----------
standby orcl PHYSICAL STANDBY
1813519 0
orcl NONE PRIMARY DATABASE
0 0
SQL>
SQL> recover managed standby database using current logfile disconnect from session;
ORA-01153: an incompatible media recovery is active
SQL> SQL> alter database open;
alter database open
*
ERROR at line 1:
ORA-10456: cannot open standby database; media recovery session may be in
progress
SQL> select log_mode,open_mode ,database_role from v$database;
LOG_MODE OPEN_MODE DATABASE_ROLE
------------ -------------------- ----------------
ARCHIVELOG MOUNTED PHYSICAL STANDBY
SQL> recover managed standby database using current logfile disconnect from session;
ORA-01153: an incompatible media recovery is active
SQL> /
LOG_MODE OPEN_MODE DATABASE_ROLE
------------ -------------------- ----------------
ARCHIVELOG MOUNTED PHYSICAL STANDBY
SQL> recover managed standby database using current logfile disconnect from session;
ORA-01153: an incompatible media recovery is active
SQL> SQL>
SQL> recover managed standby database cancel
Media recovery complete.
SQL> recover managed standby database using current logfile disconnect from session;
Media recovery complete.
SQL> SQL>
SQL>
SQL>
SQL>
SQL> desc v$restore_point
Name Null? Type
----------------------------------------- -------- ----------------------------
SCN NUMBER
DATABASE_INCARNATION# NUMBER
GUARANTEE_FLASHBACK_DATABASE VARCHAR2(3)
STORAGE_SIZE NUMBER
TIME TIMESTAMP(9)
RESTORE_POINT_TIME TIMESTAMP(9)
PRESERVED VARCHAR2(3)
NAME VARCHAR2(128)
CON_ID NUMBER
SQL> select NAME from v$restore_point;
no rows selected
SQL> startup mount flaskback database to restore point
再往下就是重新变为逻辑库重新升级了
10、配置静态网卡
[root@jtxy1 ~]# nmcli connection show
NAME UUID TYPE DEVICE
ens32 a11a0907-73c4-40b5-bcde-599f9af03705 ethernet ens32
virbr0 9202f47b-3868-4a8b-b03e-38419a7867f1 bridge virbr0
[root@jtxy1 ~]# nmcli connection del ens34
Connection 'ens32' (a11a0907-73c4-40b5-bcde-599f9af03705) successfully deleted.
[root@jtxy1 ~]# nmcli connection add type ethernet con-name ens34 ifname ens34 ipv4.method manual ipv4.addresses 192.168.177.17/24 autoconnect yes
Connection 'ens32' (8605bfc3-46d5-4e00-bb74-542b5d98073a) successfully added.
[root@jtxy1 ~]# ifconfig
挂载光盘:
在虚拟机上复制下来
11、OracleLinux没有软件包的问题
[root@jtxy ~]# yum -y install compat-libstdc++-33(x86_64)-3.2.3
bash: syntax error near unexpected token `('
[root@jtxy ~]# mount /dev/cdrom /mnt
mount: /dev/sr0 is write-protected, mounting read-only
[root@jtxy ~]# yum -y install compat-libstdc++-33(x86_64)-3.2.3
bash: syntax error near unexpected token `('
[root@jtxy ~]# yum -y install compat-libstdc++-33-3.2.3 (x86_64)
bash: syntax error near unexpected token `('
[root@jtxy ~]# mount -a
[root@jtxy ~]# mount /dev/cdrom /mnt
mount: /dev/sr0 is write-protected, mounting read-only
mount: /dev/sr0 is already mounted or /mnt busy
/dev/sr0 is already mounted on /run/media/root/VMware Tools
/dev/sr0 is already mounted on /mnt
[root@jtxy ~]# yum -y install compat-libstdc++-33-3.2.3 (x86_64)
bash: syntax error near unexpected token `('
[root@jtxy ~]# yum -y install compat-libstdc++-33-3.2.3 (x86_64)
bash: syntax error near unexpected token `('
[root@jtxy ~]#
[root@jtxy Packages]# rpm -ivh compat-libstdc++-33-3.2.3-72.el7.x86_64.rpm
warning: compat-libstdc++-33-3.2.3-72.el7.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID ec551f03: NOKEY
Preparing... ################################# [100%]
Updating / installing...
1:compat-libstdc++-33-3.2.3-72.el7 ################################# [100%]
[root@jtxy Packages]# rpm -ivh compat-libstdc++-33-3.2.3-72.el7.i686.rpm
warning: compat-libstdc++-33-3.2.3-72.el7.i686.rpm: Header V3 RSA/SHA256 Signature, key ID ec551f03: NOKEY
error: Failed dependencies:
libc.so.6 is needed by compat-libstdc++-33-3.2.3-72.el7.i686
libc.so.6(GLIBC_2.0) is needed by compat-libstdc++-33-3.2.3-72.el7.i686
libc.so.6(GLIBC_2.1) is needed by compat-libstdc++-33-3.2.3-72.el7.i686
libc.so.6(GLIBC_2.1.3) is needed by compat-libstdc++-33-3.2.3-72.el7.i686
libc.so.6(GLIBC_2.2) is needed by compat-libstdc++-33-3.2.3-72.el7.i686
libc.so.6(GLIBC_2.3) is needed by compat-libstdc++-33-3.2.3-72.el7.i686
libgcc_s.so.1 is needed by compat-libstdc++-33-3.2.3-72.el7.i686
libgcc_s.so.1(GCC_3.0) is needed by compat-libstdc++-33-3.2.3-72.el7.i686
libgcc_s.so.1(GCC_3.3) is needed by compat-libstdc++-33-3.2.3-72.el7.i686
libgcc_s.so.1(GLIBC_2.0) is needed by compat-libstdc++-33-3.2.3-72.el7.i686
libm.so.6 is needed by compat-libstdc++-33-3.2.3-72.el7.i686
[root@jtxy Packages]# rpm -ivh compat-libstdc++-33-3.2.3-72.el7.i686.rpm --nodeps
warning: compat-libstdc++-33-3.2.3-72.el7.i686.rpm: Header V3 RSA/SHA256 Signature, key ID ec551f03: NOKEY
Preparing... ################################# [100%]
Updating / installing...
1:compat-libstdc++-33-3.2.3-72.el7 ################################# [100%]
[root@jtxy Packages]#
12、根目录内存不足时增加逻辑卷
在使用VMware给Linux虚拟机的磁盘扩容后,您可以按照以下步骤在操作系统内部重新分区:
1. 首先,确认磁盘已成功扩容并在VMware中显示出新的容量。
2. 登录到Linux虚拟机的终端或命令行界面。
3. 运行以下命令以重新扫描磁盘并检测其新的大小:
sudo fdisk -l
这将列出系统中存在的磁盘和它们的分区信息。
4. 找到您要重新分区的磁盘,通常是`/dev/sda`(如果只有一个磁盘),并执行以下命令来进入分区编辑模式:
sudo fdisk /dev/sda
5. 使用命令 `p` 来列出磁盘的分区表信息,确认当前的分区情况。
6. 使用命令 `d` 删除不需要的分区。如果您要删除多个分区,请重复此步骤。
7. 使用命令 `n` 创建新的分区。按照提示输入分区号、起始扇区和大小等信息。
8. 使用命令 `t` 设置新分区的类型(例如:Linux文件系统为83)。
9. 使用命令 `p` 确认新分区的设置。
10. 如果需要保存更改并退出分区编辑模式,则使用命令 `w`。
11. 完成分区编辑后,重新加载分区表,使更改生效:
```
sudo partprobe /dev/sda
```
12. 运行以下命令重新扩展文件系统,以将新分区的空间添加到相应的文件系统中。请根据您使用的文件系统类型选择适当的命令:
- 对于ext4文件系统:
```
sudo resize2fs /dev/sdaX
```
其中,`/dev/sdaX` 是您要调整大小的分区。
- 对于XFS文件系统:
```
sudo xfs_growfs /dev/sdaX
```
其中,`/dev/sdaX` 是您要调整大小的分区。
完成以上步骤后,您的Linux操作系统就会重新分配和利用扩容后的磁盘空间。请确保在进行这些操作时谨慎,并备份重要数据以防止意外情况发生。
格式化新分区。根据您的需求和喜好,可以选择多种文件系统格式进行格式化。以下是一些常用的格式化命令示例:
对于ext4文件系统:
复制代码
sudo mkfs.ext4 /dev/sdaX
对于XFS文件系统:
复制代码
sudo mkfs.xfs /dev/sdaX
请注意,将上述命令中的 /dev/sdaX 替换为您实际的新分区名称。
要将`/dev/sda3`和`/dev/mapper/rhel-root`合并为一个LVM卷组,您可以按照以下步骤进行操作:
1. 确保`/dev/sda3`上没有任何重要数据,因为该分区将被用于创建LVM逻辑卷。
2. 先卸载`/mnt/new_partition`目录,确保没有进程使用这个挂载点:
sudo umount /mnt/new_partition
3. 创建一个物理卷(Physical Volume):
sudo pvcreate /dev/sda3
4. 将物理卷添加到卷组(Volume Group)中,例如`rhel`:
sudo vgextend rhel /dev/sda3
注意:`rhel`是默认的逻辑卷组名称,如果您的系统使用其他逻辑卷组,请相应地替换。
5. 扩展根卷组(root volume group)的逻辑卷(Logical Volume),以包括`/dev/sda3`:
lvextend -r -f -l +100%FREE /dev/mapper/rhel-root
这将扩展`/dev/mapper/rhel-root`卷以使用所有可用空间。
6. 调整逻辑卷的文件系统大小,以便它能够利用更大的空间:
sudo resize2fs /dev/mapper/rhel-root
这将调整文件系统以适应扩展的逻辑卷大小。
现在,您应该已经将`/dev/sda3`与`/dev/mapper/rhel-root`合并到一个LVM卷组中,并且根目录的大小已扩展。您可以运行`df -h`命令来验证挂载点的大小是否已增加。
请注意,在执行此类操作之前,务必备份重要数据,并确保了解所涉及的风险和操作。如果不确定,请咨询有经验的系统管理员或专业人士。
13、配置docker镜像仓库
配置docker仓库
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://g0q805gt.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
Ubuntu(旧使用新贵) - /var/log/upstart/docker.log
Ubuntu(新使用 systemd ) - sudo journalctl -fu docker.service
亚马逊 Linux AMI - /var/log/docker
Boot2Docker - /var/log/docker.log
Debian GNU/Linux - /var/log/daemon.log
CentOS - cat /var/log/message | grep docker
CoreOS - journalctl -u docker.service
Fedora - journalctl -u docker.service
红帽企业 Linux 服务器 /var/log/messages | grep docker
OpenSuSE - journalctl -u docker.service
macOS - ~/Library/Containers/com.docker.docker/Data/log/vm/docker.log
Windows - Get-EventLog -LogName Application -Source Docker -After (Get-Date).AddMinutes(-5) | Sort-Object Time ,正如 这里 提到的
14、Linux内存调度的概念
15、yum源报错1
Error downloading packages:
autogen-libopts-5.18-5.el7.x86_64: [Errno 5] [Errno 2] No such file or directory
ntp-4.2.6p5-29.el7.centos.2.x86_64: [Errno 5] [Errno 2] No such file or directory
ntpdate-4.2.6p5-29.el7.centos.2.x86_64: [Errno 5] [Errno 2] No such file or directory
由方案4获得灵感,查看/usr/bin下的python2
把/usr/libexec/urlgrabber-ext-down的 #! /usr/bin/python 改成#! /usr/bin/python2就好了
noop:不进行任何操作单纯的先进先出,适用于SSD或者RAID。
deadline:确保每个请求在一定周期获得响应。
cfq(完全公平排队):为所有进程提供公平I/O带宽,根据进程优先级和权重分配,确保每个用户(适用于多用户操作系统)获得公平的磁盘访问权限。
anticipatory: (预期):预测未来I/O请求,基于电梯算法,按照在磁盘的位置进行排序,减少磁头移动。有时也会导致系统性能下降。
调整:
echo命令将所选的调度策略写入/sys/block/{DEVICE-NAME}/queue/scheduler
如改为noop策略
echo noop > /sys/block/sda/queue/scheduler
优化I/O:
1、使用固态ssd,高读取,低延迟。2、启动磁盘缓存使用bcache工具3、不同的文件系统,如:XFS在大数据和高并发场景表现良好4、配置RAID(0,1,5),将多个磁盘组成一个逻辑盘,提高读写和并发
raid0提高读写,
16、可以正常使用的yum源镜像
[root@zib-server yum.repos.d]# cat CentOS-Base.repo
# CentOS-Base.repo
#
# The mirror system uses the connecting IP address of the client and the
# update status of each mirror to pick mirrors that are updated to and
# geographically close to the client. You should use this for CentOS updates
# unless you are manually picking other mirrors.
#
# If the mirrorlist= does not work for you, as a fall back you can try the
# remarked out baseurl= line instead.
#
#
[base]
name=CentOS-$releasever - Base - mirrors.aliyun.com
failovermethod=priority
baseurl=http://mirrors.aliyun.com/centos/7/os/x86_64/
http://mirrors.aliyuncs.com/centos/7/os/$basearch/
http://mirrors.cloud.aliyuncs.com/centos/7/os/$basearch/
gpgcheck=1
gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7
#released updates
[updates]
name=CentOS-$releasever - Updates - mirrors.aliyun.com
failovermethod=priority
baseurl=http://mirrors.aliyun.com/centos/7/updates/$basearch/
http://mirrors.aliyuncs.com/centos/$releasever/updates/$basearch/
http://mirrors.cloud.aliyuncs.com/centos/$releasever/updates/$basearch/
gpgcheck=1
gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7
#additional packages that may be useful
[extras]
name=CentOS-$releasever - Extras - mirrors.aliyun.com
failovermethod=priority
baseurl=http://mirrors.aliyun.com/centos/7/extras/$basearch/
http://mirrors.aliyuncs.com/centos/$releasever/extras/$basearch/
http://mirrors.cloud.aliyuncs.com/centos/$releasever/extras/$basearch/
gpgcheck=1
gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7
#additional packages that extend functionality of existing packages
[centosplus]
name=CentOS-$releasever - Plus - mirrors.aliyun.com
failovermethod=priority
baseurl=http://mirrors.aliyun.com/centos/7/centosplus/$basearch/
http://mirrors.aliyuncs.com/centos/$releasever/centosplus/$basearch/
http://mirrors.cloud.aliyuncs.com/centos/$releasever/centosplus/$basearch/
gpgcheck=1
enabled=0
gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7
#contrib - packages by Centos Users
[contrib]
name=CentOS-$releasever - Contrib - mirrors.aliyun.com
failovermethod=priority
baseurl=http://mirrors.aliyun.com/centos/7/contrib/$basearch/
http://mirrors.aliyuncs.com/centos/$releasever/contrib/$basearch/
http://mirrors.cloud.aliyuncs.com/centos/$releasever/contrib/$basearch/
gpgcheck=1
enabled=0
gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7
[root@zib-server yum.repos.d]#
vim CentOS-SCLo-rh.repo
[centos-sclo-rh]
name=CentOS-7 - SCLo rh
baseurl=https://mirrors.aliyun.com/centos/7/sclo/x86_64/rh/
gpgcheck=1
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-SIG-SCLo
mount -t iso9660 -o loop CentOS-7-x86_64-DVD-2009.iso /media
[root@postgres yum.repos.d]# cat rhel-source.repo
[rhel-source]
name=Red Hat Enterprise
baseurl=file:///mnt
enabled=1
gpgcheck=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release
[root@postgres yum.repos.d]#
17、本地的上传的iso镜像文件,挂载到yum库
mount -t iso9660 -o loop CentOS-7-x86_64-DVD-2009.iso /media
[root@postgres yum.repos.d]# cat rhel-source.repo
[rhel-source]
name=Red Hat Enterprise
baseurl=file:///mnt
enabled=1
gpgcheck=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release
[root@postgres yum.repos.d]#
18、重新安装yum源
rpm -qa |grep yum |xargs rpm -e --nodeps #卸载原来的yum源
Centos7
wget https://mirrors.aliyun.com/centos/7/os/x86_64/Packages/yum-3.4.3-168.el7.centos.noarch.rpm
wget https://mirrors.aliyun.com/centos/7/os/x86_64/Packages/yum-metadata-parser-1.1.4-10.el7.x86_64.rpm
wget https://mirrors.aliyun.com/centos/7/os/x86_64/Packages/yum-plugin-fastestmirror-1.1.31-54.el7_8.noarch.rpm
rpm -ivh yum-3.4.3-168.el7.centos.noarch.rpm yum-metadata-parser-1.1.4-10.el7.x86_64.rpm yum-plugin-fastestmirror-1.1.31-54.el7_8.noarch.rpm
wget -O/etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
# cat rhel-source.repo
[rhel-source]
name=Red Hat Enterprise Linux $releasever - $basearch - Source
baseurl=file:///mnt
enabled=1
gpgcheck=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release
yum clean all && yum makecache
yum-config-manager \
--add-repo \
https://mirrors.ustc.edu.cn/docker-ce/linux/centos/docker-ce.repo
sed -i 's|https://download.docker.com|https://mirrors.ustc.edu.cn/docker-ce|g' your_file.txt
#安装工具包
yum install -y yum-utils
##如果报错bash: /bin/yum: /usr/bin/python: bad interpreter:没有那个文件或目录
请查看:https://blog.csdn.net/m0_60274784/article/details/133860499这个文档
19、在PG数据库主备库上快速生成大量的数据
压力测试 pgbench -i -s 500 testdb
mytestdb=# CREATE OR REPLACE FUNCTION random_string(
num INTEGER,
chars TEXT default '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'
) RETURNS TEXT
LANGUAGE plpgsql
AS $$
DECLARE
res_str TEXT := '';
BEGIN
IF num < 1 THEN
RAISE EXCEPTION 'Invalid length';
END IF;
FOR __ IN 1..num LOOP
res_str := res_str || substr(chars, floor(random() * length(chars))::int + 1, 1);
END LOOP;
RETURN res_str;
END $$;
CREATE FUNCTION
mytestdb=# create table t1 (id serial, name varchar(20));
CREATE TABLE
mytestdb=# insert into t1 (name) select random_string(20);
INSERT 0 1
mytestdb=# insert into t1 (name) select random_string(20);
INSERT 0 1
mytestdb=# insert into t1 (name) select random_string(20);
INSERT 0 1
mytestdb=# insert into t1 (name) select random_string(20);
INSERT 0 1
mytestdb=# insert into t1 select * from t1;
INSERT 0 13
mytestdb=# insert into t1 select * from t1;
INSERT 0 26
mytestdb=# insert into t1 select * from t1;
INSERT 0 52
mytestdb=# insert into t1 select * from t1;
INSERT 0 104
mytestdb=# insert into t1 select * from t1;
INSERT 0 208
数据库、操作系统、前端
1、Oracle数据库常用的命令
Create tablespace ASSETS logging datafile 'D:\app\Administrator\oradata\shitan\ASSETS.dbf' size 2000m autoextend on next 50m maxsize unlimited extent management local segment space management auto;
--添加表空间
ALTER TABLESPACE ASSETS ADD DATAFILE 'D:\app\Administrator\oradata\shitan\ASSETS1.dbf' SIZE 2000M AUTOEXTEND ON NEXT 50M MAXSIZE UNLIMITED;
--修改用户默认表空间
Alter user scott identified by scott123 default tablespace ASSETS;
--修改用户默认表空间
Alter user scott identified by scott123 default tablespace ASSETS;
--赋权限
grant connect,resource,dba to scott;
--设置数据库密码不过期
ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED;
impdp导入:将数据库dmp文件放入\app\Administrator\admin\shitan\dpdump下,win+R输入cmd,输入如下指令impdp scott/scott123@shitan dumpfile=数据库文件名.dmp logfile=日志文件名.log full=y
2、MySQL常见的问题
表连接,笛卡尔积,连接条件被忽略
第一个表中的所有的行与第二个表中的所有行相连接
等,非等,自,外,sql99,using字句,on子句。子查询,CRUD,
schema和catalog区别
索引,
由SQL接口,解析器,优化器,缓存,存储引擎组成的,MySQL文件分类,日志分析工具
3、数据库专业毕业答辩常见问题
常见的数据库问题
1,常见的DML(数据操纵语言)有哪些?分别有什么作用?
增删改查,融合。
2,常见的DDL(数据定义语言)有哪些?分别有什么作用?
定义数据库对象,包括表、索引、视图等,
create,alter,drop,truncate,commit
TRUNCATE:用于快速删除表中的所有数据,但保留表的结构.
COMMENT:用于向数据字典中的表、列或其他对象添加注释
3,常见的TCL(事务控制语言)有哪些?分别有什么作用?
commit,rollback,
SAVEPOINT:用于在事务处理过程中创建保存点,可以在之后回滚到该保存点
SET TRANSACTION:用于设置事务的特性,如隔离级别。
4,常见的DCL(数据控制语言)有哪些?分别有什么作用?
是用于授予或撤销访问数据库对象,权限的语言
grant,revoke
5,在select 查询语句中,常见的子句有哪些?
SQL中独立的部分,表示不同的操作或者条件,组合起来构成查询语句selete ,from,where, group by,having,order by
6, where 子句和 having 子句的区别是什么?
where子句不涉及聚合函数,是对数据表中的数据进行条件过滤。
having子句常在已经分组的数据上进行过滤,与group by连用,在group by 之后筛选聚合后的结果集(涉及聚合函数sum,avg等)。
总的来说,WHERE子句用于在原始数据上进行筛选,而HAVING子句用于在已经进行了分组的数据上进行筛选,没有groupby 不能使用having语句。
7,order by 子句有什么作用?在排序中 asc 和 desc 分别代表什么含义?
对查询的结果进行排序,可以按照一个列或多个列进行对比。
8,在数据库中常见的聚合函数有哪些?分别有什么作用?
count,sum,avg,max,min
9,在数据库中常见的数据库对象有哪些?分别有什么作用?
表,视图,索引,存储过程,函数,触发器,约束。
10,在数据库中 truncate 语句和delete语句的区别是什么?
truncate是DDL语言,快速删除表中的数据,不会触发触发器,不产生日志,无法回滚,保留表的结构。
delete属于逐行的删除表中的数据,dml命令,产生日志可以回滚。
11,在数据库中常见的约束有哪些?分别有什么作用?
主键,外键,唯一键,非空,检查约束。
12,索引的作用是什么?如何创建一个索引?
提高检索的速度,加速排序,加速连接操作,保证数据完整性。
create index index_name on (column1,..)
做增删改操作时会减低性能。
索引是数据库中用于加速数据检索的数据结构,索引通常是在数据库表的一个或多个列上创建的,索引可能会占用相当大的存储空间。
13,在数据库中 存储过程和函数有什么区别?
1、存储过程可以返回0到多个结果集或,可以通过输出参数返回多个值,函数必须且只能返回一个值。
2、存储过程可以独立执行也可被其他程序调用执行,函数常用于计算和返回一个单一的值,可以作为查询的一部分可以被其他函数或者存储过程调用。
3、函数常用来封装特定的计算逻辑,不允许修改数据库数据,不包含流程控制语句,存储过程则可以。
4、存储过程调用使用CALL语句,函数调用使用select语句
14,在数据库中常见的故障有哪些?如何处理?
硬件故障:可能包括磁盘故障、内存故障、CPU故障等,可以使用raid冗余技术。
软件故障:括数据库引擎崩溃、操作系统故障、网络问题等,定期对数据库软件进行升级和维护可。
数据损坏:人为或者很多原因,定期进行数据库备份,并测试备份的可用性和完整性
性能问题:查询慢、连接超时、死锁等,定期进行性能调优。
15,在数据库中常见的权限有哪些?角色和权限有什么关系?
系统级权限:创建session,table,view,procedure,sequence,trigger
对象级权限:增删查改,修改表结构,创建索引,外键
角色权限(是一组权限集合):如CONNECT、RESOURCE等
系统特权:sysdba最高管理权限,可进行所有操作,sysoper 有非常基本的系统管理权限。
视图权限:在 Oracle 中,可以为用户分配对视图的 SELECT、INSERT、UPDATE 和 DELETE 权限,以控制用户对视图的操作。
16,在数据库中常见的高可用的技术有哪些?分别有什么作用?
上面的这些问题要结合你的系统来回答,
比如注册功能 对应在数据库层面怎么实现?
答曰:注册在数据库层面就是一个 插入操作,insert 语句来实现
再比如 查询功能 在数据层面如何实现?
答曰:登录在数据库层面就是一个 查询操作,
使用select 查询语句 查询数据中是否有这个用户,以及配置密码是否正确
4、Linux网卡不能成功开启常见问题
是因为network.service与networkmanager冲突
service NetworkManager stop
systemctl start network.service
5、Linux系统无法通过图形化去登录
大多数是因为环境变量的问题.
需要删除几条环境变量,或者使用键盘快捷键alt+ctl +F2临时使用命令行去登录系统
6、使用scp批量从windows上获取文件
现在需要在使用scp命令把Linux机器上把IP地址为192.168.43.142的Windows下的D:\Users\lenovo\Desktop\集群搭建目录中的Python-3.9.16.tgz文件下载到本地的/opt/soft目录下
scp lenovo@192.168.1.144:d:\\Users\\lenovo\\Desktop\\集群搭建\\安装程序\\PGDB-16.3-8k-rhel7-x86_64.tar.gz /opt/soft
scp lenovo@192.168.2.120:d:\\Users\\lenovo\\Desktop\\服务器\\zookeeper-3.4.13.tar.gz /home/postgres/
scp zoo.cfg lenovo@192.168.2.120:d:\\Users\\lenovo\\Desktop\\服务器\\
7、使用wget命令从网站获取安装包
[root@postgres local]# wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-6.0.9.tgz
--2024-07-20 08:31:55-- https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-6.0.9.tgz
Resolving fastdl.mongodb.org (fastdl.mongodb.org)... 18.65.168.116, 18.65.168.42, 18.65.168.24, ...
Connecting to fastdl.mongodb.org (fastdl.mongodb.org)|18.65.168.116|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 72583110 (69M) [application/gzip]
Saving to: ‘mongodb-linux-x86_64-rhel70-6.0.9.tgz.1’
100%[===========================================================>] 72,583,110 3.64MB/s in 21s
2024-07-20 08:32:19 (3.22 MB/s) - ‘mongodb-linux-x86_64-rhel70-6.0.9.tgz.1’ saved [72583110/72583110]
[root@postgres local]# wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-6.0.9.tgz
-bash: wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-6.0.9.tgz: No such file or directory
[root@postgres local]# ls
bin fbase include lib64 mongodb-linux-x86_64-rhel70-6.0.9.tgz sbin src
etc games lib libexec mongodb-linux-x86_64-rhel70-6.0.9.tgz.1 share
[root@postgres local]# which wget
8、MySQL数据库禁用只监听ipv6,不监听ipv4的解决方法
[root@localhost ~]# sysctl -p
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
配置mysql的配置文件/etc/my.conf,在mysqld下面添加bind-address=0.0.0.0 然后重新启动mysql服务就能正常监听ibv4地址了
[root@localhost ~]# cat /etc/my.cnf
# For advice on how to change settings please see
# http://dev.mysql.com/doc/refman/5.7/en/server-configuration-defaults.html
[mysqld]
#
# Remove leading # and set to the amount of RAM for the most important data
# cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%.
# innodb_buffer_pool_size = 128M
#
# Remove leading # to turn on a very important data integrity option: logging
# changes to the binary log between backups.
# log_bin
#
# Remove leading # to set options mainly useful for reporting servers.
# The server defaults are faster for transactions and fast SELECTs.
# Adjust sizes as needed, experiment to find the optimal values.
# join_buffer_size = 128M
# sort_buffer_size = 2M
# read_rnd_buffer_size = 2M
#validate_password = LOW
#validate_password_length = 4
bind-address=0.0.0.0
server-id=1
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
#skip-grant-tables
port=3306
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
default_authentication_plugin=mysql_native_password
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
9、杀死某个端口下的全部进程
[root@postgres ~]# netstat -ntpl
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN 1379/cupsd
tcp 0 0 0.0.0.0:5432 0.0.0.0:* LISTEN 4360/postgres
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1612/master
tcp 0 0 0.0.0.0:10051 0.0.0.0:* LISTEN 4125/zabbix_server:
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 1/systemd
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 3518/nginx: master
tcp 0 0 192.168.122.1:53 0.0.0.0:* LISTEN 2072/dnsmasq
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1372/sshd
tcp6 0 0 ::1:631 :::* LISTEN 1379/cupsd
tcp6 0 0 :::5432 :::* LISTEN 4360/postgres
tcp6 0 0 ::1:25 :::* LISTEN 1612/master
tcp6 0 0 :::10051 :::* LISTEN 4125/zabbix_server:
tcp6 0 0 :::111 :::* LISTEN 1/systemd
tcp6 0 0 :::80 :::* LISTEN 3518/nginx: master
tcp6 0 0 :::22 :::* LISTEN 1372/sshd
[root@postgres ~]# fuser -k -n tcp 10051
10051/tcp: 4125 4126 4127 4128 4133 4134 4135 4136 4138 4140 4142 4144 4148 4150 4151 4154 4161 4162 4163 4167 4170
[root@postgres ~]# netstat -ntpl
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN 1379/cupsd
tcp 0 0 0.0.0.0:5432 0.0.0.0:* LISTEN 4360/postgres
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1612/master
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 1/systemd
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 3518/nginx: master
tcp 0 0 192.168.122.1:53 0.0.0.0:* LISTEN 2072/dnsmasq
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1372/sshd
tcp6 0 0 ::1:631 :::* LISTEN 1379/cupsd
tcp6 0 0 :::5432 :::* LISTEN 4360/postgres
tcp6 0 0 ::1:25 :::* LISTEN 1612/master
tcp6 0 0 :::111 :::* LISTEN 1/systemd
tcp6 0 0 :::80 :::* LISTEN 3518/nginx: master
tcp6 0 0 :::22 :::* LISTEN 1372/sshd
[root@postgres ~]#
10、Linux系统根目录爆满的解决方法
df -h 目录 :看是不是在/目录下面
du -Sh | head -n 3 目录: 看看多大,是否是导致/目录磁盘占满的原因
查看usr和var目录
已经删除的文件被进程占用,重启这个进程就行”
或者使用“输入命令 lsof -n | grep delete”查看信息
11、监控zabbix对于某个脚本无法执行的情况
字面意思是执行这个脚本没有权限。
我们知道zabbix 服务端监控代理端使用过zabbix agent去完成监控的。
实际上在这儿是agent去执行.sh脚本,那么很可能是agent没有相应的权限去指向.sh脚本
zabbix_sender -z 192.168.6.108 -p 10051 -s 192.168.6.109 -k temp.cpu -o $(bash /root/test.sh) -vv
解决思路:
先查看agent端zabbix服务的权限(需要提升为root权限)——修改agent配置文件,修改AllowRoot=1——再修改agent.service的用户为root。
1.先查看agent端zabbix服务的权限
ps -ef |grep zabbix
一般都是zabbix权限
2.修改agent配置文件,修改AllowRoot=1
到zabbix_agentd.conf的目录下
sudo vim zabbix_agentd.conf
# will try to switch to the user specified by the User configuration option instead.
# Has no effect if started under a regular user.
# 0 - do not allow
# 1 - allow
#
# Mandatory: no
# Default:
AllowRoot=1
### Option: User
# Drop privileges to a specific, existing user on the system.
# Only has effect if run as 'root' and AllowRoot is disabled.
#
# Mandatory: no
# Default:
# User=zabbix
### Option: Include
# You may include individual files or all files in a directory in the configuration file.
# Installing Zabbix will create include directory in /usr/local/etc, unless modified during the compile time.
#
# Mandatory: no
# Default:
# Include=
3.再修改agent.service的用户为root。
sudo vim /usr/lib/systemd/system/zabbix-agent.service
分别在第16行和第17行
修改
User=root
Group=root
4.重启agent服务
sudo systemctl restart zabbix-agent.service
5.再查看agent服务
ps -ef |grep zabbix
12、处理一个PG数据库误删除wal文件导致无法开机的情况
问题
一个开发环境数据库无法访问,发现存储数据库的挂载点存储使用率达到了100%,导致数据库宕机且无法再启动。追踪发现是pg_wal日志把存储撑爆了,然后就直接rm掉了,直接导致了数据库的启动报错。
二 解决方案
使用pg_resetwal重置wal日志
查看控制文件是否正常
pg_controldata -D $PGDATA
如果控制文件没问题,可以进行重置。
pg_resetwal -D $PGDATA
启动数据库
systemctl start postgresql
检查数据库状态
systemctl status postgresql
注意:这种方式会丢失未做checkpoint的wal数据,丢失数据的多少受checkpoint_timeout参数的影响。
使用pg_resetwal注意项
在命令行中指定数据目录PGDATA
这个命令不能在服务器正在运行时被使用,如果在数据目录中发现一个服务器锁文件,pg_resetwal将拒绝启动。
如果服务器崩溃那么一个锁文件可能会被残留,需先移除锁文件且确认没有服务器进程存活,然后再运行pg_resetwal。
使用pg_resetwal后,数据库可能包含由于部分提交事务产生的不一致数据。应立刻备份数据库,初始化实例后重新恢复数据,检查不一致的数据并修复。
pg_resetwal是服务端工具,不能在客户端运行。
如果pg_resetwal无法通过读取pg_control确定合适的值时,才需要选项-c、-l、-m、-x、-O、-o、-e等参数。具体使用可参考官方指南,实在不行只能使用-f参数。但是恢复的数据库还是值得怀疑,一次立即的备份和重新恢复是势在必行的,在备份之前不要在该数据库中执行任何数据修改操作,因为任何这样的动作都可能使破坏更严重。
使用pg_resetwal官方指南
13、PG数据库配置完白名单后还是无法访问的情况
查看监听:
show listen_addresses ;
cat ~/.bash_profile
查看允许的连接:
select * from pg_hba_file_rules ;
查看套接字安全:
show unix_socket_directories
14、Linux系统添加SWAP交换分区,一般情况下不要去动客户给定的磁盘大小
添加swap分区,使用文件创建内存交换文件
[root@pg-2 dev]# dd if=/dev/zero of=/tmp/swap bs=1M count=12800
^C4427+0 records in
4427+0 records out
4642045952 bytes (4.6 GB) copied, 39.3907 s, 118 MB/s
[root@pg-2 dev]# cd /tmp
[root@pg-2 tmp]# ls
swap
[root@pg-2 tmp]# cat swap
^C[root@pg-2 tmp]# ll swap
-rw-r--r--. 1 root root 4642045952 Jun 28 10:46 swap
[root@pg-2 tmp]# file swap
swap: data
[root@pg-2 tmp]# mkswap /tmp/swap
Setting up swapspace version 1, size = 4533244 KiB
no label, UUID=5673e957-9549-43af-ac93-7c0d4c3d98b8
[root@pg-2 tmp]# swapon /tmp/swap
swapon: /tmp/swap: insecure permissions 0644, 0600 suggested.
[root@pg-2 tmp]# swapon /tmp/swap
swapon: /tmp/swap: insecure permissions 0644, 0600 suggested.
swapon: /tmp/swap: swapon failed: Device or resource busy
[root@pg-2 tmp]# fres
-bash: fres: command not found
##添加swap分区,内存不足的时候,为了让后续的程序可以顺利运行,需要将暂时不使用的程序与数据都挪到内存交换分区中
[root@pg-2 tmp]# free
total used free shared buff/cache available
Mem: 8009424 136048 3035200 33220 4838176 7514444
Swap: 4533244 0 4533244
[root@pg-2 tmp]# df -hl
Filesystem Size Used Avail Use% Mounted on
/dev/vda1 50G 5.8G 45G 12% /
devtmpfs 3.9G 0 3.9G 0% /dev
tmpfs 3.9G 0 3.9G 0% /dev/shm
tmpfs 3.9G 33M 3.8G 1% /run
tmpfs 3.9G 0 3.9G 0% /sys/fs/cgroup
/dev/vdb 100G 33M 100G 1% /data
tmpfs 783M 0 783M 0% /run/user/0
##查看最大的磁盘,挂载到PG的data目录
[root@pg-3 ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
vda 252:0 0 50G 0 disk
├─vda1 252:1 0 500M 0 part /boot
└─vda2 252:2 0 49.5G 0 part
└─rhel-root 253:0 0 49.5G 0 lvm /
vdb 252:16 0 100G 0 disk
├─vdb1 252:17 0 8G 0 part [SWAP]
└─vdb2 252:18 0 92G 0 part /data
15、PG数据库主备恢复日志重做,由于时间线不一致导致主备不能正常运行。
问题:
那种如果主备库检查点不一致(也就是您说的时间线不一致),导致备库无法开启,或者备库能开启但不能同步(这种情况我不确定有没有,可能是脑裂了),这种情况除了删除备库,重新生成备库外,还有没有像Oracle那种闪回数据库并从某个节点重新应用日志的功能。
可以,两种情况,一种是日志差的太多了,wal中缺失,如有归档,可以从归档恢复,没有归档就只能重做了,另一种是备库超太多,可以把时间线往前推,从主库的某一刻开始重新恢复
1、在数据库启动时,PostgreSQL 会检查 pg_wal 目录下的 WAL 文件,以便确定需要恢复的事务和数据库状态。
主数据库启动:
首先,主数据库会启动并运行。在运行过程中,主数据库会持续地生成 WAL 日志文件,记录所有的数据库更改操作。
流复制到备库:
数据库会将生成的 WAL 文件传输给备库。备库会按照接收到的 WAL 文件进行恢复,以确保自己与主数据库保持同步。
备库启动:
备库在初始启动时,会检查自己的 pg_wal 目录,确定自己的 WAL 日志文件的状态。
如果备库是新建的,它可能需要从主数据库或基础备份(base backup)开始进行恢复。这个过程通常涉及复制主数据库中的数据文件并应用 WAL 日志文件,使备库的状态与主数据库一致。
**可以设置 wal_checksum 参数来启用或禁用 WAL 校验和。默认情况下,校验和是启用的
2、如果需要关闭主库进行维护,并确保所有未发送到备库的 WAL 日志被传输过去,可以通过以下步骤操作:
停止主数据库写入,确保不会有新的 WAL 日志生成:
SELECT pg_wal_replay_pause();
等待 WAL 日志传输完成:
你可以查看主库和备库的复制状态,确认没有复制延迟或者还在传输中的 WAL 日志。
关闭主库,维护:
恢复wal日志传输:
SELECT pg_wal_replay_resume();
3、处理网络问题而导致主备丢失数据,即主库的日志已经被生成但还没有完全传输到备库,可以考虑以下处理方式:
检查和恢复复制状态:
确认复制槽位的状态和复制连接的情况。如果连接断开或出现问题,可以重新设置复制槽位或者重新建立连接。
SELECT slot_name, slot_type, database, active, restart_lsn, confirmed_flush_lsn
FROM pg_replication_slots;
使用 pg_receivewal:
PostgreSQL 提供的工具,用于从主服务器直接接收 WAL 日志。你可以在备库上启动 pg_receivewal 进程来手动接收和应用缺失的 WAL 日志。例如:
pg_receivewal -D /path/to/store/wal/logs -U replication -p 5432 -h <主服务器地址>
手动应用 WAL 日志:
需要使用 pg_wal_replay 或 pg_wal_replay_resume 命令来手动应用这些日志。确保在应用之前备份好数据库,以防止数据丢失。
16、MySQL数据库使用第三方工具自动生成ER图表格基础
生成ER图,要求是根据下面授给的MYQL数据库的SQL语句:
CREATE TABLE `sys_dept` (
`dept_id` bigint NOT NULL,
`parent_id` bigint,
`ancestors` varchar(50),
`dept_name` varchar(30),
`order_num` int,
`leader` varchar(20),
`phone` varchar(11),
`email` varchar(50),
`status` char(1),
`del_flag` char(1),
`create_by` varchar(64),
`create_time` datetime,
`update_by` varchar(64),
`update_time` datetime,
PRIMARY KEY (`dept_id`)
)
CREATE TABLE `sys_user` (
`user_id` bigint NOT NULL,
`dept_id` bigint,
`username` varchar(30),
`password` varchar(100),
`salt` varchar(20),
`email` varchar(50),
`phone` varchar(11),
`create_by` varchar(64),
`create_time` datetime,
`update_by` varchar(64),
`update_time` datetime,
PRIMARY KEY (`user_id`),
KEY `dept_id` (`dept_id`),
CONSTRAINT `sys_user_dept_fk` FOREIGN KEY (`dept_id`) REFERENCES `sys_dept` (`dept_id`) ON DELETE CASCADE ON UPDATE CASCADE
17、前端开发里边各种妖魔鬼怪的图片加载路径
<el-table-column label="商品图片" align="center" prop="image" width="100">
<template slot-scope="scope">
<img :src="require('@/views/system/assets/daily/' + scope.row.image + '.png')" alt="图片" style="width: 50px; height: 50px;">
</template>
</el-table-column>
<el-table-column label="头像" align="center">
<template slot-scope="scope">
<img src="@/assets/user.png" alt="图片" style="width: 50px; height: 50px;">
</template>
</el-table-column>
<div v-for="(item, index) in paginatedCartList" :key="index" class="item">
<div class="product">
<!-- < img:src ="require(`../../assets/daily/${item.image}.png`)" class="product-image">-->
<img :src="require(`../../assets/daily/${item.image}.png`)" class="product-image">
<h3 style="margin-bottom: 10px; font-size: 14px;"class="title">{{ item.title }}</h3>
<p>
<span style="font-size: 12px; color: #999; text-decoration: line-through;">原价:¥{{ item.originalPrice }}</span>
<span style="font-size: 16px; color: #ff4d4f; margin-left: 10px;">现价:¥{{ item.currentPrice }}</span>
</p>
<p>
<el-button type="text" class="button hover-effect" icon="el-icon-star-off">添加收藏</el-button>
<el-button type="text" class="button hover-effect" icon="el-icon-goods">加购物车</el-button>
</p>
</div>
18 、前端VUE安装
https://blog.csdn.net/WHF__/article/details/129362462
node -v // 显示node.js版本
npm -v // 显示npm版本
1.设置镜像源
npm config set registry https://registry.npmmirror.com
2.查看npm当前镜像源是否是https://registry.npmmirror.com
npm config get registry
3.接下来运行npm安装依赖即可
全局配置切换到淘宝源
npm config set registry https://registry.npm.taobao.org
全局配置切换到官方源
npm config set registry http://www.npmjs.org
检测是否切换到了淘宝源
npm info underscore
=========================
npm install -g @vue/cli
切换到目的木录安装element ui
npm i element-ui -S
引入
import ElementUI from 'element-ui';
import 'element-ui/lib/theme-chalk/index.css';
https://element.eleme.cn/#/zh-CN/component/quickstart
------------------------------------------
19、Oracle数据库高可用理论
Oracle数据库高可用分析与实实践
Oracle数据库高可用分析与实实践主要包括备份恢复、容灾、负载均衡、数据复制等方面。其中,备份恢复是保障数据库可靠性的基础技术,也是本书的重点内容之一。
一、 Oracle高可用的概念
在现代企业信息化系统中,应用的高可用性是至关重要的。Oracle数据库作为一款商业数据库,在高可用性方面是非常强大的。所谓Oracle高可用,是指通过合理的技术手段和措施,可以满足用户对数据库系统的高可靠性、高可用性等要求,避免因为各种原因导致业务中断和数据丢失的风险。
二、 Oracle备份恢复的所有技术
数据库备份技术
数据库备份是数据库管理工作中最基本的工作之一。其主要功能是通过备份数据库中的数据和元数据,以便在数据库发生故障时进行恢复。根据不同的备份方式,可以将Oracle数据库备份分为物理备份和逻辑备份两种类型:
物理备份:将数据库文件以二进制形式备份,即备份所有数据文件、控制文件和归档日志。该备份方式可以快速地进行恢复,并且备份后的数据完全一致,但备份过程对系统资源消耗较大。适用于大规模数据库的备份。
逻辑备份:将数据以SQL语句的形式备份,即使用expdp命令或rman命令备份数据库。该备份方式备份容易、成本低,但恢复时间较长。适用于小型数据库或者需要频繁备份的数据库。
数据库恢复技术
数据库恢复是将备份中的数据重新还原到数据库中,使数据库返回正常运行状态的过程。根据不同的恢复场景,Oracle数据库恢复可以分为以下几种方式:
完全恢复:将整个数据库恢复到最新的备份或归档日志所包含的时间点,保证数据库的完整性和一致性。
不完全恢复:在无法进行完全恢复时,通过尽可能多的应用归档日志来尽量还原数据。例如,在使用物理备份进行恢复时,如果缺失了部分归档日志,则可以使用不完全恢复方式进行数据还原。
点恢复:在数据库发生故障前可以选择进行点恢复,即让数据库回滚到指定时间点的状态,然后再应用相应的归档日志将其恢复到指定的时间点。这种方式可以避免不必要的数据丢失。
数据库复制技术
数据库复制是指将一个数据库的数据复制到另一个或多个数据库中,以实现数据共享等目的。Oracle数据库中常用的复制方式有以下几种:
物理复制:在物理层面上将一个数据库的数据文件直接复制到另一个数据库中,然后使用重做日志来保持两个数据库的一致性。该方式需要消耗大量的带宽和磁盘容量,但复制后的数据与源数据库的完全一致。
逻辑复制:在逻辑层面上将一个数据库的数据以SQL语句的形式发送到另一个数据库中,再使用重做日志进行保持同步。该方式可以按需选择需要复制的数据,但需要处理冲突和维护复制环境。
数据库容灾技术
容灾技术是指在其他设备或地区搭建数据库系统,实现数据库功能的部分或完全迁移,以保证业务连续、稳定性。Oracle数据库中常用的容灾技术有以下几种:
本地容灾:在同一机房内部署两台或多台数据库服务器,可以通过数据保护技术(如RAID)来提高数据库的可用性。
远程容灾:将某个数据中心的数据库同步地复制到另一个地方的备份系统,一旦源端数据库出现故障,可以快速地切换到备份系统上继续提供服务。
跨机房容灾:将某个数据中心的数据库实时地复制到另一个地方的机房,以实现异地容灾。通常需要较高的带宽和存储资源。
总之,《Oracle数据库高可用分析与实践》详细介绍了Oracle数据库的备份恢复、容灾、负载均衡、数据复制等方面的技术,为Oracle数据库管理人员提供了全面而实用的参考资料。在实际应用中,需要根据业务需求和实际情况选择合适的技术手段,以满足业务高可用性的要求。
20、Oracle数据库dba和sysdba的区别
vim .bash_profile--加入如下环境变量
export NLS_LANG="SIMPLIFIED CHINESE"_CHINA.UTF8
1.数据库的启动需要以SYSDBA/SYSOPER身份登录。
2.如果在同一主机上使用IPC连接到数据库使用操作系统授权,登录任何一个用户都可以拥有as sysdba和as sysoper。
3.sys和system用户的区别
SYS用户具有DBA权限,并具有SYS模式。只能通过SYSDBA登录数据库,是Oracle数据库中权限最高的帐号。sys用户具有“SYSDBA”和“SYSOPER”权限,登陆em时也只能用这两个身份,不能用normal。而system登录em时只能用normal模式登录。sys拥有数据字典(dictionary),或者说dictionary属于sys schema。
system用户具有DBA权限,但是没有SYSDBA权限。平常一般用该帐号管理数据库。登录em时只能使用normal登录。
4.SYSDBA权限和SYSOPER权限区别
“SYSOPER”权限,即数据库操作员权限,sysoper主要用来启动、关闭数据库,sysoper 登陆后用户是 public。权限包括:打开数据库(STARTUP, ALTER DATABASE OPEN/MOUNT/OPEN),服务器(CREATE SPFILE,etc)
关闭数据库服务器
备份数据库
恢复数据库RECOVERY
日志归档ARCHIVELOG
会话限制RESTRICTED SESSION
“SYSDBA”权限,即数据库管理员权限,最高的系统权限。任何具有sysdba登录后用户是“SYS”。权限包括:管理功能, 创建数据库(CREATE DATABASE)以及 “SYSOPER”的所有权限
其他用户需要手动grant权限,show user为该用户的名称。
SQL>conn / as sysdba
已连接。
SQL>grant sysoper to test;
授权成功。
SQL>grant sysdba to test;
授权成功。
SQL>conn test/test as sysoper;
已连接。
SQL>show user
USER 为"PUBLIC"
SQL>conn test/test as sysdba;
已连接。
SQL>show user;
USER 为"SYS"
SQL>conn test/test;
已连接。
SQL>show user
USER 为"test"
5.dba和sysdba的区别:
sysdba,是管理oracle实例的,它的存在不依赖于整个数据库完全启动,只要实例启动了,他就已经存在,以sysdba身份登陆,装载数据库、打开数据库。
只有在数据库完全启动后,dba角色才有了存在的基础.
Oracle、MySQL数据库体系结构的知识点
1、Oracle的SQL语句执行过程
以上的SQL语句执行过程分为三步:
第一步:Parse(解析)
第二步:Execute(执行)
第三:Fetch(获取)
1.2、解析的概念
解析:将高级语言转换为低级语言的过程
第一步:进行语法检查,如果有语法错误,SQL语句不能执行
第二步:进行语义检查,如果SQL语句中引用的表不存在,SQL语句不能执行
第三步:进行权限检查,如果执行SQL语句的用户没有权限,SQL语句不能执行
第四步:搜集统计信息,制定执行计划,要进行大量的聚集运算,要消耗大量的cpu
第五步:根据执行计划,执行SQL语句
1.3、解析的分类
解析分为:硬解析、软解析、软软解析
硬解析:要执行以上的五个步骤
软解析:避免第四步,而是通过shared pool中缓存的执行计划,执行SQL语句,性能要高于硬解析
软软解析:将执行计划缓存到PGA中,避免所有的五步,性能要高于软解析
2、日志的三种状态:
CURRENT
指当前的日志文件,该日志文件是活动的,当前正在被使用的
ACTIVE
日志是活动的非当前日志,该日志可能已经完成归档也可能没有归档
检查点尚未完成,如果日志文件循环使用再次到达该文件,数据库将处于等待的停顿状态
INACTIVE
是非活动日志,该日志在实例恢复时不再需要
3、Oracle数据的启动过程三个阶段:
nomount:
就是启动实例,也就是分配内存(SGA)
读取参数文件
mount:
数据库将实例与某个数据库进行关联的过程
读取参数文件中控制文件的位置,根据控制文件的位置到操作系统下查找所有的控制文件
control_files
记录了参数文件的位置
open:
数据库打开,只有打开之后,数据库中的数据才能被访问
读取控制文件中记录的所有数据文件和日志文件
4、Ogg和dg的同步机制
在Oracle数据库的DG(Data Guard)模式中,数据同步是通过Redo传输机制来实现的。具体机制如下:
-
- 主数据库产生的事务日志(Redo Log)会被持续地传输到备用数据库。这些Redo Log包含了所有已经提交的数据库更改。
-
- 主数据库将Redo Log传输给备用数据库的进程称为LGWR(Log Writer)。
-
- 备用数据库的进程称为RFS(Remote File Server),它接收主数据库传输的Redo Log,并将其写入备用数据库的重做日志文件。
-
- 当备用数据库接收到Redo Log后,它会将其应用到自己的物理数据库,使得备用数据库与主数据库保持数据的一致性。
-
- 备用数据库还可以以只读模式打开,这样可以充当查询报表等读操作的备份。
-
- 如果主数据库发生故障,可以手动或自动将备用数据库切换为主数据库,并继续提供服务。
通过以上机制,Oracle的DG模式可以保证主数据库和备用数据库之间的数据同步,从而实现高可用性和灾备能力。
Oracle的Data Guard(DG)和Oracle GoldenGate(OGG)都是用于数据库复制和灾难恢复的解决方案,但它们在本质上有一些区别:
-
数据同步方式:
- Data Guard主要通过Redo Log传输来保持主数据库和备用数据库的数据同步,即基于物理复制。它复制的是数据库中的物理块级别的更改。
- GoldenGate则是基于逻辑复制的解决方案,通过捕获源数据库中的DML(Data Manipulation Language)操作并将其转换成目标数据库上的等效操作来实现数据同步。这意味着GoldenGate可以跨不同版本、不同操作系统和不同数据库之间进行复制。
-
灵活性和功能:
- GoldenGate通常被认为更加灵活,因为它提供了更多的功能,例如跨平台、跨数据库、数据转换、数据过滤等。它不仅可以用于数据复制和灾难恢复,还可以用于数据集成、数据仓库加载等多种用途。
- Data Guard则是Oracle数据库自带的功能,更专注于提供数据库级别的高可用性和灾难恢复解决方案。虽然功能相对较少,但在保证Oracle数据库之间数据一致性和自动故障切换方面表现出色。
-
成本和复杂度:
- Data Guard通常被认为在Oracle数据库环境中更容易设置和管理,因为它是Oracle官方提供的解决方案,集成度高,对Oracle数据库的支持较好。同时,它也不需要额外的许可费用,因为它已经包含在Oracle数据库许可中。
- GoldenGate则可能需要额外的许可费用,并且设置和管理相对复杂一些,因为它可以用于跨不同数据库平台的数据复制,需要更多的配置和调整。
总的来说,Data Guard更适合那些只需要在Oracle数据库之间实现高可用性和灾难恢复的组织,而GoldenGate则更适合那些需要在不同数据库平台之间实现复杂数据集成和复制的场景。
5、Oracle数据库中的组件,和PGA分配过程
组件:
PGA分配过程
6、MySQL的分库分表
是指数据库的一种优化策略:
分库:1、一个库切分成多个库,每个库部署在不同的机器上,因为数据量增加,导致磁盘容量不够,可以大大降低磁盘使用率
2、高并发场景下,将不同功能模块拆分到不同数据库,分担读写压力,提高系统并发能力。
分表:1、将一个表切分成多个数据表,每个子表对应这三个文件(MYD数据文件、.MYI索引文件和.frm表结构文件)可以分布在同一个磁盘或者不同磁盘中,提高查询效率。
MySQL的分库分表和Oracle的分区表对比:
MySQL也有分区表机制
1、MySQL的是属于在数据库架构层面的优化,可以解决磁盘存储和并发连接支撑等问题,但也需要考虑数据一致性、事务处理、分布式事务等复杂问题。
2、Oracle的分区表是表结构层面的架构,将一个大表拆成多个区域,提升读取性能,Oracle的分区表可以自动管理分区的存储和索引
都提高了系统的可扩展性,稳定性和性能。分库分表更适用于数据量巨大、访问量高,高扩展性的系统。分区表更适用于数据量巨大但访问量相对较低,可维护姓高的系统
rac集群和分库分表区别:
1、分库主要解决数据量过大,提高性能瓶颈,提高查询效率。rac主要提高可用性和可扩展性,可以实现多个实例访问共享的文件集,实现负载均衡和故障转移。
2、分库需要再应用层面实现,需要根据业务模式设计策略,并在代码中实现数据的路由和分发。rac有内部机制实现数据同步和访问控制。
3、分库需要额外得机制保证数据一致性,可以使用分布式事务或补偿事务来处理跨库和跨表的数据更新操作。rac有内部机制,主管分布式事务锁机制来保证事务的一致性。
4、故障恢复和可扩展性:分库可以提高性能,但是不能直接提供故障恢复或可扩展性解决方案,需要额外的工具和策略保证。rac可以通过节点增删实现扩展性,故障转移实现高可用。
mysql集群和oracle集群架构的区别:
1、架构:MySQL集群通常采用无共享的分布式节点架构,提高容错性和高性能,数据更新使用读已提交隔离级别和两阶段提交机制保证节点数据一致性,可以达到高扩展性,并且没有单点故障点。rac内部就可以实现扩展伸缩高可用等。
2、实现方式:MySQL先实现分库分表的策略设计,并在代码中实现数据的路由和分发,MySQL集群是把一个叫做NDB的内存集群存储引擎集成与标准的MySQL服务集成,包含一组计算机每个都运行一个或者多个进程。
3、故障恢复和可扩展:MySQL集群,冗余设计和多个MySQL服务器分配负载来达到高可用和高性能,故障转移需要通过开发者在应用层面来实现。
4、运维和管理:MySQL集群层次较少,相对容易运维,但是运维人员要熟悉集群方案的配置和管理。
分库分表风险:
1、数据一致性问题,使用XA协议和两阶段提交处理跨分片事务,可能延长事务执行时间导致死锁,如果对于数据一致性不高可以使用事务补偿方式确保数据一致性。
2、跨节点关联查询(join)问题:需要考虑如何设计和优化跨界点关联查询减少性能影响。
3、数据迁移和扩展问题:制定策略完成数据迁移备份和恢复。
4、全局唯一ID生成:如果要保证每条记录都有一个全局唯一ID这需要借助中间件或者ID生成策略实现。
5、备份恢复难度增加:需要考虑每个数据库都能被单独备份恢复,且要考虑如何合并和恢复跨多个数据库或者表的数据。
6、网络延迟在分布式系统中会导致潜在风险。
分库分表优化:
1、选择合适的分片键,分片键就是把数据分到不同数据库或者表中的字段。
2、分片策略,常见的有范围分片,哈希分片,列表分片。按照分片键的范围进行分片。
3、优化查询语句,要避免夸分片查询和复杂的join操作。确保在经常用于查询的字段上建立索引,并定期更新和维护所有。
4、使用缓存来存储热点数据和经常查询的结果。可以使用Redis等内存数据库作为缓存层,减少访问数据库的次数。
5、考虑简化数据迁移和扩展的过程。可以使用自动化工具检测数据增长情况,当达到某个阈值时自动出发数据迁移和扩展工作。
7、InnoDB体系结构
Innodb存储引擎:
内存结构:
1、Buffer Pool(缓冲池):最重要的内存结构,用于缓存磁盘上的数据,加快数据的访问和修改,存储热点数据减少I/O,默认大小为128M,以页为存储单位的单链表,如果缓存数据量满或者系统空闲时进行写磁盘操作。
2、*Change Buffer(修改缓冲):是InnoDB写优化性能之一,主要修改非一二级索引页的修改。二级索引页不在Buffer Pool中时,会先将修改记录在Change Buffer中,待索引页被加载到Buffer Pool后再进行合并.,提高写性能。
3、Adaptive Hash Index(自适应哈希索引):InnoDB会根据访问模式和数据的统计信息自动地为某些热点数据构建哈希索引,以加快等值查询的速度。
4、Log Buffer(日志缓冲):InnoDB将日志信息先写入Log Buffer,然后再定期刷新到磁盘的redo log文件中。这样可以减少磁盘I/O操作的次数,提高日志写入的性能。
后台进程:
1、Master Thread(主线程):主要负责将Buffer Pool中的脏页异步刷新到磁盘,保证数据的一致性。它还会执行其他任务,如合并插入缓冲、回收undo页等。
2、I/O Thread(I/O线程):在InnoDB存储引擎中大量使用了AIO(异步I/O)来处理写I/O请求,而I/O Thread则负责这些I/O请求的回调处理。I/O Thread包括write、read、insert buffer和log I/O thread等。
Purge Thread(清除线程):事务被提交后,其所使用的undo log可能不再需要,因此需要Purge Thread来回收已经使用并分配的undo页。
8、事务补偿机制,两端提交协议
事务补偿机制:
在分布式系统中,MySQL本身不直接提供实物补偿机制,一个事务因为网络未能完成,通过一种机制确保数据一致性。
1、本地事务回滚,如果某个操作失败整个事务回滚到最基础的状态,这是MySQL最基本的事务补偿机制。
2、分布式事务,MySQL不直接支持分布式事务,可通过XA协议或者两段提交等实现,如果某个参与方的事务执行失败,其他参与方也要回滚。
3、消息补偿,可通过消息队列实现补偿机制,当某个操作失败时发送到消息队列中,由另一个进程来处理消息,可以实现更复杂的补偿逻辑。
4、应用补偿,可以在应用层面实现补偿逻辑,操作失败时记录补偿日志,有另一个服务或进程定期检查并执行操作。
两阶段提交协议:
用于MySQL中的分布式系统中有多个参与者(多个数据库)能够协同工作,以原子的方式完成一个事务机制。
例子:用户A(DB1)用户B(DB2),DB1,2是两个独立的数据库,A给B转账,转账是个分布式事务,因为涉及两个数据库。
准备阶段:
1、事务协调者(通常是一个独立的组件或进程)向参与者(在这种情况下是DB1和DB2)发送一个“准备”消息。
2、DB1收到消息后,检查本用户余额,如果够在本地直接扣除数据但不提交,要记录undo和redo撤销重做日志,方便回滚和提交,,DB1向事务协调者发送一个“准备就绪”的消息。
3、DB2 也收到“准备”消息,但它只是在等待,直到它收到来自事务协调者的“提交”或“回滚”消息。
提交阶段:
1、事务协调者收到来自DB1的“准备就绪”消息后(假设它也收到了来自DB2的“准备就绪”消息,尽管在这个例子中我们没有明确提到),它决定提交事务。
2、事务协调者向所有参与者(DB1和DB2)发送一个“提交”消息。
3、DB1 收到“提交”消息后,将之前准备阶段中执行的事务提交到数据库,并释放相关资源。它向事务协调者发送一个“提交完成”的消息。
4、DB2 也收到“提交”消息,并增加用户B的账户余额(增加100元)。它也提交事务并释放资源,然后向事务协调者发送一个“提交完成”的消息。
5、当事务协调者收到来自所有参与者的“提交完成”消息后,它知道整个分布式事务已成功完成。
如果在准备阶段,任何一个参与者(例如DB1)发现无法执行事务(例如,用户A的账户余额不足),它会向事务协调者发送一个“准备失败”的消息。在这种情况下,事务协调者会向所有参与者发送一个“回滚”消息,每个参与者都会回滚其本地事务,确保整个分布式事务的一致性。