使用虚拟机在VirtualBox+openEuler上安装部署openGauss数据库
作者:Gauss松鼠会 发布时间:2024-01-21 22:45:53
本节描述openGauss数据库在虚拟机VirtualBox+openEuler上的安装配置。
1、虚拟机VirtualBox下载及安装
步骤 1 进入官方网站下载页面。
网址:https://www.virtualbox.org/wiki/Downloads
点击” window主机” 下载windows版本的VirtualBox。
步骤 2下载完成后,双击执行文件进行安装。
下载后,文件名为:VirtualBox-6.1.14-140239-Win.exe,双击此执行文件进行安装,安装过程中存放地址可以根据自己想法去设置下,其他所有选项都可以默认,直接按下一步就行,最后安装成功。
具体如下:
2、openEuler-20.03-LTS镜像文件下载
步骤 1 进入华为开源镜像站的下载页面。
网址:https://mirrors.huaweicloud.com/openeuler/openEuler-20.03-LTS/ISO/x86_64/,具体如下:
步骤 2 点击” openEuler-20.03-LTS-x86_64-dvd.iso”,进行相应ISO镜像文件下载。
下载的文件名如下:
3、VirtualBox下安装openEuler-20.03-LTS操作系统
步骤 1 新建虚拟电脑。
打开VirtualBox软件。
在VirtualBox的管理器上点击”新建”,具体如下:
在此页面,填好相应的名称(如:openEuler)、文件存放地址(如:d:\vmwork)、操作系统类型(如:Linux))、版本(如:Other Linux),然后点击”下一步”。
内存设置为2048MB(表示整个系统只有2G内存),然后点击”下一步”。
采用默认设置,直接点击”创建”。
采用默认设置,直接点击”下一步”。
采用默认设置,直接点击”下一步”。
硬盘大小改为10G(10G表示硬盘自动扩展后所能达到的最大极限大小,在实际使用中可以根据自己情况来做调整),然后点击”创建”。
步骤 2 设置虚拟电脑并安装。
在VirtualBox的管理器上点击”设置”,具体如下:
在设置页面上点击”系统”,进行系统设置,在启动顺序中把”光驱”、”硬盘”移动至第一、二启动,”软驱”去掉勾选,具体如下:
处理器中,CPU设置为2,具体如下:
点击“存储“设置项,选择光盘并在分配光驱后面点击加载按钮将前面下载的openEuler-20.03-LTS-x86_64-dvd.iso文件加载至光驱中,具体如下:
点击“网络“设置项,这里用到二张网卡,网卡1连接方式下拉选择为”仅主机(Host-Only)网络“,主要用于本地电脑与虚拟电脑相连,具体如下:
网卡2设置,勾选“启用网络连接”,并且“连接方式选择”下拉选择为“网络地址转换(NAT)“,主要用于虚拟电脑与互联网相连,具体如下:
最后点击“OK“按钮,设置完成,设置完成页面如下:
点击启动按钮,开始进入系统安装。
确定光驱中的ISO内容正确后,点击“启动“。
启动安装第一界面,直接按下“Enter“键后就会进入自检界面。
语言选择中文----》简体中文(中国),然后点击“继续“。
在此页面,点击“安装位置“先进行分区,具体如下:
选择“自定义“,然后点击”完成“。
下拉选择“标准分区“,然后点击”点击这里自动创建他们“。
点击“完成“,进入下一步设置。
点击“接受更改“,完成分区设置,接下来进行网络和主机名设置。
在安装信息摘要页面,点击“网络和主机名“进行网络和主机名设置,具体如下:
分别针对二张网卡进行设置,如以太网(enpOs3)网卡,先点击“关闭“边上的按钮把网卡打开。
接着设置主机名(如:db1),并点击“应用(A)”,然后点击“配置“。
说明:设置主机名时一定要注意,如果在同一网段内有多位学员按此文档来安装,请尽量把主机名设成不一样。
在配置页中,选择“常规“,然后勾选”可用时自动链接到这个网络“,接着点击”保存“。
参数第一张网卡的设置步骤对第二张网卡进行设置,先打开网卡,接着进行配置,具体如下:
点击“保存“。
点击“完成“,结束网络和主机名的设置。
在安装信息摘要页面,点击“软件选择 “进行软件安装设置,具体如下:
在此页面选择“虚拟化主机“,并在右边勾选”Linux的远程管理“、”开发工具“、”安全性工具“、”系统管理工具“。然后点击完成。
设置结束,点击“开始安装“,具体如下:
点击“ROOT密码“,给ROOT用户设置密码(如:openGauss@123)。
点击“创建用户“,在此新创建一个用户(如:用户test,密码openGauss@123),具体如下:
系统安装中,等待数分钟后会出现如下界面:
出现此界面表示,系统安装完成,然后点击“重启“,但此时要调整系统从硬盘启动。
先关闭VM运行窗口,如下:
然后设置从硬盘启动,具体如下:
重启后,要求输入用户名及密码,这里用root用户登录,密码比如:openGauss@123,具体如下:
步骤 3 确认网络
在Linux操作系统上,通过ifconfig来查看二张网卡是否都正常启动,具体如下:
[root@db1 ~]# ifconfig
enp0s3: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.56.123 netmask 255.255.255.0 broadcast 192.168.56.255
inet6 fe80::ac2f:dc4f:edfe:1d57 prefixlen 64 scopeid 0x20<link>
ether 08:00:27:0f:78:e3 txqueuelen 1000 (Ethernet)
RX packets 519 bytes 48509 (47.3 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 178 bytes 52937 (51.6 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
enp0s8: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 10.0.3.15 netmask 255.255.255.0 broadcast 10.0.3.255
inet6 fe80::bedc:2040:4b9:23ed prefixlen 64 scopeid 0x20<link>
ether 08:00:27:45:8d:f0 txqueuelen 1000 (Ethernet)
RX packets 72 bytes 10702 (10.4 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 124 bytes 11664 (11.3 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
……………………………..
virbr0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
inet 192.168.122.1 netmask 255.255.255.0 broadcast 192.168.122.255
ether 52:54:00:05:11:90 txqueuelen 1000 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
通过ping baidu.com确认是否能上网,具体如下:
[root@db1 ~]# ping baidu.com
PING baidu.com (39.156.69.79) 56(84) bytes of data.
64 bytes from 39.156.69.79 (39.156.69.79): icmp_seq=1 ttl=47 time=48.1 ms
64 bytes from 39.156.69.79 (39.156.69.79): icmp_seq=2 ttl=47 time=46.5 ms
64 bytes from 39.156.69.79 (39.156.69.79): icmp_seq=3 ttl=47 time=49.2 ms
使用 ctrl+c组合键可以结束输出。
4、操作系统环境准备
为了操作方便,可以使用SSH工具(比如:PuTTY等)从本地电脑通过配置enp0s3网卡的IP地址(如:192.168.56.123)来连接虚拟机,并使用ROOT用户来登录。
步骤 1 关闭防火墙
执行以下二个命令将防火墙关闭,
systemctl stop firewalld.service
systemctl disable firewalld.service,具体如下:
[root@db1 ~]# cat >>/etc/profile<<EOF export LANG=en_US.UTF‐8 EOF [root@db1 ~]# [root@db1 ~]# cat >>/etc/profile<<EOF export packagePath=/opt/software/openGauss EOF [root@db1 ~]# source /etc/profile [root@db1 ~]# cat >>/etc/profile<<EOF export LD_LIBRARY_PATH=$packagePath/script/gspylib/clib:$LD_LIBRARY_PATH EOF [root@db1 ~]# [root@db1 ~]# source /etc/profile
步骤 2设置字符集及环境变量。
验证变量是否生效。
[root@db1 ~]# echo $LD_LIBRARY_PATH
结果为:
/opt/software/openGauss/script/gspylib/clib:
步骤 3关闭swap交换内存。
[root@db1 ~]# swapoff -a
步骤 4调整系统参数值。
执行如下命令打开performance.sh文件,用#注释sysctl -w vm.min_free_kbytes=112640 &> /dev/null,键入“ESC”键进入指令模式,执行:wq保存并退出修改。
使用vim打开文件“/etc/profile.d/performance.sh”
[root@db1 ~]# vi /etc/profile.d/performance.sh
输入”i”,进入INSERT模式。用#注释sysctl -w vm.min_free_kbytes=112640 &> /dev/null。
CPUNO=`cat /proc/cpuinfo|grep processor|wc -l`
export GOMP_CPU_AFFINITY=0-$[CPUNO - 1]
#sysctl -w vm.min_free_kbytes=112640 &> /dev/null
sysctl -w vm.dirty_ratio=60 &> /dev/null
sysctl -w kernel.sched_autogroup_enabled=0 &> /dev/null
点击“ESC”退出INSERT模式。输入“:wq”后回车,保存退出。
步骤 5准备yum环境。
备份原有的yum配置文件。
[root@db1 ~]# mv /etc/yum.repos.d/openEuler_x86_64.repo /etc/yum.repos.d/openEuler_x86_64.repo.bak
[root@db1 ~]#
下载可用源的repo文件:
curl -o /etc/yum.repos.d/openEuler_x86_64.repo https://mirrors.huaweicloud.com/repository/conf/openeuler_x86_64.repo
[root@db1 ~]# curl -o /etc/yum.repos.d/openEuler_x86_64.repo https://mirrors.huaweicloud.com/repository/conf/openeuler_x86_64.repo
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 886 0 886 0 0 3661 0 --:--:-- --:--:-- --:--:-- 3676
查看repo文件内容是否正确。
[root@db1 ~]# cat /etc/yum.repos.d/openEuler_x86_64.repo
[openEuler-source]
name=openEuler-source
baseurl=https://mirrors.huaweicloud.com/openeuler/openEuler-20.03-LTS/source/
enabled=1
gpgcheck=1
gpgkey=https://mirrors.huaweicloud.com/openeuler/openEuler-20.03-LTS/source/RPM-GPG-KEY-openEuler
[openEuler-os]
name=openEuler-os
baseurl=https://mirrors.huaweicloud.com/openeuler/openEuler-20.03-LTS/OS/x86_64/
enabled=1
gpgcheck=1
gpgkey=https://mirrors.huaweicloud.com/openeuler/openEuler-20.03-LTS/OS/x86_64/RPM-GPG-KEY-openEuler
[openEuler-everything]
name=openEuler-everything
baseurl=https://mirrors.huaweicloud.com/openeuler/openEuler-20.03-LTS/everything/x86_64/
enabled=1
gpgcheck=1
gpgkey=https://mirrors.huaweicloud.com/openeuler/openEuler-20.03-LTS/everything/x86_64/RPM-GPG-KEY-openEuler
[openEuler-EPOL]
name=openEuler-epol
baseurl=https://mirrors.huaweicloud.com/openeuler/openEuler-20.03-LTS/EPOL/x86_64/
enabled=1
gpgcheck=0
[root@db1 ~]#
步骤 6yum安装相关包。
执行以下命令,安装所需的包
yum install libaio* -y
yum install libnsl* -y
如下:
[root@db1 ~]# yum install libaio* -y
Last metadata expiration check: 0:00:44 ago on Thu 15 Oct 2020 10:38:26 AM CST.
Package libaio-0.3.111-5.oe1.x86_64 is already installed.
Dependencies resolved.
………………….
[root@db1 ~]# yum install libnsl* -y
Last metadata expiration check: 0:00:24 ago on Thu 07 Jan 2021 10:17:38 AM CST.
Package libnsl2-1.2.0-4.oe1.x86_64 is already installed.
Dependencies resolved.
………………….
步骤 7 设置默认Python版本为3.x。
[root@db1 ~]# cd /usr/bin
[root@db1 bin]# mv python python.bak
[root@db1 bin]# ln -s python3 /usr/bin/python
[root@db1 bin]# python -V
Python 3.6.8
步骤 8 创建存放数据库安装目录。
[root@db1 ~]# mkdir -p /opt/software/openGauss
[root@db1 ~]# cd /opt/software/openGauss
[root@db1 openGauss]#
5、安装openGauss数据库
步骤 1 创建XML配置文件,用于数据库安装。
[root@db1 openGauss]# vi clusterconfig.xml
将以下内容添加进clusterconfig.xml文件中。
<?xml version="1.0" encoding="UTF-8"?>
<ROOT>
<!-- openGauss整体信息 -->
<CLUSTER>
<PARAM name="clusterName" value="dbCluster" />
<PARAM name="nodeNames" value="db1" />
<PARAM name="backIp1s" value="10.0.3.15"/>
<PARAM name="gaussdbAppPath" value="/opt/gaussdb/app" />
<PARAM name="gaussdbLogPath" value="/var/log/gaussdb" />
<PARAM name="gaussdbToolPath" value="/opt/huawei/wisequery" />
<PARAM name="corePath" value="/opt/opengauss/corefile"/>
<PARAM name="clusterType" value="single-inst"/>
</CLUSTER>
<!-- 每台服务器上的节点部署信息 -->
<DEVICELIST>
<!-- node1上的节点部署信息 -->
<DEVICE sn="1000001">
<PARAM name="name" value="db1"/>
<PARAM name="azName" value="AZ1"/>
<PARAM name="azPriority" value="1"/>
<!-- 如果服务器只有一个网卡可用,将backIP1和sshIP1配置成同一个IP -->
<PARAM name="backIp1" value="10.0.3.15"/>
<PARAM name="sshIp1" value="10.0.3.15"/>
<!--dbnode-->
<PARAM name="dataNum" value="1"/>
<PARAM name="dataPortBase" value="26000"/>
<PARAM name="dataNode1" value="/gaussdb/data/db1"/>
</DEVICE>
</DEVICELIST>
</ROOT>
说明:其中标红的内容,需要根据自己实际的IP和主机名进行修改,如果其中的中文出现乱码时可以删除这些行。
步骤 2 使用wget下载数据库安装包到安装包目录
切换到安装目录:
[root@ecs-c9bf bin]# cd /opt/software/openGauss
使用wget下载安装包:
[root@ecs-c9bf openGauss]# wget https://opengauss.obs.cn-south-1.myhuaweicloud.com/1.1.0/x86_openEuler/openGauss-1.1.0-openEuler-64bit-all.tar.gz
注:https://opengauss.obs.cn-south-1.myhuaweicloud.com/1.1.0/x86_openEuler/openGauss-1.1.0-openEuler-64bit-all.tar.gz是数据库安装包下载网址,输入时不需要进行换行。
下载成功显示如下:
……
2020-09-14 13:57:23 (9.33 MB/s) - ‘openGauss-1.1.0-openEuler-64bit-all.tar.gz’ saved [58468915/58468915]
步骤 3在安装包所在的目录下,解压安装包。
[root@ecs-c9bf openGauss]# cd /opt/software/openGauss
解压缩安装包:
先解压openGauss-1.1.0-openEuler-64bit-all.tar.gz包。
[root@ecs-c9bf openGauss]# tar -zxvf openGauss-1.1.0-openEuler-64bit-all.tar.gz
再先解压openGauss-1.1.0-openEuler-64bit-om.tar.gz包。
[root@ecs-c9bf openGauss]# tar -zxvf openGauss-1.1.0-openEuler-64bit-om.tar.gz
解压后如下,用ls命令查看如下:
[root@ecs-c9bf openGauss]# ls
clusterconfig.xml openGauss-Package-bak_392c0438.tar.gz
lib script
openGauss-1.1.0-openEuler-64bit-all.tar.gz simpleInstall
openGauss-1.1.0-openEuler-64bit-om.sha256 upgrade_sql.sha256
openGauss-1.1.0-openEuler-64bit-om.tar.gz upgrade_sql.tar.gz
openGauss-1.1.0-openEuler-64bit.sha256 version.cfg
openGauss-1.1.0-openEuler-64bit.tar.bz2
安装包解压后,会在/opt/software/openGauss路径下自动生成script子目录,并且在script目录下生成gs_preinstall等各种OM工具脚本。
更改权限。
[root@db1 openGauss]# chmod 755 -R /opt/software
[root@db1 openGauss]#
步骤 4执行初始化脚本。
[root@db1 openGauss]# cd /opt/software/openGauss/script
[root@db1 script]# python gs_preinstall -U omm -G dbgrp -X /opt/software/openGauss/clusterconfig.xml
Parsing the configuration file.
Successfully parsed the configuration file.
Installing the tools on the local node.
Are you sure you want to create trust for root (yes/no)? yes
Please enter password for root.
Password:
Creating SSH trust for the root permission user.
Checking network information.
……………………………………..
Are you sure you want to create the user[omm] and create trust for it (yes/no)? yes
Please enter password for cluster user.
Password:
Please enter password for cluster user again.
Password:
Successfully created [omm] user on all nodes.
Preparing SSH service.
Successfully prepared SSH service.
……………………………………..
Successfully set finish flag.
Preinstallation succeeded.
期间需要输入操作系统root用户的密码(如密码:openGauss@123)和创建操作系统omm用户及设置密码(如密码:openGauss@123)。
当返回Preinstallation succeeded内容时,表明初始化完成。
步骤 5 初始化数据库
用init 6 重启下虚拟机(主要是为了释放一些内存资源)。
[root@db1 script]# init 6
Connection closing...Socket close.
Connection closed by foreign host.
Disconnected from remote host(ONE) at 10:51:59.
Type `help' to learn how to use Xshell prompt.
过段时间虚拟机重启好后,再次使用SSH工具(比如:PuTTY等)从本地电脑通过配置enp0s3网卡的IP地址(如:192.168.56.123)来连接虚拟机,并使用ROOT用户来登录,然后接着以下操作。
先更新下权限。
[root@db1 script]# chmod 755 -R /opt/software
[root@db1 openGauss]#
然后使用omm用户进行数据库初始化。
注意:根据用户实际内存大小设置对应的共享内存的大小,如果对该参数进行了设置,会在数据库启动时候报错,本实验虚拟机总内存大小是2G。
gs_install -X /opt/software/openGauss/clusterconfig.xml --gsinit-parameter="–encoding=UTF8" --dn-guc=“max_process_memory=2GB” --dn-guc=“shared_buffers=128MB” --dn-guc=“bulk_write_ring_size=128MB” --dn-guc=“cstore_buffers=16MB”
具体如下:
[root@db1 openGauss]# su - omm
Last login: Thu Sep 10 15:26:21 CST 2020 on pts/0
[omm@db1 ~]$ cd /opt/software/openGauss/script
[omm@db1 script]$ gs_install -X /opt/software/openGauss/clusterconfig.xml --gsinit-parameter="--encoding=UTF8" --dn-guc="max_process_memory=2GB" --dn-guc="shared_buffers=128MB" --dn-guc="bulk_write_ring_size=128MB" --dn-guc="cstore_buffers=16MB"
Parsing the configuration file.
Check preinstall on every node.
Successfully checked preinstall on every node.
Creating the backup directory.
Successfully created the backup directory.
begin deploy..
Installing the cluster.
begin prepare Install Cluster..
Checking the installation environment on all nodes.
begin install Cluster..
Installing applications on all nodes.
Successfully installed APP.
begin init Instance..
encrypt cipher and rand files for database.
Please enter password for database:
Please repeat for database:
begin to create CA cert files
The sslcert will be generated in /opt/gaussdb/app/share/sslcert/om
Cluster installation is completed.
Configuring.
………………………….
Successfully started cluster.
Successfully installed application.
end deploy..
注意:输入omm用户密码时,不要输入错误(如密码:openGauss@123)。
步骤 6清理软件安装包。
[omm@db1 openGauss]$ exit
logout
[root@db1 /]# cd /root
[root@db1 script]# cd /opt/software/openGauss/
[root@db1 openGauss]# ll
total 288M
-rw-------. 1 omm dbgrp 1.4K Jan 7 10:32 clusterconfig.xml
drwx------. 15 root root 4.0K Jan 7 10:31 lib
-r--------. 1 root root 95M Dec 31 20:59 openGauss-1.1.0-openEuler-64bit-all.tar.gz
-r--------. 1 root root 65 Dec 31 20:40 openGauss-1.1.0-openEuler-64bit-om.sha256
-r--------. 1 root root 13M Dec 31 20:40 openGauss-1.1.0-openEuler-64bit-om.tar.gz
-r--------. 1 root root 65 Dec 31 20:39 openGauss-1.1.0-openEuler-64bit.sha256
-r--------. 1 root root 84M Dec 31 20:39 openGauss-1.1.0-openEuler-64bit.tar.bz2
-r--------. 1 root root 96M Jan 7 10:32 openGauss-Package-bak_392c0438.tar.gz
drwx------. 6 root root 4.0K Dec 31 20:40 script
drwxr-xr-x. 2 root root 4.0K Dec 31 20:40 simpleInstall
-r--------. 1 root root 65 Dec 31 20:39 upgrade_sql.sha256
-r--------. 1 root root 132K Dec 31 20:39 upgrade_sql.tar.gz
-r--------. 1 root root 32 Dec 31 20:38 version.cfg
-rwxr-xr-x. 1 root root 32 Oct 14 02:12 version.cfg
[root@db1 openGauss]# rm -rf openGauss-1.1.0-openEuler-64bit-all.tar.gz
[root@db1 openGauss]# rm -rf openGauss-1.1.0-openEuler-64bit-om.tar.gz
数据库安装结束。
来源:https://blog.csdn.net/GaussDB/article/details/122537197
猜你喜欢
- Python有许多吸引力,如效率,代码可读性和速度,使其成为数据科学爱好者的首选编程语言。Python通常是希望升级其应用程序功能的数据科学
- 前言正则表达式的基础知识就不说了,有兴趣的可以点击这里,提取一般分两种情况,一种是提取在文本中提取单个位置的字符串,另一种是提取连续多个位置
- 自相关图是一个平面二维坐标悬垂线图。横坐标表示延迟阶数,纵坐标表示自相关系数偏自相关图跟自相关图类似, 横坐标表示延迟阶数,纵坐标表示偏自相
- 本文实例讲述了Python3.6实现连接mysql或mariadb的方法。分享给大家供大家参考,具体如下:python3.6的安装查看前面一
- 以前写过《 10条影响CSS渲染速度的写法与建议》,今天放些数据出来,供参考;首先说明一点,CSS对网页的最后渲染出来的速度影响非
- 前言:str转换为json格式,前提一定需要保证这个str的格式和json是一致的,即左边最外层是大括号,右边的最外层是大括号。如果不一致,
- JPGjpg全名是JPEG 。JPEG 图片以 24 位颜色存储单个光栅图像。JPEG 是与平台无关的格式,支持最高级别的压缩,不过,这种压
- 依赖os、sys、requests工具代码废话不多说,上代码。#!/usr/bin/env python3# -*- coding: utf
- 本文是对pandas官方网站上《10Minutes to pandas》的一个简单的翻译,原文在这里。这篇文章是对pandas的一个简单的介
- 这篇文章主要介绍了python匿名函数lambda原理及实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值
- Spring @Enable 模块概览框架实现@Enable注解模块激活模块Spring Framework@EnableWebMvcWeb
- 啊,为此我特意准备了两个程序,一个是用来测试的,一个是主程序。来看看吧直接放连点器代码:# 改进版import pyautogui as p
- 准备在断网的和联网的机器安装pip,下载地址https://pypi.python.org/pypi/pip在联网的开发机器上安装好需要的包
- 本文实例讲述了Python聚类算法之凝聚层次聚类。分享给大家供大家参考,具体如下:凝聚层次聚类:所谓凝聚的,指的是该算法初始时,将每个点作为
- Web应用中大多会提供静态文件服务以便给用户更好的访问体验。静态文件主要包含CSS样式文件,js脚本,图片和字体等。Flask也支持静态文件
- 格式化字符串是什么?Python字符串的格式化处理主要是用来将变量(对象)的值填充到字符串中,在字符串中解析Python表达式,对字符串进行
- 看文档发现一行代码就能搞定状态和和更改数据,挺有意思,分享一下更改staff人员状态以及在username字段后加上_lizhi,成为use
- [项目]数据库中users表,包含u_name,u_pwd两个字段,其中u_name存在重复项,现在要实现把重复的项删除![分析]1、生成一
- 本文实例讲述了Python面向对象实现一个对象调用另一个对象操作。分享给大家供大家参考,具体如下:我先总结一下python中的类的特点:1.
- 1.网页背景色的设置 犯错机率:很大普遍性:较广犯错可能性:懒/不知道约2年前我曾发现21cn上出现过一次没有设置背景色的情况,当时我用Em